Full Code of ziahamza/webui-aria2 for AI

master 109903f0e277 cached
77 files
1.9 MB
482.6k tokens
632 symbols
1 requests
Download .txt
Showing preview only (1,991K chars total). Download the full file or copy to clipboard to get everything.
Repository: ziahamza/webui-aria2
Branch: master
Commit: 109903f0e277
Files: 77
Total size: 1.9 MB

Directory structure:
gitextract_464do6bl/

├── .dockerignore
├── .gitignore
├── .prettierignore
├── .prettierrc
├── CONTRIBUTING.md
├── Dockerfile
├── Dockerfile.arm32v7
├── LICENSE
├── README.md
├── app.json
├── directurl.md
├── docker-compose.yml
├── docs/
│   ├── app.css
│   ├── app.js
│   ├── index.html
│   ├── precache-manifest.b562a874cfed1a8c74df9b49e6f1c2cc.js
│   ├── service-worker.js
│   └── vendor.js
├── node-server.js
├── package.json
├── postcss.config.js
├── src/
│   ├── index-template.html
│   ├── js/
│   │   ├── app.js
│   │   ├── ctrls/
│   │   │   ├── alert.js
│   │   │   ├── main.js
│   │   │   ├── modal.js
│   │   │   ├── nav.js
│   │   │   └── props.js
│   │   ├── directives/
│   │   │   ├── chunkbar.js
│   │   │   ├── dgraph.js
│   │   │   ├── fileselect.js
│   │   │   ├── fselect.js
│   │   │   └── textarea.js
│   │   ├── filters/
│   │   │   ├── bytes.js
│   │   │   └── url.js
│   │   ├── libs/
│   │   │   └── bootstrap-filestyle.js
│   │   ├── services/
│   │   │   ├── alerts.js
│   │   │   ├── base64.js
│   │   │   ├── configuration.js
│   │   │   ├── deps.js
│   │   │   ├── errors.js
│   │   │   ├── modals.js
│   │   │   ├── rpc/
│   │   │   │   ├── helpers.js
│   │   │   │   ├── jsoncall.js
│   │   │   │   ├── rpc.js
│   │   │   │   ├── sockcall.js
│   │   │   │   └── syscall.js
│   │   │   ├── settings/
│   │   │   │   ├── filters.js
│   │   │   │   └── settings.js
│   │   │   └── utils.js
│   │   └── translate/
│   │       ├── cs_CZ.js
│   │       ├── de_DE.js
│   │       ├── en_US.js
│   │       ├── es_ES.js
│   │       ├── fa_IR.js
│   │       ├── fr_FR.js
│   │       ├── id_ID.js
│   │       ├── it_IT.js
│   │       ├── nl_NL.js
│   │       ├── pl_PL.js
│   │       ├── pt_BR.js
│   │       ├── ru_RU.js
│   │       ├── template.js
│   │       ├── th_TH.js
│   │       ├── tr_TR.js
│   │       ├── zh_CN.js
│   │       └── zh_TW.js
│   └── scss/
│       ├── _bootstrap-custom.scss
│       ├── _download.scss
│       ├── _flag-icon-css-custom.scss
│       ├── _icon.scss
│       ├── _modals.scss
│       ├── _style.scss
│       └── app.scss
├── static.json
├── webpack.config.js
└── webui-aria2.spec

================================================
FILE CONTENTS
================================================

================================================
FILE: .dockerignore
================================================
.git
screenshots
src
.gitignore
.prettierignore
.prettierrc
CONTRIBUTING.md
LICENSE
README.md
app.json
directurl.md
docker-compose.yml
favicon.ico
node-server.js
package-lock.json
package.json
postcss.config.js
static.json
webpack.config.js
webui-aria2.spec


================================================
FILE: .gitignore
================================================
.DS_STORE
.idea
.git
debug.log
stats.json
node_modules

================================================
FILE: .prettierignore
================================================
build/*
**/*.min.js
**/*.min.css

================================================
FILE: .prettierrc
================================================
{
	"printWidth": 100
}

================================================
FILE: CONTRIBUTING.md
================================================
## Contributor's Guide

First off, thanks for taking the time to contribute! :tada::+1:

WebUI-Aria2 is an Angular JS 1.x application bundled with webpack. Follow the [Get Started Guide](#get-started) to setup the development environment. You'll need `Node > 6` and latest version of `npm` to build the source files.

## Get Started

To start developing an awesome feature or to fix a bug [fork and clone the repo](https://help.github.com/articles/fork-a-repo/) and then install Node.js > 6 and npm.

Next, install this package's dependencies with npm using `npm install` command.

Then run `npm run dev` command to start an HTTP development server on http://localhost:8888 and to watch and compile the source files.

Use `npm run build` to create a production ready build from source files.

### Useful commands

| Command                   | Purpose                                                                                                   |
| ------------------------- | --------------------------------------------------------------------------------------------------------- |
| `npm install`             | will install required dependencies                                                                        |
| `npm run dev`             | will start an HTTP dev server on http://localhost:8888 and will watch and compile the source files        |
| `npm run build`           | will create a production build from source files                                                          |
| `npm run analyze`         | will open a bundle analyzer on port http://localhost:9999. Useful for visualizing contents of your bundle |
| `npm run format --silent` | will format your code for consistency using Prettier                                                      |


================================================
FILE: Dockerfile
================================================
FROM debian:8

# less priviledge user, the id should map the user the downloaded files belongs to
RUN groupadd -r dummy && useradd -r -g dummy dummy -u 1000

# webui + aria2
RUN apt-get update \
	&& apt-get install -y aria2 busybox curl \
	&& rm -rf /var/lib/apt/lists/*

ADD ./docs /webui-aria2

# gosu install latest
RUN GITHUB_REPO="https://github.com/tianon/gosu" \
  && LATEST=`curl -s  $GITHUB_REPO"/releases/latest" | grep -Eo "[0-9].[0-9]*"` \
  && curl -L $GITHUB_REPO"/releases/download/"$LATEST"/gosu-amd64" > /usr/local/bin/gosu \
  && chmod +x /usr/local/bin/gosu

# goreman supervisor install latest
RUN GITHUB_REPO="https://github.com/mattn/goreman" \
  && LATEST=`curl -s  $GITHUB_REPO"/releases/latest" | grep -Eo "v[0-9]*.[0-9]*.[0-9]*"` \
  && curl -L $GITHUB_REPO"/releases/download/"$LATEST"/goreman_"$LATEST"_linux_amd64.tar.gz" > goreman.tar.gz \
  && tar xvf goreman.tar.gz && mv /goreman*/goreman /usr/local/bin/goreman && rm -R goreman*

# goreman setup
RUN echo "web: gosu dummy /bin/busybox httpd -f -p 8080 -h /webui-aria2\nbackend: gosu dummy /usr/bin/aria2c --enable-rpc --rpc-listen-all --dir=/data" > Procfile

# aria2 downloads directory
VOLUME /data

# aria2 RPC port, map as-is or reconfigure webui
EXPOSE 6800/tcp

# webui static content web server, map wherever is convenient
EXPOSE 8080/tcp

CMD ["start"]
ENTRYPOINT ["/usr/local/bin/goreman"]


================================================
FILE: Dockerfile.arm32v7
================================================
# As of 2018-06-29 https://github.com/aria2/aria2/blob/master/Dockerfile.raspberrypi, aria2 is build upon ubuntu trusty (which is debian 8). So pick a debian 8 as well
FROM arm32v7/debian:8.11 AS aria2-builder

# aria2 build
RUN mkdir -p /builds && mkdir -p /builds/aria2c \
    && apt-get update \
    && export DEBIAN_FRONTEND=noninteractive \
    && apt-get install -y curl git \
    make g++ libssl-dev nettle-dev libgmp-dev libssh2-1-dev libc-ares-dev libxml2-dev zlib1g-dev libsqlite3-dev pkg-config libxml2-dev libcppunit-dev autoconf automake autotools-dev autopoint libtool openssl \
    && ARIA2_VERSION="1.34.0" \
    && mkdir aria_build && cd aria_build \
    && curl -L https://github.com/aria2/aria2/releases/download/release-"$ARIA2_VERSION"/aria2-"$ARIA2_VERSION".tar.gz > aria2.tar.gz \
    && tar -xzf aria2.tar.gz \
    && cd aria2-$ARIA2_VERSION \
    && autoreconf -i \
    && ./configure --with-ca-bundle='/etc/ssl/certs/ca-certificates.crt' \
    && make \
    && mv src/aria2c /builds/aria2c \
    && cd ../.. \
    && rm -rf aria_build \
    && rm -rf /var/lib/apt/lists/*



FROM arm32v7/golang:1.10.0-stretch AS go-builder

# goreman build
RUN mkdir -p /builds && mkdir -p /builds/goreman \
    && export GOPATH=`pwd` \
    && go get github.com/mattn/goreman \
    && go build -o /builds/goreman/goreman github.com/mattn/goreman

RUN mkdir -p /builds && mkdir -p /builds/gosu \
    && apt-get update && apt-get install -y curl \
    && GITHUB_REPO="https://github.com/tianon/gosu" \
    && LATEST=`curl -s  $GITHUB_REPO"/releases/latest" | grep -Eo "[0-9].[0-9]*"` \
    && curl -L $GITHUB_REPO"/releases/download/"$LATEST"/gosu-armhf" > /builds/gosu/gosu \
    && chmod +x /builds/gosu/gosu \
    && unset GITHUB_REPO && unset LATEST \
    && rm -rf /var/lib/apt/lists/*



FROM arm32v7/httpd:2.4.33
# BE CAREFULL the arm32v7/httpd image MUST match the version of debian used to build aria2. otherwise shared library versions might not be the same.
# A better approach will be to build static version of aria2.

# download aria2 dependendies
RUN apt-get update && apt-get install -y --no-install-recommends \
      busybox \
      ca-certificates \
      libc-ares2 \
      libssh2-1 \
      libxml2 \
      openssl \
      libsqlite3-0 \
      zlib1g \
    && rm -rf /var/lib/apt/lists/*

# Grab aria2c, goreman and gosu binaries
COPY --from=aria2-builder /builds/aria2c/aria2c /usr/bin/
COPY --from=go-builder /builds/goreman/goreman /usr/local/bin/
COPY --from=go-builder /builds/gosu/gosu /usr/local/bin/

ADD ./docs /webui-aria2

RUN groupadd -r aria \
    && useradd -m -r -g aria aria -u 1000 \
    && echo "web: gosu aria /bin/busybox httpd -f -p 8080 -h /webui-aria2\nbackend: gosu aria bash -c 'shopt -s dotglob nullglob && /usr/bin/aria2c --dir=/data/downloads/ --conf-path=/home/aria/.aria2/aria2.conf /data/downloads/*.torrent'" > Procfile

# aria2 downloads directory
VOLUME /data/downloads

# aria2 conf directory
VOLUME /home/aria/.aria2

# webui static content web server and aria2 RPC port
EXPOSE 8080 6800

CMD ["start"]
ENTRYPOINT ["/usr/local/bin/goreman"]


================================================
FILE: LICENSE
================================================
Copyright (c) 2012 Hamza Zia

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


================================================
FILE: README.md
================================================
# WebUI-Aria2

![Main interface](/screenshots/overview.png?raw=true)

The aim for this project is to create the worlds best and hottest interface to interact with aria2. aria2 is the worlds best file downloader, but sometimes the command line brings more power than necessary. The project was initially created as part of the GSOC scheme, however it has rapidly grown and changed with tremendous support and feedback from the aria2 community.

Very simple to use, no build scripts, no installation scripts. First start aria2 in the background either in your local machine or in a remote one. You can do that as follows:

```bash
aria2c --enable-rpc --rpc-listen-all
```

If aria2 is not installed in your local machine then head on to https://aria2.github.io/ and follow the instructions there.

Then to use the WebUI-Aria2,

- You can either download this repository and open index.html from `docs` folder.
- Or you could just head on to https://ziahamza.github.io/webui-aria2 and start downloading files! Once you have visited the URL thanks to [Progressive Web Apps](https://developers.google.com/web/progressive-web-apps/) you can open the same URL even when you are offline.
- Or you can also use NodeJS to create simple server by using the following command from the project folder.

```bash
node node-server.js
```

# Tips

1. You can always select which files to download in case of torrents or metalinks. Just pause a download and a list icon should appear next to the settings button. To select which files to download before starting the download, give the flag --pause-metadata to aria2. See [link](https://aria2.github.io/manual/en/html/aria2c.html#cmdoption--pause-metadata)

# Configuration

Read and edit [configuration.js](src/js/services/configuration.js).

## DirectURL

This feature allows users to download files that they download from aria2 directly from the webui dashboard. If you are familiar with how webservers work, setup a http server that points at the configured aria2 download directory, check permissions. Then Specify a full url: `http://server:port/` in the webui directURL configuration.

If the above is not obvious, keep reading what this is about in [directurl.md](directurl.md)

# Dependencies

Well, you need aria2. And a web browser (if that even counts!)

# Docker support

There is two Dockerfile in this project, one is a common Dockerfile, which can be use for **testing purpose**.<br>
The second is a **production ready** Dockerfile for arm32v7 platforms (including Raspberry Pi).

### For testing purpose

You can also try or use webui-aria2 in your LAN inside a Docker sandbox.

Build the image

```bash
sudo docker build -t yourname/webui-aria2 .
```

..and run it! It will be available at: `http://localhost:9100`

```bash
sudo docker run -v /Downloads:/data -p 6800:6800 -p 9100:8080 --name="webui-aria2" yourname/webui-aria2
```

`/Downloads` is the directory in the host where you want to keep the downloaded files

### Production ready (ARM platform)

This image contains both aria2 and webui-aria2.

Build it (may take several hours due to the aria2 compilation process. Don't panic and grab a coffee).

```
docker build -f Dockerfile.arm32v7 -t yourname/webui-aria2 .
```

This command will ends up building three images:

- The first one is just about compiling aria2 and goreman binaries. It MUST be deleted each time the `ARIA2_VERSION` is changed in the Dockerfile, otherwise you won't benefit from the update.
- The second is about building and downloading some go dependencies (goreman and gosu).
- The second one is the acutal aria2 container, the one you must use.

<br />
Prepare the host volume:
This image required few file to be mounted in the container.
```
/home/aria/aria2/session.txt  (empty file)
/home/aria/aria2/aria2.log    (empty file)
/home/aria/aria2/aria2.conf   (aria2 configuration file, not webui-aria2 conf) must contains at least `enable-rpc=true` and `rpc-listen-all=true`
/data/downloads/        (where the downloaded files goes)
```

Run it

```
docker run --restart=always \
        -v /home/<USER>/data/aria2/downloads:/data/downloads \
        -v /home/<USER>/data/aria2/.aria2:/home/aria/.aria2 \
        -p 6800:6800 -p 9100:8080 \
        --name="webui-aria2" \
        -d yourname/webui-aria2
```

# Contributing

Checkout [contributor's guide](CONTRIBUTING.md) to know more about how to contribute to this project.

# Deploy to Heroku

[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy)

# Support

For any support, feature request and bug report add an issue in the github project. [link](https://github.com/ziahamza/webui-aria2/issues)

# License

Refer to the LICENSE file (MIT License). If the more liberal license is needed then add it as an issue


================================================
FILE: app.json
================================================
{
  "name": "webui-aria2",
  "description":
    "This project is to create the worlds best and hottest interface to interact with aria2.",
  "repository": "https://github.com/ziahamza/webui-aria2",
  "keywords": ["AngularJS", "aria2", "static"],
  "buildpacks": [
    {
      "url": "https://github.com/heroku/heroku-buildpack-static"
    }
  ]
}


================================================
FILE: directurl.md
================================================
DirectURL
=========
Consider the following scenarios:

1. aria2 is running on a computer that is not locally accessible via the LAN and the files need to be copied from remote aria2 computer to the local computer
2. aria2 is running locally somewhere and setting up samba/nfs/etc is "meh"

HTTP to the rescue, already in the browser right?

Simplest way is to link your download folder or use python to setup an extra http server.

Steps using linked download folder
----------------------------------
1. as part of configuring aria2 to make life easier you will have set the global **dir** option to something like **/home/aria2/downloads**
2. clearly this folder is owned by the user **aria2**
3. open a shell session logged in as **aria2**
4. run ```ln -s /home/aria2/downloads /var/www/aria2/downloads```
5. go to webui-aria2 in your browser (http://serverip:81 - assuming webui-aria2 is running on port 81)
6. go to ```Settings > Connection Settings```
7. scroll down to Direct Download and put ```http://serverip:81/downloads/``` in base URL field _(make sure have the / on the end)_
8. now that URL has been specified all the files will be converted into clickable links
9. checkout the ```more info``` on a download and see for yourself
10. if you click on files that aren't finished downloading **you're going to have a bad day**

Steps using extra http server
-----------------------------
1. as part of configuring aria2 to make life easier you will have set the global **dir** option to something like **/home/aria2/downloads**
2. clearly this folder is owned by the user **aria2**
3. open a shell session logged in as **aria2**
4. run ```cd /home/aria2/downloads```
5. run ```python -m SimpleHTTPServer 8080```
6. webserver is now running on port 8080 and will serve files from the directory the command was run in
7. to test open up http://serverip:8080 - should get a directory listing. any browser errors and something hasn't been done properly, check IP/PORT etc
8. go back to webui-aria2
9. go to ```Settings > Connection Settings```
10. scroll down to Direct Download and put ```http://serverip:8080/``` in base URL field _(make sure have the / on the end)_
11. now that URL has been specified all the files will be converted into clickable links
13. checkout the ```more info``` on a download and see for yourself
14. if you click on files that aren't finished downloading **you're going to have a bad day**


================================================
FILE: docker-compose.yml
================================================
aria2:
    image: ndthuan/aria2-alpine
    volumes:
        - $HOME/Downloads:/downloads
    ports:
        - "6800:6800"

httpd:
    image: busybox
    volumes:
        - ./:/usr/html
    ports:
        - "80:80"
    command: /bin/busybox httpd -f -p 80 -h /usr/html


================================================
FILE: docs/app.css
================================================
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
html {
  font-family: sans-serif;
  -ms-text-size-adjust: 100%;
  -webkit-text-size-adjust: 100%;
}
body {
  margin: 0;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
  display: block;
}
audio,
canvas,
progress,
video {
  display: inline-block;
  vertical-align: baseline;
}
audio:not([controls]) {
  display: none;
  height: 0;
}
[hidden],
template {
  display: none;
}
a {
  background-color: transparent;
}
a:active,
a:hover {
  outline: 0;
}
abbr[title] {
  border-bottom: 1px dotted;
}
b,
strong {
  font-weight: bold;
}
dfn {
  font-style: italic;
}
h1 {
  font-size: 2em;
  margin: 0.67em 0;
}
mark {
  background: #ff0;
  color: #000;
}
small {
  font-size: 80%;
}
sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}
sup {
  top: -0.5em;
}
sub {
  bottom: -0.25em;
}
img {
  border: 0;
}
svg:not(:root) {
  overflow: hidden;
}
figure {
  margin: 1em 40px;
}
hr {
  -webkit-box-sizing: content-box;
  box-sizing: content-box;
  height: 0;
}
pre {
  overflow: auto;
}
code,
kbd,
pre,
samp {
  font-family: monospace, monospace;
  font-size: 1em;
}
button,
input,
optgroup,
select,
textarea {
  color: inherit;
  font: inherit;
  margin: 0;
}
button {
  overflow: visible;
}
button,
select {
  text-transform: none;
}
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
  -webkit-appearance: button;
  cursor: pointer;
}
button[disabled],
html input[disabled] {
  cursor: default;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
  border: 0;
  padding: 0;
}
input {
  line-height: normal;
}
input[type="checkbox"],
input[type="radio"] {
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  padding: 0;
}
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
  height: auto;
}
input[type="search"] {
  -webkit-appearance: textfield;
  -webkit-box-sizing: content-box;
  box-sizing: content-box;
}
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
  -webkit-appearance: none;
}
fieldset {
  border: 1px solid #c0c0c0;
  margin: 0 2px;
  padding: 0.35em 0.625em 0.75em;
}
legend {
  border: 0;
  padding: 0;
}
textarea {
  overflow: auto;
}
optgroup {
  font-weight: bold;
}
table {
  border-collapse: collapse;
  border-spacing: 0;
}
td,
th {
  padding: 0;
} /*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
@media print {
  *,
  *:before,
  *:after {
    background: transparent !important;
    color: #000 !important;
    -webkit-box-shadow: none !important;
    box-shadow: none !important;
    text-shadow: none !important;
  }
  a,
  a:visited {
    text-decoration: underline;
  }
  a[href]:after {
    content: " (" attr(href) ")";
  }
  abbr[title]:after {
    content: " (" attr(title) ")";
  }
  a[href^="#"]:after,
  a[href^="javascript:"]:after {
    content: "";
  }
  pre,
  blockquote {
    border: 1px solid #999;
    page-break-inside: avoid;
  }
  thead {
    display: table-header-group;
  }
  tr,
  img {
    page-break-inside: avoid;
  }
  img {
    max-width: 100% !important;
  }
  p,
  h2,
  h3 {
    orphans: 3;
    widows: 3;
  }
  h2,
  h3 {
    page-break-after: avoid;
  }
  .navbar {
    display: none;
  }
  .btn > .caret,
  .dropup > .btn > .caret {
    border-top-color: #000 !important;
  }
  .label {
    border: 1px solid #000;
  }
  .table {
    border-collapse: collapse !important;
  }
  .table td,
  .table th {
    background-color: #fff !important;
  }
  .table-bordered th,
  .table-bordered td {
    border: 1px solid #ddd !important;
  }
}
* {
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
*:before,
*:after {
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html {
  font-size: 10px;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
body {
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 14px;
  line-height: 1.42857;
  color: #333;
  background-color: #fff;
}
input,
button,
select,
textarea {
  font-family: inherit;
  font-size: inherit;
  line-height: inherit;
}
a {
  color: #337ab7;
  text-decoration: none;
}
a:hover,
a:focus {
  color: #23527c;
  text-decoration: underline;
}
a:focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
figure {
  margin: 0;
}
img {
  vertical-align: middle;
}
.img-responsive {
  display: block;
  max-width: 100%;
  height: auto;
}
.img-rounded {
  border-radius: 6px;
}
.img-thumbnail {
  padding: 4px;
  line-height: 1.42857;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 4px;
  -webkit-transition: all 0.2s ease-in-out;
  transition: all 0.2s ease-in-out;
  display: inline-block;
  max-width: 100%;
  height: auto;
}
.img-circle {
  border-radius: 50%;
}
hr {
  margin-top: 20px;
  margin-bottom: 20px;
  border: 0;
  border-top: 1px solid #eee;
}
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  border: 0;
}
.sr-only-focusable:active,
.sr-only-focusable:focus {
  position: static;
  width: auto;
  height: auto;
  margin: 0;
  overflow: visible;
  clip: auto;
}
[role="button"] {
  cursor: pointer;
}
h1,
h2,
h3,
h4,
h5,
h6,
.h1,
.h2,
.h3,
.h4,
.h5,
.h6 {
  font-family: inherit;
  font-weight: 500;
  line-height: 1.1;
  color: inherit;
}
h1 small,
h1 .small,
h2 small,
h2 .small,
h3 small,
h3 .small,
h4 small,
h4 .small,
h5 small,
h5 .small,
h6 small,
h6 .small,
.h1 small,
.h1 .small,
.h2 small,
.h2 .small,
.h3 small,
.h3 .small,
.h4 small,
.h4 .small,
.h5 small,
.h5 .small,
.h6 small,
.h6 .small {
  font-weight: normal;
  line-height: 1;
  color: #777;
}
h1,
.h1,
h2,
.h2,
h3,
.h3 {
  margin-top: 20px;
  margin-bottom: 10px;
}
h1 small,
h1 .small,
.h1 small,
.h1 .small,
h2 small,
h2 .small,
.h2 small,
.h2 .small,
h3 small,
h3 .small,
.h3 small,
.h3 .small {
  font-size: 65%;
}
h4,
.h4,
h5,
.h5,
h6,
.h6 {
  margin-top: 10px;
  margin-bottom: 10px;
}
h4 small,
h4 .small,
.h4 small,
.h4 .small,
h5 small,
h5 .small,
.h5 small,
.h5 .small,
h6 small,
h6 .small,
.h6 small,
.h6 .small {
  font-size: 75%;
}
h1,
.h1 {
  font-size: 36px;
}
h2,
.h2 {
  font-size: 30px;
}
h3,
.h3 {
  font-size: 24px;
}
h4,
.h4 {
  font-size: 18px;
}
h5,
.h5 {
  font-size: 14px;
}
h6,
.h6 {
  font-size: 12px;
}
p {
  margin: 0 0 10px;
}
.lead {
  margin-bottom: 20px;
  font-size: 16px;
  font-weight: 300;
  line-height: 1.4;
}
@media (min-width: 768px) {
  .lead {
    font-size: 21px;
  }
}
small,
.small {
  font-size: 85%;
}
mark,
.mark {
  background-color: #fcf8e3;
  padding: 0.2em;
}
.text-left {
  text-align: left;
}
.text-right {
  text-align: right;
}
.text-center {
  text-align: center;
}
.text-justify {
  text-align: justify;
}
.text-nowrap {
  white-space: nowrap;
}
.text-lowercase {
  text-transform: lowercase;
}
.text-uppercase,
.initialism {
  text-transform: uppercase;
}
.text-capitalize {
  text-transform: capitalize;
}
.text-muted {
  color: #777;
}
.text-primary {
  color: #337ab7;
}
a.text-primary:hover,
a.text-primary:focus {
  color: #286090;
}
.text-success {
  color: #3c763d;
}
a.text-success:hover,
a.text-success:focus {
  color: #2b542c;
}
.text-info {
  color: #31708f;
}
a.text-info:hover,
a.text-info:focus {
  color: #245269;
}
.text-warning {
  color: #8a6d3b;
}
a.text-warning:hover,
a.text-warning:focus {
  color: #66512c;
}
.text-danger {
  color: #a94442;
}
a.text-danger:hover,
a.text-danger:focus {
  color: #843534;
}
.bg-primary {
  color: #fff;
}
.bg-primary {
  background-color: #337ab7;
}
a.bg-primary:hover,
a.bg-primary:focus {
  background-color: #286090;
}
.bg-success {
  background-color: #dff0d8;
}
a.bg-success:hover,
a.bg-success:focus {
  background-color: #c1e2b3;
}
.bg-info {
  background-color: #d9edf7;
}
a.bg-info:hover,
a.bg-info:focus {
  background-color: #afd9ee;
}
.bg-warning {
  background-color: #fcf8e3;
}
a.bg-warning:hover,
a.bg-warning:focus {
  background-color: #f7ecb5;
}
.bg-danger {
  background-color: #f2dede;
}
a.bg-danger:hover,
a.bg-danger:focus {
  background-color: #e4b9b9;
}
.page-header {
  padding-bottom: 9px;
  margin: 40px 0 20px;
  border-bottom: 1px solid #eee;
}
ul,
ol {
  margin-top: 0;
  margin-bottom: 10px;
}
ul ul,
ul ol,
ol ul,
ol ol {
  margin-bottom: 0;
}
.list-unstyled {
  padding-left: 0;
  list-style: none;
}
.list-inline {
  padding-left: 0;
  list-style: none;
  margin-left: -5px;
}
.list-inline > li {
  display: inline-block;
  padding-left: 5px;
  padding-right: 5px;
}
dl {
  margin-top: 0;
  margin-bottom: 20px;
}
dt,
dd {
  line-height: 1.42857;
}
dt {
  font-weight: bold;
}
dd {
  margin-left: 0;
}
.dl-horizontal dd:before,
.dl-horizontal dd:after {
  content: " ";
  display: table;
}
.dl-horizontal dd:after {
  clear: both;
}
@media (min-width: 768px) {
  .dl-horizontal dt {
    float: left;
    width: 160px;
    clear: left;
    text-align: right;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .dl-horizontal dd {
    margin-left: 180px;
  }
}
abbr[title],
abbr[data-original-title] {
  cursor: help;
  border-bottom: 1px dotted #777;
}
.initialism {
  font-size: 90%;
}
blockquote {
  padding: 10px 20px;
  margin: 0 0 20px;
  font-size: 17.5px;
  border-left: 5px solid #eee;
}
blockquote p:last-child,
blockquote ul:last-child,
blockquote ol:last-child {
  margin-bottom: 0;
}
blockquote footer,
blockquote small,
blockquote .small {
  display: block;
  font-size: 80%;
  line-height: 1.42857;
  color: #777;
}
blockquote footer:before,
blockquote small:before,
blockquote .small:before {
  content: "\2014   \A0";
}
.blockquote-reverse,
blockquote.pull-right {
  padding-right: 15px;
  padding-left: 0;
  border-right: 5px solid #eee;
  border-left: 0;
  text-align: right;
}
.blockquote-reverse footer:before,
.blockquote-reverse small:before,
.blockquote-reverse .small:before,
blockquote.pull-right footer:before,
blockquote.pull-right small:before,
blockquote.pull-right .small:before {
  content: "";
}
.blockquote-reverse footer:after,
.blockquote-reverse small:after,
.blockquote-reverse .small:after,
blockquote.pull-right footer:after,
blockquote.pull-right small:after,
blockquote.pull-right .small:after {
  content: "\A0   \2014";
}
address {
  margin-bottom: 20px;
  font-style: normal;
  line-height: 1.42857;
}
code,
kbd,
pre,
samp {
  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
}
code {
  padding: 2px 4px;
  font-size: 90%;
  color: #c7254e;
  background-color: #f9f2f4;
  border-radius: 4px;
}
kbd {
  padding: 2px 4px;
  font-size: 90%;
  color: #fff;
  background-color: #333;
  border-radius: 3px;
  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
}
kbd kbd {
  padding: 0;
  font-size: 100%;
  font-weight: bold;
  -webkit-box-shadow: none;
  box-shadow: none;
}
pre {
  display: block;
  padding: 9.5px;
  margin: 0 0 10px;
  font-size: 13px;
  line-height: 1.42857;
  word-break: break-all;
  word-wrap: break-word;
  color: #333;
  background-color: #f5f5f5;
  border: 1px solid #ccc;
  border-radius: 4px;
}
pre code {
  padding: 0;
  font-size: inherit;
  color: inherit;
  white-space: pre-wrap;
  background-color: transparent;
  border-radius: 0;
}
.pre-scrollable {
  max-height: 340px;
  overflow-y: scroll;
}
.container {
  margin-right: auto;
  margin-left: auto;
  padding-left: 15px;
  padding-right: 15px;
}
.container:before,
.container:after {
  content: " ";
  display: table;
}
.container:after {
  clear: both;
}
@media (min-width: 768px) {
  .container {
    width: 750px;
  }
}
@media (min-width: 992px) {
  .container {
    width: 970px;
  }
}
@media (min-width: 1200px) {
  .container {
    width: 1170px;
  }
}
.container-fluid {
  margin-right: auto;
  margin-left: auto;
  padding-left: 15px;
  padding-right: 15px;
}
.container-fluid:before,
.container-fluid:after {
  content: " ";
  display: table;
}
.container-fluid:after {
  clear: both;
}
.row {
  margin-left: -15px;
  margin-right: -15px;
}
.row:before,
.row:after {
  content: " ";
  display: table;
}
.row:after {
  clear: both;
}
.col-xs-1,
.col-sm-1,
.col-md-1,
.col-lg-1,
.col-xs-2,
.col-sm-2,
.col-md-2,
.col-lg-2,
.col-xs-3,
.col-sm-3,
.col-md-3,
.col-lg-3,
.col-xs-4,
.col-sm-4,
.col-md-4,
.col-lg-4,
.col-xs-5,
.col-sm-5,
.col-md-5,
.col-lg-5,
.col-xs-6,
.col-sm-6,
.col-md-6,
.col-lg-6,
.col-xs-7,
.col-sm-7,
.col-md-7,
.col-lg-7,
.col-xs-8,
.col-sm-8,
.col-md-8,
.col-lg-8,
.col-xs-9,
.col-sm-9,
.col-md-9,
.col-lg-9,
.col-xs-10,
.col-sm-10,
.col-md-10,
.col-lg-10,
.col-xs-11,
.col-sm-11,
.col-md-11,
.col-lg-11,
.col-xs-12,
.col-sm-12,
.col-md-12,
.col-lg-12 {
  position: relative;
  min-height: 1px;
  padding-left: 15px;
  padding-right: 15px;
}
.col-xs-1,
.col-xs-2,
.col-xs-3,
.col-xs-4,
.col-xs-5,
.col-xs-6,
.col-xs-7,
.col-xs-8,
.col-xs-9,
.col-xs-10,
.col-xs-11,
.col-xs-12 {
  float: left;
}
.col-xs-1 {
  width: 8.33333%;
}
.col-xs-2 {
  width: 16.66667%;
}
.col-xs-3 {
  width: 25%;
}
.col-xs-4 {
  width: 33.33333%;
}
.col-xs-5 {
  width: 41.66667%;
}
.col-xs-6 {
  width: 50%;
}
.col-xs-7 {
  width: 58.33333%;
}
.col-xs-8 {
  width: 66.66667%;
}
.col-xs-9 {
  width: 75%;
}
.col-xs-10 {
  width: 83.33333%;
}
.col-xs-11 {
  width: 91.66667%;
}
.col-xs-12 {
  width: 100%;
}
.col-xs-pull-0 {
  right: auto;
}
.col-xs-pull-1 {
  right: 8.33333%;
}
.col-xs-pull-2 {
  right: 16.66667%;
}
.col-xs-pull-3 {
  right: 25%;
}
.col-xs-pull-4 {
  right: 33.33333%;
}
.col-xs-pull-5 {
  right: 41.66667%;
}
.col-xs-pull-6 {
  right: 50%;
}
.col-xs-pull-7 {
  right: 58.33333%;
}
.col-xs-pull-8 {
  right: 66.66667%;
}
.col-xs-pull-9 {
  right: 75%;
}
.col-xs-pull-10 {
  right: 83.33333%;
}
.col-xs-pull-11 {
  right: 91.66667%;
}
.col-xs-pull-12 {
  right: 100%;
}
.col-xs-push-0 {
  left: auto;
}
.col-xs-push-1 {
  left: 8.33333%;
}
.col-xs-push-2 {
  left: 16.66667%;
}
.col-xs-push-3 {
  left: 25%;
}
.col-xs-push-4 {
  left: 33.33333%;
}
.col-xs-push-5 {
  left: 41.66667%;
}
.col-xs-push-6 {
  left: 50%;
}
.col-xs-push-7 {
  left: 58.33333%;
}
.col-xs-push-8 {
  left: 66.66667%;
}
.col-xs-push-9 {
  left: 75%;
}
.col-xs-push-10 {
  left: 83.33333%;
}
.col-xs-push-11 {
  left: 91.66667%;
}
.col-xs-push-12 {
  left: 100%;
}
.col-xs-offset-0 {
  margin-left: 0%;
}
.col-xs-offset-1 {
  margin-left: 8.33333%;
}
.col-xs-offset-2 {
  margin-left: 16.66667%;
}
.col-xs-offset-3 {
  margin-left: 25%;
}
.col-xs-offset-4 {
  margin-left: 33.33333%;
}
.col-xs-offset-5 {
  margin-left: 41.66667%;
}
.col-xs-offset-6 {
  margin-left: 50%;
}
.col-xs-offset-7 {
  margin-left: 58.33333%;
}
.col-xs-offset-8 {
  margin-left: 66.66667%;
}
.col-xs-offset-9 {
  margin-left: 75%;
}
.col-xs-offset-10 {
  margin-left: 83.33333%;
}
.col-xs-offset-11 {
  margin-left: 91.66667%;
}
.col-xs-offset-12 {
  margin-left: 100%;
}
@media (min-width: 768px) {
  .col-sm-1,
  .col-sm-2,
  .col-sm-3,
  .col-sm-4,
  .col-sm-5,
  .col-sm-6,
  .col-sm-7,
  .col-sm-8,
  .col-sm-9,
  .col-sm-10,
  .col-sm-11,
  .col-sm-12 {
    float: left;
  }
  .col-sm-1 {
    width: 8.33333%;
  }
  .col-sm-2 {
    width: 16.66667%;
  }
  .col-sm-3 {
    width: 25%;
  }
  .col-sm-4 {
    width: 33.33333%;
  }
  .col-sm-5 {
    width: 41.66667%;
  }
  .col-sm-6 {
    width: 50%;
  }
  .col-sm-7 {
    width: 58.33333%;
  }
  .col-sm-8 {
    width: 66.66667%;
  }
  .col-sm-9 {
    width: 75%;
  }
  .col-sm-10 {
    width: 83.33333%;
  }
  .col-sm-11 {
    width: 91.66667%;
  }
  .col-sm-12 {
    width: 100%;
  }
  .col-sm-pull-0 {
    right: auto;
  }
  .col-sm-pull-1 {
    right: 8.33333%;
  }
  .col-sm-pull-2 {
    right: 16.66667%;
  }
  .col-sm-pull-3 {
    right: 25%;
  }
  .col-sm-pull-4 {
    right: 33.33333%;
  }
  .col-sm-pull-5 {
    right: 41.66667%;
  }
  .col-sm-pull-6 {
    right: 50%;
  }
  .col-sm-pull-7 {
    right: 58.33333%;
  }
  .col-sm-pull-8 {
    right: 66.66667%;
  }
  .col-sm-pull-9 {
    right: 75%;
  }
  .col-sm-pull-10 {
    right: 83.33333%;
  }
  .col-sm-pull-11 {
    right: 91.66667%;
  }
  .col-sm-pull-12 {
    right: 100%;
  }
  .col-sm-push-0 {
    left: auto;
  }
  .col-sm-push-1 {
    left: 8.33333%;
  }
  .col-sm-push-2 {
    left: 16.66667%;
  }
  .col-sm-push-3 {
    left: 25%;
  }
  .col-sm-push-4 {
    left: 33.33333%;
  }
  .col-sm-push-5 {
    left: 41.66667%;
  }
  .col-sm-push-6 {
    left: 50%;
  }
  .col-sm-push-7 {
    left: 58.33333%;
  }
  .col-sm-push-8 {
    left: 66.66667%;
  }
  .col-sm-push-9 {
    left: 75%;
  }
  .col-sm-push-10 {
    left: 83.33333%;
  }
  .col-sm-push-11 {
    left: 91.66667%;
  }
  .col-sm-push-12 {
    left: 100%;
  }
  .col-sm-offset-0 {
    margin-left: 0%;
  }
  .col-sm-offset-1 {
    margin-left: 8.33333%;
  }
  .col-sm-offset-2 {
    margin-left: 16.66667%;
  }
  .col-sm-offset-3 {
    margin-left: 25%;
  }
  .col-sm-offset-4 {
    margin-left: 33.33333%;
  }
  .col-sm-offset-5 {
    margin-left: 41.66667%;
  }
  .col-sm-offset-6 {
    margin-left: 50%;
  }
  .col-sm-offset-7 {
    margin-left: 58.33333%;
  }
  .col-sm-offset-8 {
    margin-left: 66.66667%;
  }
  .col-sm-offset-9 {
    margin-left: 75%;
  }
  .col-sm-offset-10 {
    margin-left: 83.33333%;
  }
  .col-sm-offset-11 {
    margin-left: 91.66667%;
  }
  .col-sm-offset-12 {
    margin-left: 100%;
  }
}
@media (min-width: 992px) {
  .col-md-1,
  .col-md-2,
  .col-md-3,
  .col-md-4,
  .col-md-5,
  .col-md-6,
  .col-md-7,
  .col-md-8,
  .col-md-9,
  .col-md-10,
  .col-md-11,
  .col-md-12 {
    float: left;
  }
  .col-md-1 {
    width: 8.33333%;
  }
  .col-md-2 {
    width: 16.66667%;
  }
  .col-md-3 {
    width: 25%;
  }
  .col-md-4 {
    width: 33.33333%;
  }
  .col-md-5 {
    width: 41.66667%;
  }
  .col-md-6 {
    width: 50%;
  }
  .col-md-7 {
    width: 58.33333%;
  }
  .col-md-8 {
    width: 66.66667%;
  }
  .col-md-9 {
    width: 75%;
  }
  .col-md-10 {
    width: 83.33333%;
  }
  .col-md-11 {
    width: 91.66667%;
  }
  .col-md-12 {
    width: 100%;
  }
  .col-md-pull-0 {
    right: auto;
  }
  .col-md-pull-1 {
    right: 8.33333%;
  }
  .col-md-pull-2 {
    right: 16.66667%;
  }
  .col-md-pull-3 {
    right: 25%;
  }
  .col-md-pull-4 {
    right: 33.33333%;
  }
  .col-md-pull-5 {
    right: 41.66667%;
  }
  .col-md-pull-6 {
    right: 50%;
  }
  .col-md-pull-7 {
    right: 58.33333%;
  }
  .col-md-pull-8 {
    right: 66.66667%;
  }
  .col-md-pull-9 {
    right: 75%;
  }
  .col-md-pull-10 {
    right: 83.33333%;
  }
  .col-md-pull-11 {
    right: 91.66667%;
  }
  .col-md-pull-12 {
    right: 100%;
  }
  .col-md-push-0 {
    left: auto;
  }
  .col-md-push-1 {
    left: 8.33333%;
  }
  .col-md-push-2 {
    left: 16.66667%;
  }
  .col-md-push-3 {
    left: 25%;
  }
  .col-md-push-4 {
    left: 33.33333%;
  }
  .col-md-push-5 {
    left: 41.66667%;
  }
  .col-md-push-6 {
    left: 50%;
  }
  .col-md-push-7 {
    left: 58.33333%;
  }
  .col-md-push-8 {
    left: 66.66667%;
  }
  .col-md-push-9 {
    left: 75%;
  }
  .col-md-push-10 {
    left: 83.33333%;
  }
  .col-md-push-11 {
    left: 91.66667%;
  }
  .col-md-push-12 {
    left: 100%;
  }
  .col-md-offset-0 {
    margin-left: 0%;
  }
  .col-md-offset-1 {
    margin-left: 8.33333%;
  }
  .col-md-offset-2 {
    margin-left: 16.66667%;
  }
  .col-md-offset-3 {
    margin-left: 25%;
  }
  .col-md-offset-4 {
    margin-left: 33.33333%;
  }
  .col-md-offset-5 {
    margin-left: 41.66667%;
  }
  .col-md-offset-6 {
    margin-left: 50%;
  }
  .col-md-offset-7 {
    margin-left: 58.33333%;
  }
  .col-md-offset-8 {
    margin-left: 66.66667%;
  }
  .col-md-offset-9 {
    margin-left: 75%;
  }
  .col-md-offset-10 {
    margin-left: 83.33333%;
  }
  .col-md-offset-11 {
    margin-left: 91.66667%;
  }
  .col-md-offset-12 {
    margin-left: 100%;
  }
}
@media (min-width: 1200px) {
  .col-lg-1,
  .col-lg-2,
  .col-lg-3,
  .col-lg-4,
  .col-lg-5,
  .col-lg-6,
  .col-lg-7,
  .col-lg-8,
  .col-lg-9,
  .col-lg-10,
  .col-lg-11,
  .col-lg-12 {
    float: left;
  }
  .col-lg-1 {
    width: 8.33333%;
  }
  .col-lg-2 {
    width: 16.66667%;
  }
  .col-lg-3 {
    width: 25%;
  }
  .col-lg-4 {
    width: 33.33333%;
  }
  .col-lg-5 {
    width: 41.66667%;
  }
  .col-lg-6 {
    width: 50%;
  }
  .col-lg-7 {
    width: 58.33333%;
  }
  .col-lg-8 {
    width: 66.66667%;
  }
  .col-lg-9 {
    width: 75%;
  }
  .col-lg-10 {
    width: 83.33333%;
  }
  .col-lg-11 {
    width: 91.66667%;
  }
  .col-lg-12 {
    width: 100%;
  }
  .col-lg-pull-0 {
    right: auto;
  }
  .col-lg-pull-1 {
    right: 8.33333%;
  }
  .col-lg-pull-2 {
    right: 16.66667%;
  }
  .col-lg-pull-3 {
    right: 25%;
  }
  .col-lg-pull-4 {
    right: 33.33333%;
  }
  .col-lg-pull-5 {
    right: 41.66667%;
  }
  .col-lg-pull-6 {
    right: 50%;
  }
  .col-lg-pull-7 {
    right: 58.33333%;
  }
  .col-lg-pull-8 {
    right: 66.66667%;
  }
  .col-lg-pull-9 {
    right: 75%;
  }
  .col-lg-pull-10 {
    right: 83.33333%;
  }
  .col-lg-pull-11 {
    right: 91.66667%;
  }
  .col-lg-pull-12 {
    right: 100%;
  }
  .col-lg-push-0 {
    left: auto;
  }
  .col-lg-push-1 {
    left: 8.33333%;
  }
  .col-lg-push-2 {
    left: 16.66667%;
  }
  .col-lg-push-3 {
    left: 25%;
  }
  .col-lg-push-4 {
    left: 33.33333%;
  }
  .col-lg-push-5 {
    left: 41.66667%;
  }
  .col-lg-push-6 {
    left: 50%;
  }
  .col-lg-push-7 {
    left: 58.33333%;
  }
  .col-lg-push-8 {
    left: 66.66667%;
  }
  .col-lg-push-9 {
    left: 75%;
  }
  .col-lg-push-10 {
    left: 83.33333%;
  }
  .col-lg-push-11 {
    left: 91.66667%;
  }
  .col-lg-push-12 {
    left: 100%;
  }
  .col-lg-offset-0 {
    margin-left: 0%;
  }
  .col-lg-offset-1 {
    margin-left: 8.33333%;
  }
  .col-lg-offset-2 {
    margin-left: 16.66667%;
  }
  .col-lg-offset-3 {
    margin-left: 25%;
  }
  .col-lg-offset-4 {
    margin-left: 33.33333%;
  }
  .col-lg-offset-5 {
    margin-left: 41.66667%;
  }
  .col-lg-offset-6 {
    margin-left: 50%;
  }
  .col-lg-offset-7 {
    margin-left: 58.33333%;
  }
  .col-lg-offset-8 {
    margin-left: 66.66667%;
  }
  .col-lg-offset-9 {
    margin-left: 75%;
  }
  .col-lg-offset-10 {
    margin-left: 83.33333%;
  }
  .col-lg-offset-11 {
    margin-left: 91.66667%;
  }
  .col-lg-offset-12 {
    margin-left: 100%;
  }
}
table {
  background-color: rgba(0, 0, 0, 0);
}
caption {
  padding-top: 8px;
  padding-bottom: 8px;
  color: #777;
  text-align: left;
}
th {
  text-align: left;
}
.table {
  width: 100%;
  max-width: 100%;
  margin-bottom: 20px;
}
.table > thead > tr > th,
.table > thead > tr > td,
.table > tbody > tr > th,
.table > tbody > tr > td,
.table > tfoot > tr > th,
.table > tfoot > tr > td {
  padding: 8px;
  line-height: 1.42857;
  vertical-align: top;
  border-top: 1px solid #ddd;
}
.table > thead > tr > th {
  vertical-align: bottom;
  border-bottom: 2px solid #ddd;
}
.table > caption + thead > tr:first-child > th,
.table > caption + thead > tr:first-child > td,
.table > colgroup + thead > tr:first-child > th,
.table > colgroup + thead > tr:first-child > td,
.table > thead:first-child > tr:first-child > th,
.table > thead:first-child > tr:first-child > td {
  border-top: 0;
}
.table > tbody + tbody {
  border-top: 2px solid #ddd;
}
.table .table {
  background-color: #fff;
}
.table-condensed > thead > tr > th,
.table-condensed > thead > tr > td,
.table-condensed > tbody > tr > th,
.table-condensed > tbody > tr > td,
.table-condensed > tfoot > tr > th,
.table-condensed > tfoot > tr > td {
  padding: 5px;
}
.table-bordered {
  border: 1px solid #ddd;
}
.table-bordered > thead > tr > th,
.table-bordered > thead > tr > td,
.table-bordered > tbody > tr > th,
.table-bordered > tbody > tr > td,
.table-bordered > tfoot > tr > th,
.table-bordered > tfoot > tr > td {
  border: 1px solid #ddd;
}
.table-bordered > thead > tr > th,
.table-bordered > thead > tr > td {
  border-bottom-width: 2px;
}
.table-striped > tbody > tr:nth-of-type(odd) {
  background-color: #f9f9f9;
}
.table-hover > tbody > tr:hover {
  background-color: #f5f5f5;
}
table col[class*="col-"] {
  position: static;
  float: none;
  display: table-column;
}
table td[class*="col-"],
table th[class*="col-"] {
  position: static;
  float: none;
  display: table-cell;
}
.table > thead > tr > td.active,
.table > thead > tr > th.active,
.table > thead > tr.active > td,
.table > thead > tr.active > th,
.table > tbody > tr > td.active,
.table > tbody > tr > th.active,
.table > tbody > tr.active > td,
.table > tbody > tr.active > th,
.table > tfoot > tr > td.active,
.table > tfoot > tr > th.active,
.table > tfoot > tr.active > td,
.table > tfoot > tr.active > th {
  background-color: #f5f5f5;
}
.table-hover > tbody > tr > td.active:hover,
.table-hover > tbody > tr > th.active:hover,
.table-hover > tbody > tr.active:hover > td,
.table-hover > tbody > tr:hover > .active,
.table-hover > tbody > tr.active:hover > th {
  background-color: #e8e8e8;
}
.table > thead > tr > td.success,
.table > thead > tr > th.success,
.table > thead > tr.success > td,
.table > thead > tr.success > th,
.table > tbody > tr > td.success,
.table > tbody > tr > th.success,
.table > tbody > tr.success > td,
.table > tbody > tr.success > th,
.table > tfoot > tr > td.success,
.table > tfoot > tr > th.success,
.table > tfoot > tr.success > td,
.table > tfoot > tr.success > th {
  background-color: #dff0d8;
}
.table-hover > tbody > tr > td.success:hover,
.table-hover > tbody > tr > th.success:hover,
.table-hover > tbody > tr.success:hover > td,
.table-hover > tbody > tr:hover > .success,
.table-hover > tbody > tr.success:hover > th {
  background-color: #d0e9c6;
}
.table > thead > tr > td.info,
.table > thead > tr > th.info,
.table > thead > tr.info > td,
.table > thead > tr.info > th,
.table > tbody > tr > td.info,
.table > tbody > tr > th.info,
.table > tbody > tr.info > td,
.table > tbody > tr.info > th,
.table > tfoot > tr > td.info,
.table > tfoot > tr > th.info,
.table > tfoot > tr.info > td,
.table > tfoot > tr.info > th {
  background-color: #d9edf7;
}
.table-hover > tbody > tr > td.info:hover,
.table-hover > tbody > tr > th.info:hover,
.table-hover > tbody > tr.info:hover > td,
.table-hover > tbody > tr:hover > .info,
.table-hover > tbody > tr.info:hover > th {
  background-color: #c4e3f3;
}
.table > thead > tr > td.warning,
.table > thead > tr > th.warning,
.table > thead > tr.warning > td,
.table > thead > tr.warning > th,
.table > tbody > tr > td.warning,
.table > tbody > tr > th.warning,
.table > tbody > tr.warning > td,
.table > tbody > tr.warning > th,
.table > tfoot > tr > td.warning,
.table > tfoot > tr > th.warning,
.table > tfoot > tr.warning > td,
.table > tfoot > tr.warning > th {
  background-color: #fcf8e3;
}
.table-hover > tbody > tr > td.warning:hover,
.table-hover > tbody > tr > th.warning:hover,
.table-hover > tbody > tr.warning:hover > td,
.table-hover > tbody > tr:hover > .warning,
.table-hover > tbody > tr.warning:hover > th {
  background-color: #faf2cc;
}
.table > thead > tr > td.danger,
.table > thead > tr > th.danger,
.table > thead > tr.danger > td,
.table > thead > tr.danger > th,
.table > tbody > tr > td.danger,
.table > tbody > tr > th.danger,
.table > tbody > tr.danger > td,
.table > tbody > tr.danger > th,
.table > tfoot > tr > td.danger,
.table > tfoot > tr > th.danger,
.table > tfoot > tr.danger > td,
.table > tfoot > tr.danger > th {
  background-color: #f2dede;
}
.table-hover > tbody > tr > td.danger:hover,
.table-hover > tbody > tr > th.danger:hover,
.table-hover > tbody > tr.danger:hover > td,
.table-hover > tbody > tr:hover > .danger,
.table-hover > tbody > tr.danger:hover > th {
  background-color: #ebcccc;
}
.table-responsive {
  overflow-x: auto;
  min-height: 0.01%;
}
@media screen and (max-width: 767px) {
  .table-responsive {
    width: 100%;
    margin-bottom: 15px;
    overflow-y: hidden;
    -ms-overflow-style: -ms-autohiding-scrollbar;
    border: 1px solid #ddd;
  }
  .table-responsive > .table {
    margin-bottom: 0;
  }
  .table-responsive > .table > thead > tr > th,
  .table-responsive > .table > thead > tr > td,
  .table-responsive > .table > tbody > tr > th,
  .table-responsive > .table > tbody > tr > td,
  .table-responsive > .table > tfoot > tr > th,
  .table-responsive > .table > tfoot > tr > td {
    white-space: nowrap;
  }
  .table-responsive > .table-bordered {
    border: 0;
  }
  .table-responsive > .table-bordered > thead > tr > th:first-child,
  .table-responsive > .table-bordered > thead > tr > td:first-child,
  .table-responsive > .table-bordered > tbody > tr > th:first-child,
  .table-responsive > .table-bordered > tbody > tr > td:first-child,
  .table-responsive > .table-bordered > tfoot > tr > th:first-child,
  .table-responsive > .table-bordered > tfoot > tr > td:first-child {
    border-left: 0;
  }
  .table-responsive > .table-bordered > thead > tr > th:last-child,
  .table-responsive > .table-bordered > thead > tr > td:last-child,
  .table-responsive > .table-bordered > tbody > tr > th:last-child,
  .table-responsive > .table-bordered > tbody > tr > td:last-child,
  .table-responsive > .table-bordered > tfoot > tr > th:last-child,
  .table-responsive > .table-bordered > tfoot > tr > td:last-child {
    border-right: 0;
  }
  .table-responsive > .table-bordered > tbody > tr:last-child > th,
  .table-responsive > .table-bordered > tbody > tr:last-child > td,
  .table-responsive > .table-bordered > tfoot > tr:last-child > th,
  .table-responsive > .table-bordered > tfoot > tr:last-child > td {
    border-bottom: 0;
  }
}
fieldset {
  padding: 0;
  margin: 0;
  border: 0;
  min-width: 0;
}
legend {
  display: block;
  width: 100%;
  padding: 0;
  margin-bottom: 20px;
  font-size: 21px;
  line-height: inherit;
  color: #333;
  border: 0;
  border-bottom: 1px solid #e5e5e5;
}
label {
  display: inline-block;
  max-width: 100%;
  margin-bottom: 5px;
  font-weight: bold;
}
input[type="search"] {
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
input[type="radio"],
input[type="checkbox"] {
  margin: 4px 0 0;
  margin-top: 1px \9;
  line-height: normal;
}
input[type="file"] {
  display: block;
}
input[type="range"] {
  display: block;
  width: 100%;
}
select[multiple],
select[size] {
  height: auto;
}
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
output {
  display: block;
  padding-top: 7px;
  font-size: 14px;
  line-height: 1.42857;
  color: #555;
}
.form-control {
  display: block;
  width: 100%;
  height: 34px;
  padding: 6px 12px;
  font-size: 14px;
  line-height: 1.42857;
  color: #555;
  background-color: #fff;
  background-image: none;
  border: 1px solid #ccc;
  border-radius: 4px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
  -webkit-transition: border-color ease-in-out 0.15s, -webkit-box-shadow ease-in-out 0.15s;
  transition: border-color ease-in-out 0.15s, -webkit-box-shadow ease-in-out 0.15s;
  transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
  transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s,
    -webkit-box-shadow ease-in-out 0.15s;
}
.form-control:focus {
  border-color: #66afe9;
  outline: 0;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
}
.form-control::-moz-placeholder {
  color: #999;
  opacity: 1;
}
.form-control:-ms-input-placeholder {
  color: #999;
}
.form-control::-webkit-input-placeholder {
  color: #999;
}
.form-control::-ms-expand {
  border: 0;
  background-color: transparent;
}
.form-control[disabled],
.form-control[readonly],
fieldset[disabled] .form-control {
  background-color: #eee;
  opacity: 1;
}
.form-control[disabled],
fieldset[disabled] .form-control {
  cursor: not-allowed;
}
textarea.form-control {
  height: auto;
}
input[type="search"] {
  -webkit-appearance: none;
}
@media screen and (-webkit-min-device-pixel-ratio: 0) {
  input[type="date"].form-control,
  input[type="time"].form-control,
  input[type="datetime-local"].form-control,
  input[type="month"].form-control {
    line-height: 34px;
  }
  input[type="date"].input-sm,
  .input-group-sm > input.form-control[type="date"],
  .input-group-sm > input.input-group-addon[type="date"],
  .input-group-sm > .input-group-btn > input.btn[type="date"],
  .input-group-sm input[type="date"],
  input[type="time"].input-sm,
  .input-group-sm > input.form-control[type="time"],
  .input-group-sm > input.input-group-addon[type="time"],
  .input-group-sm > .input-group-btn > input.btn[type="time"],
  .input-group-sm input[type="time"],
  input[type="datetime-local"].input-sm,
  .input-group-sm > input.form-control[type="datetime-local"],
  .input-group-sm > input.input-group-addon[type="datetime-local"],
  .input-group-sm > .input-group-btn > input.btn[type="datetime-local"],
  .input-group-sm input[type="datetime-local"],
  input[type="month"].input-sm,
  .input-group-sm > input.form-control[type="month"],
  .input-group-sm > input.input-group-addon[type="month"],
  .input-group-sm > .input-group-btn > input.btn[type="month"],
  .input-group-sm input[type="month"] {
    line-height: 30px;
  }
  input[type="date"].input-lg,
  .input-group-lg > input.form-control[type="date"],
  .input-group-lg > input.input-group-addon[type="date"],
  .input-group-lg > .input-group-btn > input.btn[type="date"],
  .input-group-lg input[type="date"],
  input[type="time"].input-lg,
  .input-group-lg > input.form-control[type="time"],
  .input-group-lg > input.input-group-addon[type="time"],
  .input-group-lg > .input-group-btn > input.btn[type="time"],
  .input-group-lg input[type="time"],
  input[type="datetime-local"].input-lg,
  .input-group-lg > input.form-control[type="datetime-local"],
  .input-group-lg > input.input-group-addon[type="datetime-local"],
  .input-group-lg > .input-group-btn > input.btn[type="datetime-local"],
  .input-group-lg input[type="datetime-local"],
  input[type="month"].input-lg,
  .input-group-lg > input.form-control[type="month"],
  .input-group-lg > input.input-group-addon[type="month"],
  .input-group-lg > .input-group-btn > input.btn[type="month"],
  .input-group-lg input[type="month"] {
    line-height: 46px;
  }
}
.form-group {
  margin-bottom: 15px;
}
.radio,
.checkbox {
  position: relative;
  display: block;
  margin-top: 10px;
  margin-bottom: 10px;
}
.radio label,
.checkbox label {
  min-height: 20px;
  padding-left: 20px;
  margin-bottom: 0;
  font-weight: normal;
  cursor: pointer;
}
.radio input[type="radio"],
.radio-inline input[type="radio"],
.checkbox input[type="checkbox"],
.checkbox-inline input[type="checkbox"] {
  position: absolute;
  margin-left: -20px;
  margin-top: 4px \9;
}
.radio + .radio,
.checkbox + .checkbox {
  margin-top: -5px;
}
.radio-inline,
.checkbox-inline {
  position: relative;
  display: inline-block;
  padding-left: 20px;
  margin-bottom: 0;
  vertical-align: middle;
  font-weight: normal;
  cursor: pointer;
}
.radio-inline + .radio-inline,
.checkbox-inline + .checkbox-inline {
  margin-top: 0;
  margin-left: 10px;
}
input[type="radio"][disabled],
input[type="radio"].disabled,
fieldset[disabled] input[type="radio"],
input[type="checkbox"][disabled],
input[type="checkbox"].disabled,
fieldset[disabled] input[type="checkbox"] {
  cursor: not-allowed;
}
.radio-inline.disabled,
fieldset[disabled] .radio-inline,
.checkbox-inline.disabled,
fieldset[disabled] .checkbox-inline {
  cursor: not-allowed;
}
.radio.disabled label,
fieldset[disabled] .radio label,
.checkbox.disabled label,
fieldset[disabled] .checkbox label {
  cursor: not-allowed;
}
.form-control-static {
  padding-top: 7px;
  padding-bottom: 7px;
  margin-bottom: 0;
  min-height: 34px;
}
.form-control-static.input-lg,
.input-group-lg > .form-control-static.form-control,
.input-group-lg > .form-control-static.input-group-addon,
.input-group-lg > .input-group-btn > .form-control-static.btn,
.form-control-static.input-sm,
.input-group-sm > .form-control-static.form-control,
.input-group-sm > .form-control-static.input-group-addon,
.input-group-sm > .input-group-btn > .form-control-static.btn {
  padding-left: 0;
  padding-right: 0;
}
.input-sm,
.input-group-sm > .form-control,
.input-group-sm > .input-group-addon,
.input-group-sm > .input-group-btn > .btn {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 3px;
}
select.input-sm,
.input-group-sm > select.form-control,
.input-group-sm > select.input-group-addon,
.input-group-sm > .input-group-btn > select.btn {
  height: 30px;
  line-height: 30px;
}
textarea.input-sm,
.input-group-sm > textarea.form-control,
.input-group-sm > textarea.input-group-addon,
.input-group-sm > .input-group-btn > textarea.btn,
select[multiple].input-sm,
.input-group-sm > select.form-control[multiple],
.input-group-sm > select.input-group-addon[multiple],
.input-group-sm > .input-group-btn > select.btn[multiple] {
  height: auto;
}
.form-group-sm .form-control {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 3px;
}
.form-group-sm select.form-control {
  height: 30px;
  line-height: 30px;
}
.form-group-sm textarea.form-control,
.form-group-sm select[multiple].form-control {
  height: auto;
}
.form-group-sm .form-control-static {
  height: 30px;
  min-height: 32px;
  padding: 6px 10px;
  font-size: 12px;
  line-height: 1.5;
}
.input-lg,
.input-group-lg > .form-control,
.input-group-lg > .input-group-addon,
.input-group-lg > .input-group-btn > .btn {
  height: 46px;
  padding: 10px 16px;
  font-size: 18px;
  line-height: 1.33333;
  border-radius: 6px;
}
select.input-lg,
.input-group-lg > select.form-control,
.input-group-lg > select.input-group-addon,
.input-group-lg > .input-group-btn > select.btn {
  height: 46px;
  line-height: 46px;
}
textarea.input-lg,
.input-group-lg > textarea.form-control,
.input-group-lg > textarea.input-group-addon,
.input-group-lg > .input-group-btn > textarea.btn,
select[multiple].input-lg,
.input-group-lg > select.form-control[multiple],
.input-group-lg > select.input-group-addon[multiple],
.input-group-lg > .input-group-btn > select.btn[multiple] {
  height: auto;
}
.form-group-lg .form-control {
  height: 46px;
  padding: 10px 16px;
  font-size: 18px;
  line-height: 1.33333;
  border-radius: 6px;
}
.form-group-lg select.form-control {
  height: 46px;
  line-height: 46px;
}
.form-group-lg textarea.form-control,
.form-group-lg select[multiple].form-control {
  height: auto;
}
.form-group-lg .form-control-static {
  height: 46px;
  min-height: 38px;
  padding: 11px 16px;
  font-size: 18px;
  line-height: 1.33333;
}
.has-feedback {
  position: relative;
}
.has-feedback .form-control {
  padding-right: 42.5px;
}
.form-control-feedback {
  position: absolute;
  top: 0;
  right: 0;
  z-index: 2;
  display: block;
  width: 34px;
  height: 34px;
  line-height: 34px;
  text-align: center;
  pointer-events: none;
}
.input-lg + .form-control-feedback,
.input-group-lg > .form-control + .form-control-feedback,
.input-group-lg > .input-group-addon + .form-control-feedback,
.input-group-lg > .input-group-btn > .btn + .form-control-feedback,
.input-group-lg + .form-control-feedback,
.form-group-lg .form-control + .form-control-feedback {
  width: 46px;
  height: 46px;
  line-height: 46px;
}
.input-sm + .form-control-feedback,
.input-group-sm > .form-control + .form-control-feedback,
.input-group-sm > .input-group-addon + .form-control-feedback,
.input-group-sm > .input-group-btn > .btn + .form-control-feedback,
.input-group-sm + .form-control-feedback,
.form-group-sm .form-control + .form-control-feedback {
  width: 30px;
  height: 30px;
  line-height: 30px;
}
.has-success .help-block,
.has-success .control-label,
.has-success .radio,
.has-success .checkbox,
.has-success .radio-inline,
.has-success .checkbox-inline,
.has-success.radio label,
.has-success.checkbox label,
.has-success.radio-inline label,
.has-success.checkbox-inline label {
  color: #3c763d;
}
.has-success .form-control {
  border-color: #3c763d;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-success .form-control:focus {
  border-color: #2b542c;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
}
.has-success .input-group-addon {
  color: #3c763d;
  border-color: #3c763d;
  background-color: #dff0d8;
}
.has-success .form-control-feedback {
  color: #3c763d;
}
.has-warning .help-block,
.has-warning .control-label,
.has-warning .radio,
.has-warning .checkbox,
.has-warning .radio-inline,
.has-warning .checkbox-inline,
.has-warning.radio label,
.has-warning.checkbox label,
.has-warning.radio-inline label,
.has-warning.checkbox-inline label {
  color: #8a6d3b;
}
.has-warning .form-control {
  border-color: #8a6d3b;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-warning .form-control:focus {
  border-color: #66512c;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
}
.has-warning .input-group-addon {
  color: #8a6d3b;
  border-color: #8a6d3b;
  background-color: #fcf8e3;
}
.has-warning .form-control-feedback {
  color: #8a6d3b;
}
.has-error .help-block,
.has-error .control-label,
.has-error .radio,
.has-error .checkbox,
.has-error .radio-inline,
.has-error .checkbox-inline,
.has-error.radio label,
.has-error.checkbox label,
.has-error.radio-inline label,
.has-error.checkbox-inline label {
  color: #a94442;
}
.has-error .form-control {
  border-color: #a94442;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-error .form-control:focus {
  border-color: #843534;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
}
.has-error .input-group-addon {
  color: #a94442;
  border-color: #a94442;
  background-color: #f2dede;
}
.has-error .form-control-feedback {
  color: #a94442;
}
.has-feedback label ~ .form-control-feedback {
  top: 25px;
}
.has-feedback label.sr-only ~ .form-control-feedback {
  top: 0;
}
.help-block {
  display: block;
  margin-top: 5px;
  margin-bottom: 10px;
  color: #737373;
}
@media (min-width: 768px) {
  .form-inline .form-group {
    display: inline-block;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .form-control {
    display: inline-block;
    width: auto;
    vertical-align: middle;
  }
  .form-inline .form-control-static {
    display: inline-block;
  }
  .form-inline .input-group {
    display: inline-table;
    vertical-align: middle;
  }
  .form-inline .input-group .input-group-addon,
  .form-inline .input-group .input-group-btn,
  .form-inline .input-group .form-control {
    width: auto;
  }
  .form-inline .input-group > .form-control {
    width: 100%;
  }
  .form-inline .control-label {
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .radio,
  .form-inline .checkbox {
    display: inline-block;
    margin-top: 0;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .radio label,
  .form-inline .checkbox label {
    padding-left: 0;
  }
  .form-inline .radio input[type="radio"],
  .form-inline .checkbox input[type="checkbox"] {
    position: relative;
    margin-left: 0;
  }
  .form-inline .has-feedback .form-control-feedback {
    top: 0;
  }
}
.form-horizontal .radio,
.form-horizontal .checkbox,
.form-horizontal .radio-inline,
.form-horizontal .checkbox-inline {
  margin-top: 0;
  margin-bottom: 0;
  padding-top: 7px;
}
.form-horizontal .radio,
.form-horizontal .checkbox {
  min-height: 27px;
}
.form-horizontal .form-group {
  margin-left: -15px;
  margin-right: -15px;
}
.form-horizontal .form-group:before,
.form-horizontal .form-group:after {
  content: " ";
  display: table;
}
.form-horizontal .form-group:after {
  clear: both;
}
@media (min-width: 768px) {
  .form-horizontal .control-label {
    text-align: right;
    margin-bottom: 0;
    padding-top: 7px;
  }
}
.form-horizontal .has-feedback .form-control-feedback {
  right: 15px;
}
@media (min-width: 768px) {
  .form-horizontal .form-group-lg .control-label {
    padding-top: 11px;
    font-size: 18px;
  }
}
@media (min-width: 768px) {
  .form-horizontal .form-group-sm .control-label {
    padding-top: 6px;
    font-size: 12px;
  }
}
.btn {
  display: inline-block;
  margin-bottom: 0;
  font-weight: normal;
  text-align: center;
  vertical-align: middle;
  -ms-touch-action: manipulation;
  touch-action: manipulation;
  cursor: pointer;
  background-image: none;
  border: 1px solid transparent;
  white-space: nowrap;
  padding: 6px 12px;
  font-size: 14px;
  line-height: 1.42857;
  border-radius: 4px;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.btn:focus,
.btn.focus,
.btn:active:focus,
.btn:active.focus,
.btn.active:focus,
.btn.active.focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
.btn:hover,
.btn:focus,
.btn.focus {
  color: #333;
  text-decoration: none;
}
.btn:active,
.btn.active {
  outline: 0;
  background-image: none;
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn.disabled,
.btn[disabled],
fieldset[disabled] .btn {
  cursor: not-allowed;
  opacity: 0.65;
  filter: alpha(opacity=65);
  -webkit-box-shadow: none;
  box-shadow: none;
}
a.btn.disabled,
fieldset[disabled] a.btn {
  pointer-events: none;
}
.btn-default {
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
.btn-default:focus,
.btn-default.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
.btn-default:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.btn-default:active,
.btn-default.active,
.open > .btn-default.dropdown-toggle {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.btn-default:active:hover,
.btn-default:active:focus,
.btn-default:active.focus,
.btn-default.active:hover,
.btn-default.active:focus,
.btn-default.active.focus,
.open > .btn-default.dropdown-toggle:hover,
.open > .btn-default.dropdown-toggle:focus,
.open > .btn-default.dropdown-toggle.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
.btn-default:active,
.btn-default.active,
.open > .btn-default.dropdown-toggle {
  background-image: none;
}
.btn-default.disabled:hover,
.btn-default.disabled:focus,
.btn-default.disabled.focus,
.btn-default[disabled]:hover,
.btn-default[disabled]:focus,
.btn-default[disabled].focus,
fieldset[disabled] .btn-default:hover,
fieldset[disabled] .btn-default:focus,
fieldset[disabled] .btn-default.focus {
  background-color: #fff;
  border-color: #ccc;
}
.btn-default .badge {
  color: #fff;
  background-color: #333;
}
.btn-primary {
  color: #fff;
  background-color: #337ab7;
  border-color: #2e6da4;
}
.btn-primary:focus,
.btn-primary.focus {
  color: #fff;
  background-color: #286090;
  border-color: #122b40;
}
.btn-primary:hover {
  color: #fff;
  background-color: #286090;
  border-color: #204d74;
}
.btn-primary:active,
.btn-primary.active,
.open > .btn-primary.dropdown-toggle {
  color: #fff;
  background-color: #286090;
  border-color: #204d74;
}
.btn-primary:active:hover,
.btn-primary:active:focus,
.btn-primary:active.focus,
.btn-primary.active:hover,
.btn-primary.active:focus,
.btn-primary.active.focus,
.open > .btn-primary.dropdown-toggle:hover,
.open > .btn-primary.dropdown-toggle:focus,
.open > .btn-primary.dropdown-toggle.focus {
  color: #fff;
  background-color: #204d74;
  border-color: #122b40;
}
.btn-primary:active,
.btn-primary.active,
.open > .btn-primary.dropdown-toggle {
  background-image: none;
}
.btn-primary.disabled:hover,
.btn-primary.disabled:focus,
.btn-primary.disabled.focus,
.btn-primary[disabled]:hover,
.btn-primary[disabled]:focus,
.btn-primary[disabled].focus,
fieldset[disabled] .btn-primary:hover,
fieldset[disabled] .btn-primary:focus,
fieldset[disabled] .btn-primary.focus {
  background-color: #337ab7;
  border-color: #2e6da4;
}
.btn-primary .badge {
  color: #337ab7;
  background-color: #fff;
}
.btn-success {
  color: #fff;
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.btn-success:focus,
.btn-success.focus {
  color: #fff;
  background-color: #449d44;
  border-color: #255625;
}
.btn-success:hover {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.btn-success:active,
.btn-success.active,
.open > .btn-success.dropdown-toggle {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.btn-success:active:hover,
.btn-success:active:focus,
.btn-success:active.focus,
.btn-success.active:hover,
.btn-success.active:focus,
.btn-success.active.focus,
.open > .btn-success.dropdown-toggle:hover,
.open > .btn-success.dropdown-toggle:focus,
.open > .btn-success.dropdown-toggle.focus {
  color: #fff;
  background-color: #398439;
  border-color: #255625;
}
.btn-success:active,
.btn-success.active,
.open > .btn-success.dropdown-toggle {
  background-image: none;
}
.btn-success.disabled:hover,
.btn-success.disabled:focus,
.btn-success.disabled.focus,
.btn-success[disabled]:hover,
.btn-success[disabled]:focus,
.btn-success[disabled].focus,
fieldset[disabled] .btn-success:hover,
fieldset[disabled] .btn-success:focus,
fieldset[disabled] .btn-success.focus {
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.btn-success .badge {
  color: #5cb85c;
  background-color: #fff;
}
.btn-info {
  color: #fff;
  background-color: #5bc0de;
  border-color: #46b8da;
}
.btn-info:focus,
.btn-info.focus {
  color: #fff;
  background-color: #31b0d5;
  border-color: #1b6d85;
}
.btn-info:hover {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.btn-info:active,
.btn-info.active,
.open > .btn-info.dropdown-toggle {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.btn-info:active:hover,
.btn-info:active:focus,
.btn-info:active.focus,
.btn-info.active:hover,
.btn-info.active:focus,
.btn-info.active.focus,
.open > .btn-info.dropdown-toggle:hover,
.open > .btn-info.dropdown-toggle:focus,
.open > .btn-info.dropdown-toggle.focus {
  color: #fff;
  background-color: #269abc;
  border-color: #1b6d85;
}
.btn-info:active,
.btn-info.active,
.open > .btn-info.dropdown-toggle {
  background-image: none;
}
.btn-info.disabled:hover,
.btn-info.disabled:focus,
.btn-info.disabled.focus,
.btn-info[disabled]:hover,
.btn-info[disabled]:focus,
.btn-info[disabled].focus,
fieldset[disabled] .btn-info:hover,
fieldset[disabled] .btn-info:focus,
fieldset[disabled] .btn-info.focus {
  background-color: #5bc0de;
  border-color: #46b8da;
}
.btn-info .badge {
  color: #5bc0de;
  background-color: #fff;
}
.btn-warning {
  color: #fff;
  background-color: #f0ad4e;
  border-color: #eea236;
}
.btn-warning:focus,
.btn-warning.focus {
  color: #fff;
  background-color: #ec971f;
  border-color: #985f0d;
}
.btn-warning:hover {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.btn-warning:active,
.btn-warning.active,
.open > .btn-warning.dropdown-toggle {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.btn-warning:active:hover,
.btn-warning:active:focus,
.btn-warning:active.focus,
.btn-warning.active:hover,
.btn-warning.active:focus,
.btn-warning.active.focus,
.open > .btn-warning.dropdown-toggle:hover,
.open > .btn-warning.dropdown-toggle:focus,
.open > .btn-warning.dropdown-toggle.focus {
  color: #fff;
  background-color: #d58512;
  border-color: #985f0d;
}
.btn-warning:active,
.btn-warning.active,
.open > .btn-warning.dropdown-toggle {
  background-image: none;
}
.btn-warning.disabled:hover,
.btn-warning.disabled:focus,
.btn-warning.disabled.focus,
.btn-warning[disabled]:hover,
.btn-warning[disabled]:focus,
.btn-warning[disabled].focus,
fieldset[disabled] .btn-warning:hover,
fieldset[disabled] .btn-warning:focus,
fieldset[disabled] .btn-warning.focus {
  background-color: #f0ad4e;
  border-color: #eea236;
}
.btn-warning .badge {
  color: #f0ad4e;
  background-color: #fff;
}
.btn-danger {
  color: #fff;
  background-color: #d9534f;
  border-color: #d43f3a;
}
.btn-danger:focus,
.btn-danger.focus {
  color: #fff;
  background-color: #c9302c;
  border-color: #761c19;
}
.btn-danger:hover {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.btn-danger:active,
.btn-danger.active,
.open > .btn-danger.dropdown-toggle {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.btn-danger:active:hover,
.btn-danger:active:focus,
.btn-danger:active.focus,
.btn-danger.active:hover,
.btn-danger.active:focus,
.btn-danger.active.focus,
.open > .btn-danger.dropdown-toggle:hover,
.open > .btn-danger.dropdown-toggle:focus,
.open > .btn-danger.dropdown-toggle.focus {
  color: #fff;
  background-color: #ac2925;
  border-color: #761c19;
}
.btn-danger:active,
.btn-danger.active,
.open > .btn-danger.dropdown-toggle {
  background-image: none;
}
.btn-danger.disabled:hover,
.btn-danger.disabled:focus,
.btn-danger.disabled.focus,
.btn-danger[disabled]:hover,
.btn-danger[disabled]:focus,
.btn-danger[disabled].focus,
fieldset[disabled] .btn-danger:hover,
fieldset[disabled] .btn-danger:focus,
fieldset[disabled] .btn-danger.focus {
  background-color: #d9534f;
  border-color: #d43f3a;
}
.btn-danger .badge {
  color: #d9534f;
  background-color: #fff;
}
.btn-link {
  color: #337ab7;
  font-weight: normal;
  border-radius: 0;
}
.btn-link,
.btn-link:active,
.btn-link.active,
.btn-link[disabled],
fieldset[disabled] .btn-link {
  background-color: transparent;
  -webkit-box-shadow: none;
  box-shadow: none;
}
.btn-link,
.btn-link:hover,
.btn-link:focus,
.btn-link:active {
  border-color: transparent;
}
.btn-link:hover,
.btn-link:focus {
  color: #23527c;
  text-decoration: underline;
  background-color: transparent;
}
.btn-link[disabled]:hover,
.btn-link[disabled]:focus,
fieldset[disabled] .btn-link:hover,
fieldset[disabled] .btn-link:focus {
  color: #777;
  text-decoration: none;
}
.btn-lg,
.btn-group-lg > .btn {
  padding: 10px 16px;
  font-size: 18px;
  line-height: 1.33333;
  border-radius: 6px;
}
.btn-sm,
.btn-group-sm > .btn {
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 3px;
}
.btn-xs,
.btn-group-xs > .btn {
  padding: 1px 5px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 3px;
}
.btn-block {
  display: block;
  width: 100%;
}
.btn-block + .btn-block {
  margin-top: 5px;
}
input[type="submit"].btn-block,
input[type="reset"].btn-block,
input[type="button"].btn-block {
  width: 100%;
}
.fade {
  opacity: 0;
  -webkit-transition: opacity 0.15s linear;
  transition: opacity 0.15s linear;
}
.fade.in {
  opacity: 1;
}
.collapse {
  display: none;
}
.collapse.in {
  display: block;
}
tr.collapse.in {
  display: table-row;
}
tbody.collapse.in {
  display: table-row-group;
}
.collapsing {
  position: relative;
  height: 0;
  overflow: hidden;
  -webkit-transition-property: height, visibility;
  transition-property: height, visibility;
  -webkit-transition-duration: 0.35s;
  transition-duration: 0.35s;
  -webkit-transition-timing-function: ease;
  transition-timing-function: ease;
}
.caret {
  display: inline-block;
  width: 0;
  height: 0;
  margin-left: 2px;
  vertical-align: middle;
  border-top: 4px dashed;
  border-top: 4px solid \9;
  border-right: 4px solid transparent;
  border-left: 4px solid transparent;
}
.dropup,
.dropdown {
  position: relative;
}
.dropdown-toggle:focus {
  outline: 0;
}
.dropdown-menu {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 1000;
  display: none;
  float: left;
  min-width: 160px;
  padding: 5px 0;
  margin: 2px 0 0;
  list-style: none;
  font-size: 14px;
  text-align: left;
  background-color: #fff;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.15);
  border-radius: 4px;
  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
  background-clip: padding-box;
}
.dropdown-menu.pull-right {
  right: 0;
  left: auto;
}
.dropdown-menu .divider {
  height: 1px;
  margin: 9px 0;
  overflow: hidden;
  background-color: #e5e5e5;
}
.dropdown-menu > li > a {
  display: block;
  padding: 3px 20px;
  clear: both;
  font-weight: normal;
  line-height: 1.42857;
  color: #333;
  white-space: nowrap;
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
  text-decoration: none;
  color: #262626;
  background-color: #f5f5f5;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
  color: #fff;
  text-decoration: none;
  outline: 0;
  background-color: #337ab7;
}
.dropdown-menu > .disabled > a,
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
  color: #777;
}
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
  text-decoration: none;
  background-color: transparent;
  background-image: none;
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  cursor: not-allowed;
}
.open > .dropdown-menu {
  display: block;
}
.open > a {
  outline: 0;
}
.dropdown-menu-right {
  left: auto;
  right: 0;
}
.dropdown-menu-left {
  left: 0;
  right: auto;
}
.dropdown-header {
  display: block;
  padding: 3px 20px;
  font-size: 12px;
  line-height: 1.42857;
  color: #777;
  white-space: nowrap;
}
.dropdown-backdrop {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  top: 0;
  z-index: 990;
}
.pull-right > .dropdown-menu {
  right: 0;
  left: auto;
}
.dropup .caret,
.navbar-fixed-bottom .dropdown .caret {
  border-top: 0;
  border-bottom: 4px dashed;
  border-bottom: 4px solid \9;
  content: "";
}
.dropup .dropdown-menu,
.navbar-fixed-bottom .dropdown .dropdown-menu {
  top: auto;
  bottom: 100%;
  margin-bottom: 2px;
}
@media (min-width: 768px) {
  .navbar-right .dropdown-menu {
    right: 0;
    left: auto;
  }
  .navbar-right .dropdown-menu-left {
    left: 0;
    right: auto;
  }
}
.btn-group,
.btn-group-vertical {
  position: relative;
  display: inline-block;
  vertical-align: middle;
}
.btn-group > .btn,
.btn-group-vertical > .btn {
  position: relative;
  float: left;
}
.btn-group > .btn:hover,
.btn-group > .btn:focus,
.btn-group > .btn:active,
.btn-group > .btn.active,
.btn-group-vertical > .btn:hover,
.btn-group-vertical > .btn:focus,
.btn-group-vertical > .btn:active,
.btn-group-vertical > .btn.active {
  z-index: 2;
}
.btn-group .btn + .btn,
.btn-group .btn + .btn-group,
.btn-group .btn-group + .btn,
.btn-group .btn-group + .btn-group {
  margin-left: -1px;
}
.btn-toolbar {
  margin-left: -5px;
}
.btn-toolbar:before,
.btn-toolbar:after {
  content: " ";
  display: table;
}
.btn-toolbar:after {
  clear: both;
}
.btn-toolbar .btn,
.btn-toolbar .btn-group,
.btn-toolbar .input-group {
  float: left;
}
.btn-toolbar > .btn,
.btn-toolbar > .btn-group,
.btn-toolbar > .input-group {
  margin-left: 5px;
}
.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
  border-radius: 0;
}
.btn-group > .btn:first-child {
  margin-left: 0;
}
.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.btn-group > .btn:last-child:not(:first-child),
.btn-group > .dropdown-toggle:not(:first-child) {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.btn-group > .btn-group {
  float: left;
}
.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
  border-radius: 0;
}
.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.btn-group .dropdown-toggle:active,
.btn-group.open .dropdown-toggle {
  outline: 0;
}
.btn-group > .btn + .dropdown-toggle {
  padding-left: 8px;
  padding-right: 8px;
}
.btn-group > .btn-lg + .dropdown-toggle,
.btn-group-lg.btn-group > .btn + .dropdown-toggle {
  padding-left: 12px;
  padding-right: 12px;
}
.btn-group.open .dropdown-toggle {
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn-group.open .dropdown-toggle.btn-link {
  -webkit-box-shadow: none;
  box-shadow: none;
}
.btn .caret {
  margin-left: 0;
}
.btn-lg .caret,
.btn-group-lg > .btn .caret {
  border-width: 5px 5px 0;
  border-bottom-width: 0;
}
.dropup .btn-lg .caret,
.dropup .btn-group-lg > .btn .caret {
  border-width: 0 5px 5px;
}
.btn-group-vertical > .btn,
.btn-group-vertical > .btn-group,
.btn-group-vertical > .btn-group > .btn {
  display: block;
  float: none;
  width: 100%;
  max-width: 100%;
}
.btn-group-vertical > .btn-group:before,
.btn-group-vertical > .btn-group:after {
  content: " ";
  display: table;
}
.btn-group-vertical > .btn-group:after {
  clear: both;
}
.btn-group-vertical > .btn-group > .btn {
  float: none;
}
.btn-group-vertical > .btn + .btn,
.btn-group-vertical > .btn + .btn-group,
.btn-group-vertical > .btn-group + .btn,
.btn-group-vertical > .btn-group + .btn-group {
  margin-top: -1px;
  margin-left: 0;
}
.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
  border-radius: 0;
}
.btn-group-vertical > .btn:first-child:not(:last-child) {
  border-top-right-radius: 4px;
  border-top-left-radius: 4px;
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.btn-group-vertical > .btn:last-child:not(:first-child) {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
  border-bottom-right-radius: 4px;
  border-bottom-left-radius: 4px;
}
.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
  border-radius: 0;
}
.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.btn-group-justified {
  display: table;
  width: 100%;
  table-layout: fixed;
  border-collapse: separate;
}
.btn-group-justified > .btn,
.btn-group-justified > .btn-group {
  float: none;
  display: table-cell;
  width: 1%;
}
.btn-group-justified > .btn-group .btn {
  width: 100%;
}
.btn-group-justified > .btn-group .dropdown-menu {
  left: auto;
}
[data-toggle="buttons"] > .btn input[type="radio"],
[data-toggle="buttons"] > .btn input[type="checkbox"],
[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
  position: absolute;
  clip: rect(0, 0, 0, 0);
  pointer-events: none;
}
.input-group {
  position: relative;
  display: table;
  border-collapse: separate;
}
.input-group[class*="col-"] {
  float: none;
  padding-left: 0;
  padding-right: 0;
}
.input-group .form-control {
  position: relative;
  z-index: 2;
  float: left;
  width: 100%;
  margin-bottom: 0;
}
.input-group .form-control:focus {
  z-index: 3;
}
.input-group-addon,
.input-group-btn,
.input-group .form-control {
  display: table-cell;
}
.input-group-addon:not(:first-child):not(:last-child),
.input-group-btn:not(:first-child):not(:last-child),
.input-group .form-control:not(:first-child):not(:last-child) {
  border-radius: 0;
}
.input-group-addon,
.input-group-btn {
  width: 1%;
  white-space: nowrap;
  vertical-align: middle;
}
.input-group-addon {
  padding: 6px 12px;
  font-size: 14px;
  font-weight: normal;
  line-height: 1;
  color: #555;
  text-align: center;
  background-color: #eee;
  border: 1px solid #ccc;
  border-radius: 4px;
}
.input-group-addon.input-sm,
.input-group-sm > .input-group-addon,
.input-group-sm > .input-group-btn > .input-group-addon.btn {
  padding: 5px 10px;
  font-size: 12px;
  border-radius: 3px;
}
.input-group-addon.input-lg,
.input-group-lg > .input-group-addon,
.input-group-lg > .input-group-btn > .input-group-addon.btn {
  padding: 10px 16px;
  font-size: 18px;
  border-radius: 6px;
}
.input-group-addon input[type="radio"],
.input-group-addon input[type="checkbox"] {
  margin-top: 0;
}
.input-group .form-control:first-child,
.input-group-addon:first-child,
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group > .btn,
.input-group-btn:first-child > .dropdown-toggle,
.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.input-group-addon:first-child {
  border-right: 0;
}
.input-group .form-control:last-child,
.input-group-addon:last-child,
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group > .btn,
.input-group-btn:last-child > .dropdown-toggle,
.input-group-btn:first-child > .btn:not(:first-child),
.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.input-group-addon:last-child {
  border-left: 0;
}
.input-group-btn {
  position: relative;
  font-size: 0;
  white-space: nowrap;
}
.input-group-btn > .btn {
  position: relative;
}
.input-group-btn > .btn + .btn {
  margin-left: -1px;
}
.input-group-btn > .btn:hover,
.input-group-btn > .btn:focus,
.input-group-btn > .btn:active {
  z-index: 2;
}
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group {
  margin-right: -1px;
}
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group {
  z-index: 2;
  margin-left: -1px;
}
.nav {
  margin-bottom: 0;
  padding-left: 0;
  list-style: none;
}
.nav:before,
.nav:after {
  content: " ";
  display: table;
}
.nav:after {
  clear: both;
}
.nav > li {
  position: relative;
  display: block;
}
.nav > li > a {
  position: relative;
  display: block;
  padding: 10px 15px;
}
.nav > li > a:hover,
.nav > li > a:focus {
  text-decoration: none;
  background-color: #eee;
}
.nav > li.disabled > a {
  color: #777;
}
.nav > li.disabled > a:hover,
.nav > li.disabled > a:focus {
  color: #777;
  text-decoration: none;
  background-color: transparent;
  cursor: not-allowed;
}
.nav .open > a,
.nav .open > a:hover,
.nav .open > a:focus {
  background-color: #eee;
  border-color: #337ab7;
}
.nav .nav-divider {
  height: 1px;
  margin: 9px 0;
  overflow: hidden;
  background-color: #e5e5e5;
}
.nav > li > a > img {
  max-width: none;
}
.nav-tabs {
  border-bottom: 1px solid #ddd;
}
.nav-tabs > li {
  float: left;
  margin-bottom: -1px;
}
.nav-tabs > li > a {
  margin-right: 2px;
  line-height: 1.42857;
  border: 1px solid transparent;
  border-radius: 4px 4px 0 0;
}
.nav-tabs > li > a:hover {
  border-color: #eee #eee #ddd;
}
.nav-tabs > li.active > a,
.nav-tabs > li.active > a:hover,
.nav-tabs > li.active > a:focus {
  color: #555;
  background-color: #fff;
  border: 1px solid #ddd;
  border-bottom-color: transparent;
  cursor: default;
}
.nav-pills > li {
  float: left;
}
.nav-pills > li > a {
  border-radius: 4px;
}
.nav-pills > li + li {
  margin-left: 2px;
}
.nav-pills > li.active > a,
.nav-pills > li.active > a:hover,
.nav-pills > li.active > a:focus {
  color: #fff;
  background-color: #337ab7;
}
.nav-stacked > li {
  float: none;
}
.nav-stacked > li + li {
  margin-top: 2px;
  margin-left: 0;
}
.nav-justified,
.nav-tabs.nav-justified {
  width: 100%;
}
.nav-justified > li,
.nav-tabs.nav-justified > li {
  float: none;
}
.nav-justified > li > a,
.nav-tabs.nav-justified > li > a {
  text-align: center;
  margin-bottom: 5px;
}
.nav-justified > .dropdown .dropdown-menu {
  top: auto;
  left: auto;
}
@media (min-width: 768px) {
  .nav-justified > li,
  .nav-tabs.nav-justified > li {
    display: table-cell;
    width: 1%;
  }
  .nav-justified > li > a,
  .nav-tabs.nav-justified > li > a {
    margin-bottom: 0;
  }
}
.nav-tabs-justified,
.nav-tabs.nav-justified {
  border-bottom: 0;
}
.nav-tabs-justified > li > a,
.nav-tabs.nav-justified > li > a {
  margin-right: 0;
  border-radius: 4px;
}
.nav-tabs-justified > .active > a,
.nav-tabs.nav-justified > .active > a,
.nav-tabs-justified > .active > a:hover,
.nav-tabs.nav-justified > .active > a:hover,
.nav-tabs-justified > .active > a:focus,
.nav-tabs.nav-justified > .active > a:focus {
  border: 1px solid #ddd;
}
@media (min-width: 768px) {
  .nav-tabs-justified > li > a,
  .nav-tabs.nav-justified > li > a {
    border-bottom: 1px solid #ddd;
    border-radius: 4px 4px 0 0;
  }
  .nav-tabs-justified > .active > a,
  .nav-tabs.nav-justified > .active > a,
  .nav-tabs-justified > .active > a:hover,
  .nav-tabs.nav-justified > .active > a:hover,
  .nav-tabs-justified > .active > a:focus,
  .nav-tabs.nav-justified > .active > a:focus {
    border-bottom-color: #fff;
  }
}
.tab-content > .tab-pane {
  display: none;
}
.tab-content > .active {
  display: block;
}
.nav-tabs .dropdown-menu {
  margin-top: -1px;
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.navbar {
  position: relative;
  min-height: 50px;
  margin-bottom: 20px;
  border: 1px solid transparent;
}
.navbar:before,
.navbar:after {
  content: " ";
  display: table;
}
.navbar:after {
  clear: both;
}
@media (min-width: 768px) {
  .navbar {
    border-radius: 4px;
  }
}
.navbar-header:before,
.navbar-header:after {
  content: " ";
  display: table;
}
.navbar-header:after {
  clear: both;
}
@media (min-width: 768px) {
  .navbar-header {
    float: left;
  }
}
.navbar-collapse {
  overflow-x: visible;
  padding-right: 15px;
  padding-left: 15px;
  border-top: 1px solid transparent;
  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
  -webkit-overflow-scrolling: touch;
}
.navbar-collapse:before,
.navbar-collapse:after {
  content: " ";
  display: table;
}
.navbar-collapse:after {
  clear: both;
}
.navbar-collapse.in {
  overflow-y: auto;
}
@media (min-width: 768px) {
  .navbar-collapse {
    width: auto;
    border-top: 0;
    -webkit-box-shadow: none;
    box-shadow: none;
  }
  .navbar-collapse.collapse {
    display: block !important;
    height: auto !important;
    padding-bottom: 0;
    overflow: visible !important;
  }
  .navbar-collapse.in {
    overflow-y: visible;
  }
  .navbar-fixed-top .navbar-collapse,
  .navbar-static-top .navbar-collapse,
  .navbar-fixed-bottom .navbar-collapse {
    padding-left: 0;
    padding-right: 0;
  }
}
.navbar-fixed-top .navbar-collapse,
.navbar-fixed-bottom .navbar-collapse {
  max-height: 340px;
}
@media (max-device-width: 480px) and (orientation: landscape) {
  .navbar-fixed-top .navbar-collapse,
  .navbar-fixed-bottom .navbar-collapse {
    max-height: 200px;
  }
}
.container > .navbar-header,
.container > .navbar-collapse,
.container-fluid > .navbar-header,
.container-fluid > .navbar-collapse {
  margin-right: -15px;
  margin-left: -15px;
}
@media (min-width: 768px) {
  .container > .navbar-header,
  .container > .navbar-collapse,
  .container-fluid > .navbar-header,
  .container-fluid > .navbar-collapse {
    margin-right: 0;
    margin-left: 0;
  }
}
.navbar-static-top {
  z-index: 1000;
  border-width: 0 0 1px;
}
@media (min-width: 768px) {
  .navbar-static-top {
    border-radius: 0;
  }
}
.navbar-fixed-top,
.navbar-fixed-bottom {
  position: fixed;
  right: 0;
  left: 0;
  z-index: 1030;
}
@media (min-width: 768px) {
  .navbar-fixed-top,
  .navbar-fixed-bottom {
    border-radius: 0;
  }
}
.navbar-fixed-top {
  top: 0;
  border-width: 0 0 1px;
}
.navbar-fixed-bottom {
  bottom: 0;
  margin-bottom: 0;
  border-width: 1px 0 0;
}
.navbar-brand {
  float: left;
  padding: 15px 15px;
  font-size: 18px;
  line-height: 20px;
  height: 50px;
}
.navbar-brand:hover,
.navbar-brand:focus {
  text-decoration: none;
}
.navbar-brand > img {
  display: block;
}
@media (min-width: 768px) {
  .navbar > .container .navbar-brand,
  .navbar > .container-fluid .navbar-brand {
    margin-left: -15px;
  }
}
.navbar-toggle {
  position: relative;
  float: right;
  margin-right: 15px;
  padding: 9px 10px;
  margin-top: 8px;
  margin-bottom: 8px;
  background-color: transparent;
  background-image: none;
  border: 1px solid transparent;
  border-radius: 4px;
}
.navbar-toggle:focus {
  outline: 0;
}
.navbar-toggle .icon-bar {
  display: block;
  width: 22px;
  height: 2px;
  border-radius: 1px;
}
.navbar-toggle .icon-bar + .icon-bar {
  margin-top: 4px;
}
@media (min-width: 768px) {
  .navbar-toggle {
    display: none;
  }
}
.navbar-nav {
  margin: 7.5px -15px;
}
.navbar-nav > li > a {
  padding-top: 10px;
  padding-bottom: 10px;
  line-height: 20px;
}
@media (max-width: 767px) {
  .navbar-nav .open .dropdown-menu {
    position: static;
    float: none;
    width: auto;
    margin-top: 0;
    background-color: transparent;
    border: 0;
    -webkit-box-shadow: none;
    box-shadow: none;
  }
  .navbar-nav .open .dropdown-menu > li > a,
  .navbar-nav .open .dropdown-menu .dropdown-header {
    padding: 5px 15px 5px 25px;
  }
  .navbar-nav .open .dropdown-menu > li > a {
    line-height: 20px;
  }
  .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-nav .open .dropdown-menu > li > a:focus {
    background-image: none;
  }
}
@media (min-width: 768px) {
  .navbar-nav {
    float: left;
    margin: 0;
  }
  .navbar-nav > li {
    float: left;
  }
  .navbar-nav > li > a {
    padding-top: 15px;
    padding-bottom: 15px;
  }
}
.navbar-form {
  margin-left: -15px;
  margin-right: -15px;
  padding: 10px 15px;
  border-top: 1px solid transparent;
  border-bottom: 1px solid transparent;
  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
  margin-top: 8px;
  margin-bottom: 8px;
}
@media (min-width: 768px) {
  .navbar-form .form-group {
    display: inline-block;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .form-control {
    display: inline-block;
    width: auto;
    vertical-align: middle;
  }
  .navbar-form .form-control-static {
    display: inline-block;
  }
  .navbar-form .input-group {
    display: inline-table;
    vertical-align: middle;
  }
  .navbar-form .input-group .input-group-addon,
  .navbar-form .input-group .input-group-btn,
  .navbar-form .input-group .form-control {
    width: auto;
  }
  .navbar-form .input-group > .form-control {
    width: 100%;
  }
  .navbar-form .control-label {
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .radio,
  .navbar-form .checkbox {
    display: inline-block;
    margin-top: 0;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .radio label,
  .navbar-form .checkbox label {
    padding-left: 0;
  }
  .navbar-form .radio input[type="radio"],
  .navbar-form .checkbox input[type="checkbox"] {
    position: relative;
    margin-left: 0;
  }
  .navbar-form .has-feedback .form-control-feedback {
    top: 0;
  }
}
@media (max-width: 767px) {
  .navbar-form .form-group {
    margin-bottom: 5px;
  }
  .navbar-form .form-group:last-child {
    margin-bottom: 0;
  }
}
@media (min-width: 768px) {
  .navbar-form {
    width: auto;
    border: 0;
    margin-left: 0;
    margin-right: 0;
    padding-top: 0;
    padding-bottom: 0;
    -webkit-box-shadow: none;
    box-shadow: none;
  }
}
.navbar-nav > li > .dropdown-menu {
  margin-top: 0;
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
  margin-bottom: 0;
  border-top-right-radius: 4px;
  border-top-left-radius: 4px;
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.navbar-btn {
  margin-top: 8px;
  margin-bottom: 8px;
}
.navbar-btn.btn-sm,
.btn-group-sm > .navbar-btn.btn {
  margin-top: 10px;
  margin-bottom: 10px;
}
.navbar-btn.btn-xs,
.btn-group-xs > .navbar-btn.btn {
  margin-top: 14px;
  margin-bottom: 14px;
}
.navbar-text {
  margin-top: 15px;
  margin-bottom: 15px;
}
@media (min-width: 768px) {
  .navbar-text {
    float: left;
    margin-left: 15px;
    margin-right: 15px;
  }
}
@media (min-width: 768px) {
  .navbar-left {
    float: left !important;
  }
  .navbar-right {
    float: right !important;
    margin-right: -15px;
  }
  .navbar-right ~ .navbar-right {
    margin-right: 0;
  }
}
.navbar-default {
  background-color: #f8f8f8;
  border-color: #e7e7e7;
}
.navbar-default .navbar-brand {
  color: #777;
}
.navbar-default .navbar-brand:hover,
.navbar-default .navbar-brand:focus {
  color: #5e5e5e;
  background-color: rgba(0, 0, 0, 0);
}
.navbar-default .navbar-text {
  color: #777;
}
.navbar-default .navbar-nav > li > a {
  color: #777;
}
.navbar-default .navbar-nav > li > a:hover,
.navbar-default .navbar-nav > li > a:focus {
  color: #333;
  background-color: rgba(0, 0, 0, 0);
}
.navbar-default .navbar-nav > .active > a,
.navbar-default .navbar-nav > .active > a:hover,
.navbar-default .navbar-nav > .active > a:focus {
  color: #555;
  background-color: #e7e7e7;
}
.navbar-default .navbar-nav > .disabled > a,
.navbar-default .navbar-nav > .disabled > a:hover,
.navbar-default .navbar-nav > .disabled > a:focus {
  color: #ccc;
  background-color: rgba(0, 0, 0, 0);
}
.navbar-default .navbar-toggle {
  border-color: #ddd;
}
.navbar-default .navbar-toggle:hover,
.navbar-default .navbar-toggle:focus {
  background-color: #ddd;
}
.navbar-default .navbar-toggle .icon-bar {
  background-color: #888;
}
.navbar-default .navbar-collapse,
.navbar-default .navbar-form {
  border-color: #e7e7e7;
}
.navbar-default .navbar-nav > .open > a,
.navbar-default .navbar-nav > .open > a:hover,
.navbar-default .navbar-nav > .open > a:focus {
  background-color: #e7e7e7;
  color: #555;
}
@media (max-width: 767px) {
  .navbar-default .navbar-nav .open .dropdown-menu > li > a {
    color: #777;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
    color: #333;
    background-color: rgba(0, 0, 0, 0);
  }
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
    color: #555;
    background-color: #e7e7e7;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
    color: #ccc;
    background-color: rgba(0, 0, 0, 0);
  }
}
.navbar-default .navbar-link {
  color: #777;
}
.navbar-default .navbar-link:hover {
  color: #333;
}
.navbar-default .btn-link {
  color: #777;
}
.navbar-default .btn-link:hover,
.navbar-default .btn-link:focus {
  color: #333;
}
.navbar-default .btn-link[disabled]:hover,
.navbar-default .btn-link[disabled]:focus,
fieldset[disabled] .navbar-default .btn-link:hover,
fieldset[disabled] .navbar-default .btn-link:focus {
  color: #ccc;
}
.navbar-inverse {
  background-color: #222;
  border-color: #090909;
}
.navbar-inverse .navbar-brand {
  color: #9d9d9d;
}
.navbar-inverse .navbar-brand:hover,
.navbar-inverse .navbar-brand:focus {
  color: #fff;
  background-color: rgba(0, 0, 0, 0);
}
.navbar-inverse .navbar-text {
  color: #9d9d9d;
}
.navbar-inverse .navbar-nav > li > a {
  color: #9d9d9d;
}
.navbar-inverse .navbar-nav > li > a:hover,
.navbar-inverse .navbar-nav > li > a:focus {
  color: #fff;
  background-color: rgba(0, 0, 0, 0);
}
.navbar-inverse .navbar-nav > .active > a,
.navbar-inverse .navbar-nav > .active > a:hover,
.navbar-inverse .navbar-nav > .active > a:focus {
  color: #fff;
  background-color: #090909;
}
.navbar-inverse .navbar-nav > .disabled > a,
.navbar-inverse .navbar-nav > .disabled > a:hover,
.navbar-inverse .navbar-nav > .disabled > a:focus {
  color: #444;
  background-color: rgba(0, 0, 0, 0);
}
.navbar-inverse .navbar-toggle {
  border-color: #333;
}
.navbar-inverse .navbar-toggle:hover,
.navbar-inverse .navbar-toggle:focus {
  background-color: #333;
}
.navbar-inverse .navbar-toggle .icon-bar {
  background-color: #fff;
}
.navbar-inverse .navbar-collapse,
.navbar-inverse .navbar-form {
  border-color: #101010;
}
.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .open > a:hover,
.navbar-inverse .navbar-nav > .open > a:focus {
  background-color: #090909;
  color: #fff;
}
@media (max-width: 767px) {
  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
    border-color: #090909;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
    background-color: #090909;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
    color: #9d9d9d;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
    color: #fff;
    background-color: rgba(0, 0, 0, 0);
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
    color: #fff;
    background-color: #090909;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
    color: #444;
    background-color: rgba(0, 0, 0, 0);
  }
}
.navbar-inverse .navbar-link {
  color: #9d9d9d;
}
.navbar-inverse .navbar-link:hover {
  color: #fff;
}
.navbar-inverse .btn-link {
  color: #9d9d9d;
}
.navbar-inverse .btn-link:hover,
.navbar-inverse .btn-link:focus {
  color: #fff;
}
.navbar-inverse .btn-link[disabled]:hover,
.navbar-inverse .btn-link[disabled]:focus,
fieldset[disabled] .navbar-inverse .btn-link:hover,
fieldset[disabled] .navbar-inverse .btn-link:focus {
  color: #444;
}
.pagination {
  display: inline-block;
  padding-left: 0;
  margin: 20px 0;
  border-radius: 4px;
}
.pagination > li {
  display: inline;
}
.pagination > li > a,
.pagination > li > span {
  position: relative;
  float: left;
  padding: 6px 12px;
  line-height: 1.42857;
  text-decoration: none;
  color: #337ab7;
  background-color: #fff;
  border: 1px solid #ddd;
  margin-left: -1px;
}
.pagination > li:first-child > a,
.pagination > li:first-child > span {
  margin-left: 0;
  border-bottom-left-radius: 4px;
  border-top-left-radius: 4px;
}
.pagination > li:last-child > a,
.pagination > li:last-child > span {
  border-bottom-right-radius: 4px;
  border-top-right-radius: 4px;
}
.pagination > li > a:hover,
.pagination > li > a:focus,
.pagination > li > span:hover,
.pagination > li > span:focus {
  z-index: 2;
  color: #23527c;
  background-color: #eee;
  border-color: #ddd;
}
.pagination > .active > a,
.pagination > .active > a:hover,
.pagination > .active > a:focus,
.pagination > .active > span,
.pagination > .active > span:hover,
.pagination > .active > span:focus {
  z-index: 3;
  color: #fff;
  background-color: #337ab7;
  border-color: #337ab7;
  cursor: default;
}
.pagination > .disabled > span,
.pagination > .disabled > span:hover,
.pagination > .disabled > span:focus,
.pagination > .disabled > a,
.pagination > .disabled > a:hover,
.pagination > .disabled > a:focus {
  color: #777;
  background-color: #fff;
  border-color: #ddd;
  cursor: not-allowed;
}
.pagination-lg > li > a,
.pagination-lg > li > span {
  padding: 10px 16px;
  font-size: 18px;
  line-height: 1.33333;
}
.pagination-lg > li:first-child > a,
.pagination-lg > li:first-child > span {
  border-bottom-left-radius: 6px;
  border-top-left-radius: 6px;
}
.pagination-lg > li:last-child > a,
.pagination-lg > li:last-child > span {
  border-bottom-right-radius: 6px;
  border-top-right-radius: 6px;
}
.pagination-sm > li > a,
.pagination-sm > li > span {
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
}
.pagination-sm > li:first-child > a,
.pagination-sm > li:first-child > span {
  border-bottom-left-radius: 3px;
  border-top-left-radius: 3px;
}
.pagination-sm > li:last-child > a,
.pagination-sm > li:last-child > span {
  border-bottom-right-radius: 3px;
  border-top-right-radius: 3px;
}
.label {
  display: inline;
  padding: 0.2em 0.6em 0.3em;
  font-size: 75%;
  font-weight: bold;
  line-height: 1;
  color: #fff;
  text-align: center;
  white-space: nowrap;
  vertical-align: baseline;
  border-radius: 0.25em;
}
.label:empty {
  display: none;
}
.btn .label {
  position: relative;
  top: -1px;
}
a.label:hover,
a.label:focus {
  color: #fff;
  text-decoration: none;
  cursor: pointer;
}
.label-default {
  background-color: #777;
}
.label-default[href]:hover,
.label-default[href]:focus {
  background-color: #5e5e5e;
}
.label-primary {
  background-color: #337ab7;
}
.label-primary[href]:hover,
.label-primary[href]:focus {
  background-color: #286090;
}
.label-success {
  background-color: #5cb85c;
}
.label-success[href]:hover,
.label-success[href]:focus {
  background-color: #449d44;
}
.label-info {
  background-color: #5bc0de;
}
.label-info[href]:hover,
.label-info[href]:focus {
  background-color: #31b0d5;
}
.label-warning {
  background-color: #f0ad4e;
}
.label-warning[href]:hover,
.label-warning[href]:focus {
  background-color: #ec971f;
}
.label-danger {
  background-color: #d9534f;
}
.label-danger[href]:hover,
.label-danger[href]:focus {
  background-color: #c9302c;
}
.alert {
  padding: 15px;
  margin-bottom: 20px;
  border: 1px solid transparent;
  border-radius: 4px;
}
.alert h4 {
  margin-top: 0;
  color: inherit;
}
.alert .alert-link {
  font-weight: bold;
}
.alert > p,
.alert > ul {
  margin-bottom: 0;
}
.alert > p + p {
  margin-top: 5px;
}
.alert-dismissable,
.alert-dismissible {
  padding-right: 35px;
}
.alert-dismissable .close,
.alert-dismissible .close {
  position: relative;
  top: -2px;
  right: -21px;
  color: inherit;
}
.alert-success {
  background-color: #dff0d8;
  border-color: #d6e9c6;
  color: #3c763d;
}
.alert-success hr {
  border-top-color: #c9e2b3;
}
.alert-success .alert-link {
  color: #2b542c;
}
.alert-info {
  background-color: #d9edf7;
  border-color: #bce8f1;
  color: #31708f;
}
.alert-info hr {
  border-top-color: #a6e1ec;
}
.alert-info .alert-link {
  color: #245269;
}
.alert-warning {
  background-color: #fcf8e3;
  border-color: #faebcc;
  color: #8a6d3b;
}
.alert-warning hr {
  border-top-color: #f7e1b5;
}
.alert-warning .alert-link {
  color: #66512c;
}
.alert-danger {
  background-color: #f2dede;
  border-color: #ebccd1;
  color: #a94442;
}
.alert-danger hr {
  border-top-color: #e4b9c0;
}
.alert-danger .alert-link {
  color: #843534;
}
@-webkit-keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}
@keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}
.progress {
  overflow: hidden;
  height: 20px;
  margin-bottom: 20px;
  background-color: #f5f5f5;
  border-radius: 4px;
  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
}
.progress-bar {
  float: left;
  width: 0%;
  height: 100%;
  font-size: 12px;
  line-height: 20px;
  color: #fff;
  text-align: center;
  background-color: #337ab7;
  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
  -webkit-transition: width 0.6s ease;
  transition: width 0.6s ease;
}
.progress-striped .progress-bar,
.progress-bar-striped {
  background-image: linear-gradient(
    45deg,
    rgba(255, 255, 255, 0.15) 25%,
    transparent 25%,
    transparent 50%,
    rgba(255, 255, 255, 0.15) 50%,
    rgba(255, 255, 255, 0.15) 75%,
    transparent 75%,
    transparent
  );
  background-size: 40px 40px;
}
.progress.active .progress-bar,
.progress-bar.active {
  -webkit-animation: progress-bar-stripes 2s linear infinite;
  animation: progress-bar-stripes 2s linear infinite;
}
.progress-bar-success {
  background-color: #5cb85c;
}
.progress-striped .progress-bar-success {
  background-image: linear-gradient(
    45deg,
    rgba(255, 255, 255, 0.15) 25%,
    transparent 25%,
    transparent 50%,
    rgba(255, 255, 255, 0.15) 50%,
    rgba(255, 255, 255, 0.15) 75%,
    transparent 75%,
    transparent
  );
}
.progress-bar-info {
  background-color: #5bc0de;
}
.progress-striped .progress-bar-info {
  background-image: linear-gradient(
    45deg,
    rgba(255, 255, 255, 0.15) 25%,
    transparent 25%,
    transparent 50%,
    rgba(255, 255, 255, 0.15) 50%,
    rgba(255, 255, 255, 0.15) 75%,
    transparent 75%,
    transparent
  );
}
.progress-bar-warning {
  background-color: #f0ad4e;
}
.progress-striped .progress-bar-warning {
  background-image: linear-gradient(
    45deg,
    rgba(255, 255, 255, 0.15) 25%,
    transparent 25%,
    transparent 50%,
    rgba(255, 255, 255, 0.15) 50%,
    rgba(255, 255, 255, 0.15) 75%,
    transparent 75%,
    transparent
  );
}
.progress-bar-danger {
  background-color: #d9534f;
}
.progress-striped .progress-bar-danger {
  background-image: linear-gradient(
    45deg,
    rgba(255, 255, 255, 0.15) 25%,
    transparent 25%,
    transparent 50%,
    rgba(255, 255, 255, 0.15) 50%,
    rgba(255, 255, 255, 0.15) 75%,
    transparent 75%,
    transparent
  );
}
.close {
  float: right;
  font-size: 21px;
  font-weight: bold;
  line-height: 1;
  color: #000;
  text-shadow: 0 1px 0 #fff;
  opacity: 0.2;
  filter: alpha(opacity=20);
}
.close:hover,
.close:focus {
  color: #000;
  text-decoration: none;
  cursor: pointer;
  opacity: 0.5;
  filter: alpha(opacity=50);
}
button.close {
  padding: 0;
  cursor: pointer;
  background: transparent;
  border: 0;
  -webkit-appearance: none;
}
.modal-open {
  overflow: hidden;
}
.modal {
  display: none;
  overflow: hidden;
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1050;
  -webkit-overflow-scrolling: touch;
  outline: 0;
}
.modal.fade .modal-dialog {
  -webkit-transform: translate(0, -25%);
  transform: translate(0, -25%);
  -webkit-transition: -webkit-transform 0.3s ease-out;
  transition: -webkit-transform 0.3s ease-out;
  transition: transform 0.3s ease-out;
  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;
}
.modal.in .modal-dialog {
  -webkit-transform: translate(0, 0);
  transform: translate(0, 0);
}
.modal-open .modal {
  overflow-x: hidden;
  overflow-y: auto;
}
.modal-dialog {
  position: relative;
  width: auto;
  margin: 10px;
}
.modal-content {
  position: relative;
  background-color: #fff;
  border: 1px solid #999;
  border: 1px solid rgba(0, 0, 0, 0.2);
  border-radius: 6px;
  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
  background-clip: padding-box;
  outline: 0;
}
.modal-backdrop {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1040;
  background-color: #000;
}
.modal-backdrop.fade {
  opacity: 0;
  filter: alpha(opacity=0);
}
.modal-backdrop.in {
  opacity: 0.5;
  filter: alpha(opacity=50);
}
.modal-header {
  padding: 15px;
  border-bottom: 1px solid #e5e5e5;
}
.modal-header:before,
.modal-header:after {
  content: " ";
  display: table;
}
.modal-header:after {
  clear: both;
}
.modal-header .close {
  margin-top: -2px;
}
.modal-title {
  margin: 0;
  line-height: 1.42857;
}
.modal-body {
  position: relative;
  padding: 15px;
}
.modal-footer {
  padding: 15px;
  text-align: right;
  border-top: 1px solid #e5e5e5;
}
.modal-footer:before,
.modal-footer:after {
  content: " ";
  display: table;
}
.modal-footer:after {
  clear: both;
}
.modal-footer .btn + .btn {
  margin-left: 5px;
  margin-bottom: 0;
}
.modal-footer .btn-group .btn + .btn {
  margin-left: -1px;
}
.modal-footer .btn-block + .btn-block {
  margin-left: 0;
}
.modal-scrollbar-measure {
  position: absolute;
  top: -9999px;
  width: 50px;
  height: 50px;
  overflow: scroll;
}
@media (min-width: 768px) {
  .modal-dialog {
    width: 600px;
    margin: 30px auto;
  }
  .modal-content {
    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
  }
  .modal-sm {
    width: 300px;
  }
}
@media (min-width: 992px) {
  .modal-lg {
    width: 900px;
  }
}
.tooltip {
  position: absolute;
  z-index: 1070;
  display: block;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-style: normal;
  font-weight: normal;
  letter-spacing: normal;
  line-break: auto;
  line-height: 1.42857;
  text-align: left;
  text-align: start;
  text-decoration: none;
  text-shadow: none;
  text-transform: none;
  white-space: normal;
  word-break: normal;
  word-spacing: normal;
  word-wrap: normal;
  font-size: 12px;
  opacity: 0;
  filter: alpha(opacity=0);
}
.tooltip.in {
  opacity: 0.9;
  filter: alpha(opacity=90);
}
.tooltip.top {
  margin-top: -3px;
  padding: 5px 0;
}
.tooltip.right {
  margin-left: 3px;
  padding: 0 5px;
}
.tooltip.bottom {
  margin-top: 3px;
  padding: 5px 0;
}
.tooltip.left {
  margin-left: -3px;
  padding: 0 5px;
}
.tooltip-inner {
  max-width: 200px;
  padding: 3px 8px;
  color: #fff;
  text-align: center;
  background-color: #000;
  border-radius: 4px;
}
.tooltip-arrow {
  position: absolute;
  width: 0;
  height: 0;
  border-color: transparent;
  border-style: solid;
}
.tooltip.top .tooltip-arrow {
  bottom: 0;
  left: 50%;
  margin-left: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.top-left .tooltip-arrow {
  bottom: 0;
  right: 5px;
  margin-bottom: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.top-right .tooltip-arrow {
  bottom: 0;
  left: 5px;
  margin-bottom: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.right .tooltip-arrow {
  top: 50%;
  left: 0;
  margin-top: -5px;
  border-width: 5px 5px 5px 0;
  border-right-color: #000;
}
.tooltip.left .tooltip-arrow {
  top: 50%;
  right: 0;
  margin-top: -5px;
  border-width: 5px 0 5px 5px;
  border-left-color: #000;
}
.tooltip.bottom .tooltip-arrow {
  top: 0;
  left: 50%;
  margin-left: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.tooltip.bottom-left .tooltip-arrow {
  top: 0;
  right: 5px;
  margin-top: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.tooltip.bottom-right .tooltip-arrow {
  top: 0;
  left: 5px;
  margin-top: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.popover {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 1060;
  display: none;
  max-width: 276px;
  padding: 1px;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-style: normal;
  font-weight: normal;
  letter-spacing: normal;
  line-break: auto;
  line-height: 1.42857;
  text-align: left;
  text-align: start;
  text-decoration: none;
  text-shadow: none;
  text-transform: none;
  white-space: normal;
  word-break: normal;
  word-spacing: normal;
  word-wrap: normal;
  font-size: 14px;
  background-color: #fff;
  background-clip: padding-box;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.2);
  border-radius: 6px;
  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
}
.popover.top {
  margin-top: -10px;
}
.popover.right {
  margin-left: 10px;
}
.popover.bottom {
  margin-top: 10px;
}
.popover.left {
  margin-left: -10px;
}
.popover-title {
  margin: 0;
  padding: 8px 14px;
  font-size: 14px;
  background-color: #f7f7f7;
  border-bottom: 1px solid #ebebeb;
  border-radius: 5px 5px 0 0;
}
.popover-content {
  padding: 9px 14px;
}
.popover > .arrow,
.popover > .arrow:after {
  position: absolute;
  display: block;
  width: 0;
  height: 0;
  border-color: transparent;
  border-style: solid;
}
.popover > .arrow {
  border-width: 11px;
}
.popover > .arrow:after {
  border-width: 10px;
  content: "";
}
.popover.top > .arrow {
  left: 50%;
  margin-left: -11px;
  border-bottom-width: 0;
  border-top-color: #999;
  border-top-color: rgba(0, 0, 0, 0.25);
  bottom: -11px;
}
.popover.top > .arrow:after {
  content: " ";
  bottom: 1px;
  margin-left: -10px;
  border-bottom-width: 0;
  border-top-color: #fff;
}
.popover.right > .arrow {
  top: 50%;
  left: -11px;
  margin-top: -11px;
  border-left-width: 0;
  border-right-color: #999;
  border-right-color: rgba(0, 0, 0, 0.25);
}
.popover.right > .arrow:after {
  content: " ";
  left: 1px;
  bottom: -10px;
  border-left-width: 0;
  border-right-color: #fff;
}
.popover.bottom > .arrow {
  left: 50%;
  margin-left: -11px;
  border-top-width: 0;
  border-bottom-color: #999;
  border-bottom-color: rgba(0, 0, 0, 0.25);
  top: -11px;
}
.popover.bottom > .arrow:after {
  content: " ";
  top: 1px;
  margin-left: -10px;
  border-top-width: 0;
  border-bottom-color: #fff;
}
.popover.left > .arrow {
  top: 50%;
  right: -11px;
  margin-top: -11px;
  border-right-width: 0;
  border-left-color: #999;
  border-left-color: rgba(0, 0, 0, 0.25);
}
.popover.left > .arrow:after {
  content: " ";
  right: 1px;
  border-right-width: 0;
  border-left-color: #fff;
  bottom: -10px;
}
.clearfix:before,
.clearfix:after {
  content: " ";
  display: table;
}
.clearfix:after {
  clear: both;
}
.center-block {
  display: block;
  margin-left: auto;
  margin-right: auto;
}
.pull-right {
  float: right !important;
}
.pull-left {
  float: left !important;
}
.hide {
  display: none !important;
}
.show {
  display: block !important;
}
.invisible {
  visibility: hidden;
}
.text-hide {
  font: 0/0 a;
  color: transparent;
  text-shadow: none;
  background-color: transparent;
  border: 0;
}
.hidden {
  display: none !important;
}
.affix {
  position: fixed;
}
@-ms-viewport {
  width: device-width;
}
.visible-xs {
  display: none !important;
}
.visible-sm {
  display: none !important;
}
.visible-md {
  display: none !important;
}
.visible-lg {
  display: none !important;
}
.visible-xs-block,
.visible-xs-inline,
.visible-xs-inline-block,
.visible-sm-block,
.visible-sm-inline,
.visible-sm-inline-block,
.visible-md-block,
.visible-md-inline,
.visible-md-inline-block,
.visible-lg-block,
.visible-lg-inline,
.visible-lg-inline-block {
  display: none !important;
}
@media (max-width: 767px) {
  .visible-xs {
    display: block !important;
  }
  table.visible-xs {
    display: table !important;
  }
  tr.visible-xs {
    display: table-row !important;
  }
  th.visible-xs,
  td.visible-xs {
    display: table-cell !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-block {
    display: block !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-inline {
    display: inline !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm {
    display: block !important;
  }
  table.visible-sm {
    display: table !important;
  }
  tr.visible-sm {
    display: table-row !important;
  }
  th.visible-sm,
  td.visible-sm {
    display: table-cell !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-block {
    display: block !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-inline {
    display: inline !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md {
    display: block !important;
  }
  table.visible-md {
    display: table !important;
  }
  tr.visible-md {
    display: table-row !important;
  }
  th.visible-md,
  td.visible-md {
    display: table-cell !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-block {
    display: block !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-inline {
    display: inline !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg {
    display: block !important;
  }
  table.visible-lg {
    display: table !important;
  }
  tr.visible-lg {
    display: table-row !important;
  }
  th.visible-lg,
  td.visible-lg {
    display: table-cell !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-block {
    display: block !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-inline {
    display: inline !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-inline-block {
    display: inline-block !important;
  }
}
@media (max-width: 767px) {
  .hidden-xs {
    display: none !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .hidden-sm {
    display: none !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .hidden-md {
    display: none !important;
  }
}
@media (min-width: 1200px) {
  .hidden-lg {
    display: none !important;
  }
}
.visible-print {
  display: none !important;
}
@media print {
  .visible-print {
    display: block !important;
  }
  table.visible-print {
    display: table !important;
  }
  tr.visible-print {
    display: table-row !important;
  }
  th.visible-print,
  td.visible-print {
    display: table-cell !important;
  }
}
.visible-print-block {
  display: none !important;
}
@media print {
  .visible-print-block {
    display: block !important;
  }
}
.visible-print-inline {
  display: none !important;
}
@media print {
  .visible-print-inline {
    display: inline !important;
  }
}
.visible-print-inline-block {
  display: none !important;
}
@media print {
  .visible-print-inline-block {
    display: inline-block !important;
  }
}
@media print {
  .hidden-print {
    display: none !important;
  }
}
.flag-icon-background,
.flag-icon {
  background-size: contain;
  background-position: 50%;
  background-repeat: no-repeat;
}
.flag-icon {
  position: relative;
  display: inline-block;
  width: 1.33333em;
  line-height: 1em;
}
.flag-icon:before {
  content: "\A0";
}
.flag-icon.flag-icon-squared {
  width: 1em;
}
.flag-icon-us {
  background-image: url(flags/us.svg);
}
.flag-icon-us.flag-icon-squared {
  background-image: url(flags/us.svg);
}
.flag-icon-th {
  background-image: url(flags/th.svg);
}
.flag-icon-th.flag-icon-squared {
  background-image: url(flags/th.svg);
}
.flag-icon-nl {
  background-image: url(flags/nl.svg);
}
.flag-icon-nl.flag-icon-squared {
  background-image: url(flags/nl.svg);
}
.flag-icon-cn {
  background-image: url(flags/cn.svg);
}
.flag-icon-cn.flag-icon-squared {
  background-image: url(flags/cn.svg);
}
.flag-icon-tw {
  background-image: url(flags/tw.svg);
}
.flag-icon-tw.flag-icon-squared {
  background-image: url(flags/tw.svg);
}
.flag-icon-pl {
  background-image: url(flags/pl.svg);
}
.flag-icon-pl.flag-icon-squared {
  background-image: url(flags/pl.svg);
}
.flag-icon-fr {
  background-image: url(flags/fr.svg);
}
.flag-icon-fr.flag-icon-squared {
  background-image: url(flags/fr.svg);
}
.flag-icon-de {
  background-image: url(flags/de.svg);
}
.flag-icon-de.flag-icon-squared {
  background-image: url(flags/de.svg);
}
.flag-icon-es {
  background-image: url(flags/es.svg);
}
.flag-icon-es.flag-icon-squared {
  background-image: url(flags/es.svg);
}
.flag-icon-ru {
  background-image: url(flags/ru.svg);
}
.flag-icon-ru.flag-icon-squared {
  background-image: url(flags/ru.svg);
}
.flag-icon-it {
  background-image: url(flags/it.svg);
}
.flag-icon-it.flag-icon-squared {
  background-image: url(flags/it.svg);
}
.flag-icon-tr {
  background-image: url(flags/tr.svg);
}
.flag-icon-tr.flag-icon-squared {
  background-image: url(flags/tr.svg);
}
.flag-icon-cz {
  background-image: url(flags/cz.svg);
}
.flag-icon-cz.flag-icon-squared {
  background-image: url(flags/cz.svg);
}
.flag-icon-ir {
  background-image: url(flags/ir.svg);
}
.flag-icon-ir.flag-icon-squared {
  background-image: url(flags/ir.svg);
}
.flag-icon-id {
  background-image: url(flags/id.svg);
}
.flag-icon-id.flag-icon-squared {
  background-image: url(flags/id.svg);
}
.flag-icon-br {
  background-image: url(flags/br.svg);
}
.flag-icon-br.flag-icon-squared {
  background-image: url(flags/br.svg);
}
.icon {
  display: inline-block;
  width: 1em;
  height: 1em;
  stroke-width: 0;
  stroke: currentColor;
  fill: currentColor;
  vertical-align: sub;
  margin-bottom: 0.1em;
}
.icon.icon-fw {
  width: 1.28571429em;
}
.rotate-90 {
  -webkit-transform: rotate(-90deg);
  transform: rotate(-90deg);
}
body {
  font-family: "Lato", sans-serif;
  overflow-y: scroll;
  background-color: #f5f5f5;
  padding-bottom: 5em;
}
input[type="checkbox"],
input[type="radio"] {
  vertical-align: middle;
  position: relative;
}
.pagination ul > li:not(.disabled) {
  cursor: pointer;
}
.pagination ul > li.active > a {
  color: #fff;
  background-color: #428bca;
}
.label-active,
.badge-active,
.progress-active .bar {
  background-color: #62c462;
}
.progress-success .bar {
  background-color: #468847 !important;
}
.alerts {
  position: fixed;
  right: 6px;
  z-index: 900;
  width: 40%;
}
.alert {
  float: right;
  clear: right;
  margin-bottom: 5px;
  margin-top: 5px;
}
.modal {
  position: absolute;
}
#global-graph {
  width: 100%;
}
@media (min-width: 767px) and (max-width: 992px) {
  #global-graph {
    width: 80%;
  }
}
#download-filter {
  margin: 0;
  height: auto;
}
#filters label {
  display: inline-block;
  white-space: nowrap;
}
.nav-header {
  display: block;
  padding: 3px 0;
  font-size: 11px;
  font-weight: bold;
  line-height: 20px;
  color: #999;
  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
  text-transform: uppercase;
}
.main-navbar {
  -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1);
  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1);
  background-color: #00897b;
  border-color: #00897b;
}
.main-navbar .navbar-brand {
  color: #fff;
}
.main-navbar .nav > li > a {
  color: #fff;
  -webkit-transition: background-color 0.3s ease-in-out;
  transition: background-color 0.3s ease-in-out;
}
.main-navbar .navbar-toggle .icon-bar {
  background-color: #fff;
}
.main-navbar .nav .open > a,
.main-navbar .nav .open > a:hover,
.main-navbar .nav .open > a:focus,
.main-navbar .nav > li > a:focus,
.main-navbar .nav > li > a:hover {
  background-color: rgba(0, 0, 0, 0.2);
}
.sidebar-nav {
  margin-bottom: 30px;
  background-color: #fff;
  padding: 10px 20px 20px;
  border-radius: 2px;
  -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14),
    0 2px 1px -1px rgba(0, 0, 0, 0.12);
  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14),
    0 2px 1px -1px rgba(0, 0, 0, 0.12);
}
.filter-input-group {
  position: relative;
  margin-bottom: 30px;
}
.filter-input-group > .clear-button {
  position: absolute;
  right: 25px;
  top: 6px;
  cursor: pointer;
}
.download .label {
  -webkit-box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
  -webkit-transition: all 2s;
  transition: all 2s;
}
.download .title {
  font-size: 1.2em;
  padding: 5px 0;
}
.download .progress {
  background-color: #fff;
  -webkit-box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
  width: 100%;
  margin: 0;
  padding: 0;
}
.download .progress-bar {
  -webkit-box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
}
.download-name {
  font-weight: bold;
  font-size: small;
  word-wrap: break-word;
}
.active-download,
.waiting-download,
.stopped-download,
.download {
  cursor: pointer;
  width: 100%;
  padding: 4px 5px;
  background-color: #fff;
  margin-bottom: 20px;
  -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14),
    0 2px 1px -1px rgba(0, 0, 0, 0.12);
  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14),
    0 2px 1px -1px rgba(0, 0, 0, 0.12);
}
@media (max-width: 767px) {
  .active-download,
  .waiting-download,
  .stopped-download,
  .download {
    table-layout: fixed;
  }
}
.download-graph {
  margin: 0.5em 30px 0.5em 0;
}
@media (min-width: 1200px) {
  .download-graph {
    width: 50%;
  }
}
@media (min-width: 767px) and (max-width: 1200px) {
  .download-graph {
    width: 60%;
  }
}
@media (max-width: 767px) {
  .download-graph {
    width: 100%;
  }
}
.large-graph {
  width: 66%;
}
.stats {
  margin: 0 auto;
  padding: 0;
}
.stats li {
  display: inline-block;
  margin-bottom: 2px;
  padding: 0.75ex;
  min-width: 20ex;
  text-align: center;
}
.download-item {
  margin: 0;
  padding: 0.5ex 6px 0.5ex;
}
.download-controls .btn-group {
  float: right;
}
.download-controls > .btn-group {
  margin: 5px 5px 5px 0;
}
.download-controls .btn-group .btn {
  height: 100%;
}
.download-controls .btn-group .btn span {
  font-size: 14px;
  color: gray;
}
.download-detail h4 {
  margin-left: 10px;
}
.download-files {
  margin: 0;
}
.download-files li {
  display: inline-block;
  padding: 0.8ex;
  max-width: 100%;
  margin: 0 6px 6px 0;
  overflow: hidden;
  text-overflow: ellipsis;
}
.download-files a {
  color: #fff;
}
.download-empty {
  padding: 40px;
  background-color: #fff;
  border-radius: 2px;
  -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14),
    0 2px 1px -1px rgba(0, 0, 0, 0.12);
  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14),
    0 2px 1px -1px rgba(0, 0, 0, 0.12);
}
.modal-body textarea {
  width: 100%;
}
.modal-advanced-title {
  font-weight: bold;
  margin-bottom: 0;
  background-color: #f5f5f5;
  border: 1px solid rgba(0, 0, 0, 0.05);
  border-bottom: 0;
  border-radius: 4px 4px 0 0;
  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
  cursor: pointer;
  padding: 5px 15px;
}
.modal-advanced-options {
  margin-top: 0;
  margin-bottom: 2px;
  background-color: #f5f5f5;
  border: 1px solid rgba(0, 0, 0, 0.05);
  border-top: 0;
  border-radius: 0 0 4px 4px;
  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
}
.modal-form-input-verylarge {
  width: 95%;
}
.modal-form-input-number {
  width: 80px;
}
.selectFiles div .control-label {
  font-weight: normal;
  margin-left: 30px;
}
.selectFiles div .controls {
  margin-left: 30px;
}
.selectFiles div.recursivedir {
  width: 100%;
}


================================================
FILE: docs/app.js
================================================
!(function(e) {
  function t(t) {
    for (var a, r, s = t[0], l = t[1], c = t[2], u = 0, p = []; u < s.length; u++)
      (r = s[u]), o[r] && p.push(o[r][0]), (o[r] = 0);
    for (a in l) Object.prototype.hasOwnProperty.call(l, a) && (e[a] = l[a]);
    for (d && d(t); p.length; ) p.shift()();
    return i.push.apply(i, c || []), n();
  }
  function n() {
    for (var e, t = 0; t < i.length; t++) {
      for (var n = i[t], a = !0, s = 1; s < n.length; s++) {
        var l = n[s];
        0 !== o[l] && (a = !1);
      }
      a && (i.splice(t--, 1), (e = r((r.s = n[0]))));
    }
    return e;
  }
  var a = {},
    o = { 0: 0 },
    i = [];
  function r(t) {
    if (a[t]) return a[t].exports;
    var n = (a[t] = { i: t, l: !1, exports: {} });
    return e[t].call(n.exports, n, n.exports, r), (n.l = !0), n.exports;
  }
  (r.m = e),
    (r.c = a),
    (r.d = function(e, t, n) {
      r.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: n });
    }),
    (r.r = function(e) {
      "undefined" != typeof Symbol &&
        Symbol.toStringTag &&
        Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }),
        Object.defineProperty(e, "__esModule", { value: !0 });
    }),
    (r.t = function(e, t) {
      if ((1 & t && (e = r(e)), 8 & t)) return e;
      if (4 & t && "object" == typeof e && e && e.__esModule) return e;
      var n = Object.create(null);
      if (
        (r.r(n),
        Object.defineProperty(n, "default", { enumerable: !0, value: e }),
        2 & t && "string" != typeof e)
      )
        for (var a in e)
          r.d(
            n,
            a,
            function(t) {
              return e[t];
            }.bind(null, a)
          );
      return n;
    }),
    (r.n = function(e) {
      var t =
        e && e.__esModule
          ? function() {
              return e.default;
            }
          : function() {
              return e;
            };
      return r.d(t, "a", t), t;
    }),
    (r.o = function(e, t) {
      return Object.prototype.hasOwnProperty.call(e, t);
    }),
    (r.p = "");
  var s = (window.webpackJsonp = window.webpackJsonp || []),
    l = s.push.bind(s);
  (s.push = t), (s = s.slice());
  for (var c = 0; c < s.length; c++) t(s[c]);
  var d = l;
  i.push([29, 1]), n();
})([
  ,
  ,
  function(e, t, n) {
    "use strict";
    var a = n(0),
      o = n.n(a);
    t.a = o.a.module("webui.services.alerts", ["webui.services.deps"]).factory("$alerts", [
      "$_",
      function(e) {
        var t = [];
        return {
          addAlert: function() {
            var n = Array.prototype.slice.call(arguments, 0);
            setTimeout(function() {
              e.each(t, function(e) {
                e.apply({}, n);
              });
            }, 0);
          },
          addAlerter: function(e) {
            t.push(e);
          },
          log: function(e) {
            this.addAlert(e, "info");
          }
        };
      }
    ]).name;
  },
  function(e, t, n) {
    "use strict";
    var a = n(0),
      o = n.n(a);
    t.a = o.a.module("webui.services.base64", []).factory("$base64", [
      function() {
        var e = {},
          t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
          n = {
            indexOf: function(e) {
              return e.charCodeAt(0);
            },
            charAt: String.fromCharCode
          };
        function a(e, t, n, a, o, i) {
          var r,
            s,
            l,
            c = 0,
            d = "",
            u = 1,
            p = 1,
            h = (e = String(e)).length;
          for (r = 0; r < h || (!t && p > 1); r += 1) {
            if (((c *= o), (u *= o), r < h)) {
              if ((s = n.indexOf(e.charAt(r))) <= -1 || s >= o) throw new RangeError();
              (p *= o), (c += s);
            }
            for (; u >= i; )
              (u /= i), p > 1 && ((l = c), (c %= u), (d += a.charAt((l - c) / u)), (p /= i));
          }
          return d;
        }
        return (
          (e.btoa = function(e) {
            return (e = a(e, !1, n, t, 256, 64)) + "====".slice(e.length % 4 || 4);
          }),
          (e.atob = function(e) {
            var o;
            for (o = (e = String(e).split("=")).length - 1; o >= 0; o -= 1) {
              if (e[o].length % 4 == 1) throw new RangeError();
              e[o] = a(e[o], !0, t, n, 64, 256);
            }
            return e.join("");
          }),
          e
        );
      }
    ]).name;
  },
  function(e, t, n) {
    "use strict";
    var a = n(0),
      o = n.n(a);
    t.a = o.a
      .module("webui.services.configuration", [])
      .constant("$name", "Aria2 WebUI")
      .constant(
        "$titlePattern",
        "active: {active} - waiting: {waiting} - stopped: {stopped} — {name}"
      )
      .constant("$pageSize", 11)
      .constant("$authconf", {
        host: location.protocol.startsWith("http") ? location.hostname : "localhost",
        path: "/jsonrpc",
        port: 6800,
        encrypt: !1,
        auth: {},
        directURL: ""
      })
      .constant("$enable", {
        torrent: !0,
        metalink: !0,
        sidebar: { show: !0, stats: !0, filters: !0, starredProps: !0 }
      })
      .constant("$starredProps", [
        "dir",
        "conf-path",
        "auto-file-renaming",
        "max-connection-per-server"
      ])
      .constant("$downloadProps", [
        "header",
        "http-user",
        "http-passwd",
        "pause",
        "dir",
        "max-connection-per-server"
      ])
      .constant("$globalTimeout", 1e3).name;
  },
  function(e, t, n) {
    "use strict";
    var a = n(0),
      o = n.n(a),
      i = n(1),
      r = n.n(i),
      s = n(6),
      l = n.n(s);
    t.a = o.a
      .module("webui.services.deps", [])
      .value("$", r.a)
      .value("$_", l.a)
      .value("$json", JSON).name;
  },
  ,
  function(e, t, n) {
    "use strict";
    var a = n(0),
      o = n.n(a);
    t.a = o.a.module("webui.services.errors", []).value("$getErrorStatus", function(e) {
      switch ((e -= 1)) {
        case 0:
          return "download was unsuccessful";
        case 1:
          return "unknown error occurred";
        case 2:
          return "time out occurred";
        case 3:
          return "resource was not found";
        case 4:
          return 'aria2 saw the specified number of "resource not found" error. See --max-file-not-found option';
        case 5:
          return "download aborted because download speed was too slow. See --lowest-speed-limit option";
        case 6:
          return "there were unfinished downloads";
        case 7:
          return "remote server did not support resume when resume was required to complete download";
        case 8:
          return "not enough disk space available";
        case 9:
          return "piece length was different from one in .aria2 control";
        case 10:
          return "downloading same file at that moment";
        case 11:
          return "downloading same info hash torrent at that moment";
        case 12:
          return "file already existed";
        case 13:
          return "renaming file failed";
        case 14:
          return "could not open existing file";
        case 15:
          return "could not create new file or truncate existing file";
        case 16:
          return "file I/O error occurred";
        case 17:
          return "could not create directory";
        case 18:
          return "name resolution failed";
        case 19:
          return "could not parse Metalink document";
        case 20:
          return "FTP command failed";
        case 21:
          return "HTTP response header was bad or unexpected";
        case 22:
          return "too many redirects occurred";
        case 23:
          return "HTTP authorization failed";
        case 24:
          return "could not parse bencoded file";
        case 25:
          return ' ".torrent" file was corrupted or missing information ';
        case 26:
          return "Magnet URI was bad";
        case 27:
          return "bad/unrecognized option was given or unexpected option argument was given";
        case 28:
          return "remote server was unable to handle the request due to a temporary overloading or maintenance";
        case 29:
          return "could not parse JSON-RPC request";
      }
    }).name;
  },
  function(e, t, n) {
    "use strict";
    var a = n(0),
      o = n.n(a);
    t.a = o.a
      .module("webui.services.rpc", [
        "webui.services.rpc.syscall",
        "webui.services.configuration",
        "webui.services.alerts",
        "webui.services.utils"
      ])
      .factory("$rpc", [
        "$syscall",
        "$globalTimeout",
        "$alerts",
        "$utils",
        "$rootScope",
        "$location",
        "$authconf",
        "$filter",
        function(e, t, n, a, i, r, s, l) {
          var c,
            d = [],
            u = [s],
            p = {},
            h = null,
            f = !1,
            m = a.getCookie("aria2conf");
          m && u.unshift(m),
            r.search().host &&
              (u.unshift(r.search()),
              (u[0].auth = { token: u[0].token, user: u[0].username, pass: u[0].password })),
            -1 != ["http", "https"].indexOf(r.protocol()) &&
              "localhost" != r.host() &&
              u.push(
                { host: r.host(), path: "/jsonrpc", port: 6800, encrypt: !1 },
                {
                  host: r.host(),
                  port: r.port(),
                  path: "/jsonrpc",
                  encrypt: "https" == r.protocol()
                },
                { host: r.host(), port: r.port(), path: s.path, encrypt: "https" == r.protocol() }
              );
          var g = !0,
            v = function() {
              clearTimeout(h), (h = null);
              var o = (d = _.filter(d, function(e) {
                return !!e && 2 !== e.once;
              })).slice();
              if (o.length) {
                if ("initializing" == e.state)
                  return (
                    console.log("Syscall is initializing, waiting"), void (h = setTimeout(v, t))
                  );
                if (g && u.length)
                  return (
                    (g = !1),
                    (p = u[0]),
                    (c = p && p.auth && p.auth.token ? p.auth.token : null),
                    e.init(p),
                    void (h = setTimeout(v, t))
                  );
                var r = _.map(o, function(e) {
                  var t = e.params;
                  return (
                    c && (t = ["token:" + c].concat(t || [])),
                    { methodName: e.name, params: t && t.length ? t : void 0 }
                  );
                });
                e.invoke({
                  name: "system.multicall",
                  params: [r],
                  success: function(e) {
                    if (
                      _.some(e.result, function(e) {
                        return e.code && "Unauthorized" === e.message;
                      })
                    )
                      return (
                        (g = !0),
                        n.addAlert(
                          "<strong>" +
                            l("translate")("Oh Snap!") +
                            "</strong> " +
                            l("translate")(
                              "Authentication failed while connecting to Aria2 RPC server. Will retry in 10 secs. You might want to confirm your authentication details by going to Settings > Connection Settings",
                              "error"
                            )
                        ),
                        void (h = setTimeout(v, t))
                      );
                    u.length &&
                      (c
                        ? n.addAlert(
                            l("translate")(
                              "Successfully connected to Aria2 through its remote RPC …"
                            ),
                            "success"
                          )
                        : n.addAlert(
                            l("translate")(
                              "Successfully connected to Aria2 through remote RPC, however the connection is still insecure. For complete security try adding an authorization secret token while starting Aria2 (through the flag --rpc-secret)"
                            )
                          ),
                      (u = [])),
                      a.setCookie("aria2conf", p);
                    var r = [];
                    _.each(e.result, function(e, t) {
                      var a = o[t];
                      a &&
                        (e.code && (console.error(a, e), n.addAlert(e.message, "error")),
                        r.push({ cb: a.cb, data: e }),
                        a.once && (a.once = 2));
                    }),
                      _.each(r, function(e) {
                        e.cb(e.data);
                      }),
                      i.$digest(),
                      f ? ((f = !1), (h = setTimeout(v, 0))) : (h = setTimeout(v, t));
                  },
                  error: function() {
                    g = !0;
                    var e = u.indexOf(p);
                    -1 != e && u.splice(e, 1),
                      u.length
                        ? (n.log(
                            l("translate")(
                              "The last connection attempt was unsuccessful. Trying another configuration"
                            )
                          ),
                          (h = setTimeout(v, 0)))
                        : (n.addAlert(
                            "<strong>" +
                              l("translate")("Oh Snap!") +
                              "</strong> " +
                              l("translate")(
                                "Could not connect to the aria2 RPC server. Will retry in 10 secs. You might want to check the connection settings by going to Settings > Connection Settings"
                              ),
                            "error"
                          ),
                          (h = setTimeout(v, t)));
                  }
                });
              } else h = setTimeout(v, t);
            };
          return (
            (h = setTimeout(v, t)),
            {
              configure: function(e) {
                n.addAlert(
                  l("translate")(
                    "Trying to connect to aria2 using the new connection configuration"
                  ),
                  "info"
                ),
                  (u = e instanceof Array ? e : [e]),
                  h && (clearTimeout(h), (h = setTimeout(v, 0)));
              },
              getConfiguration: function() {
                return p;
              },
              getDirectURL: function() {
                return p.directURL;
              },
              once: function(e, t, n, a) {
                (n = n || o.a.noop),
                  (t = t || []),
                  d.push({ once: !0, name: "aria2." + e, params: t, cb: n }),
                  a || this.forceUpdate();
              },
              subscribe: function(e, t, n, a) {
                n = n || o.a.noop;
                var i = { once: !1, name: "aria2." + e, params: (t = t || []), cb: n };
                return d.push(i), a || this.forceUpdate(), i;
              },
              unsubscribe: function(e) {
                var t = d.indexOf(e);
                d[t] = null;
              },
              forceUpdate: function() {
                h ? (clearTimeout(h), (h = setTimeout(v, 0))) : (f = !0);
              }
            }
          );
        }
      ]).name;
  },
  function(e, t, n) {
    "use strict";
    var a = n(0),
      o = n.n(a);
    t.a = o.a
      .module("webui.services.rpc.helpers", [
        "webui.services.deps",
        "webui.services.rpc",
        "webui.services.alerts"
      ])
      .factory("$rpchelpers", [
        "$_",
        "$rpc",
        "$alerts",
        function(e, t, n) {
          var a = { version: "", enabledFeatures: [] };
          return (
            t.once("getVersion", [], function(e) {
              a = e[0];
            }),
            {
              isFeatureEnabled: function(e) {
                return -1 != a.enabledFeatures.indexOf(e);
              },
              getAria2Version: function() {
                return a.version;
              },
              addUris: function(n, a, o) {
                e.each(n, function(n) {
                  var i = [],
                    r = e.cloneDeep(a);
                  e.each(n, function(e) {
                    if (e.startsWith("--")) {
                      var t = e.split(/--|=(.*)/);
                      t.length > 2 && (r[t[2]] = t[3] || "true");
                    } else i.push(e);
                  }),
                    t.once("addUri", [i, r], o, !0);
                }),
                  t.forceUpdate();
              },
              addTorrents: function(n, a, o) {
                e.each(n, function(e) {
                  t.once("addTorrent", [e, [], a], o, !0);
                }),
                  t.forceUpdate();
              },
              addMetalinks: function(n, a, o) {
                e.each(n, function(e) {
                  t.once("addMetalink", [e, a], o, !0);
                }),
                  t.forceUpdate();
              }
            }
          );
        }
      ]).name;
  },
  function(e, t, n) {
    "use strict";
    var a = n(0),
      o = n.n(a);
    t.a = o.a
      .module("webui.services.rpc.jsoncall", ["webui.services.deps", "webui.services.base64"])
      .factory("$jsoncall", [
        "$",
        "$json",
        "$base64",
        function(e, t, n) {
          return {
            init: function(e) {
              (this.avgTimeout = 2e3), (this.serverConf = e);
            },
            ariaRequest: function(n, a, o, i, r) {
              var s = new Date(),
                l = this;
              e.post({
                url: n,
                timeout: this.avgTimeout,
                contentType: "application/json",
                data: t.stringify({ jsonrpc: 2, id: "webui", method: a, params: o }),
                success: function(e) {
                  return (l.avgTimeout = 2e3 + 3 * (new Date() - s)), i(e);
                },
                error: r
              });
            },
            invoke: function(t) {
              var n = this,
                a = n.serverConf.encrypt ? "https" : "http";
              n.ariaRequest(
                a +
                  "://" +
                  n.serverConf.host +
                  ":" +
                  n.serverConf.port +
                  (n.serverConf.path || "/jsonrpc"),
                t.name,
                t.params,
                t.success,
                function() {
                  if (!n.serverConf.auth || !n.serverConf.auth.user)
                    return console.log("jsonrpc disconnect!!!"), t.error();
                  var o =
                      a +
                      "://" +
                      n.serverConf.auth.user +
                      ":" +
                      n.serverConf.auth.pass +
                      "@" +
                      n.serverConf.host +
                      ":" +
                      n.serverConf.port +
                      (n.serverConf.path || "/jsonrpc"),
                    i = e("<img/>").attr("src", o);
                  e("body").append(i),
                    i.remove(),
                    setTimeout(function() {
                      n.ariaRequest(o, t.name, t.params, t.success, function() {
                        return console.log("jsonrpc disconnect!!!"), t.error();
                      });
                    }, n.avgTimeout);
                }
              );
            }
          };
        }
      ]).name;
  },
  function(e, t, n) {
    "use strict";
    var a = n(0),
      o = n.n(a);
    t.a = o.a
      .module("webui.services.rpc.sockcall", [
        "webui.services.deps",
        "webui.services.utils",
        "webui.services.base64",
        "webui.services.alerts"
      ])
      .factory("$sockcall", [
        "$_",
        "$json",
        "$name",
        "$utils",
        "$alerts",
        function(e, t, n, a, i) {
          var r = {
            initialized: !1,
            handles: [],
            sock: null,
            conf: null,
            scheme: "ws",
            onerror: function(t) {
              e.each(r.handles, function(e) {
                e.error();
              }),
                (r.handles = []),
                (r.initialized = !1),
                r.onready && (r.onready(), (r.onready = null));
            },
            onclose: function(e) {
              r.handles && r.handles.length && r.onerror("Connection reset while calling aria2"),
                (r.initialized = !1),
                r.onready && (r.onready(), (r.onready = null));
            },
            onopen: function() {
              console.log("websocket initialized!!!"),
                (r.initialized = !0),
                r.onready && (r.onready(), (r.onready = null));
            },
            onmessage: function(e) {
              for (var n = t.parse(e.data), a = r.handles.length - 1; a >= 0; a--)
                if (r.handles[a].id === n.id)
                  return r.handles[a].success(n), void r.handles.splice(a, 1);
            },
            invoke: function(e) {
              var n = {
                jsonrpc: 2,
                id: a.uuid(),
                method: e.name,
                params: e.params && e.params.length ? e.params : void 0
              };
              n.params && !n.params.length && (n.params = void 0),
                r.handles.push({
                  success: e.success || o.a.noop,
                  error: e.error || o.a.noop,
                  id: n.id
                }),
                r.sock.send(t.stringify(n));
            },
            init: function(e, t) {
              if (
                ((r.initialized = !1),
                r.onready && (r.onready(), (r.onready = null)),
                "undefined" == typeof WebSocket)
              )
                return (
                  i.addAlert("Web sockets are not supported! Falling back to JSONP.", "info"),
                  void t()
                );
              (r.conf = e || r.conf),
                (r.scheme = r.conf.encrypt ? "wss" : "ws"),
                r.sock &&
                  ((r.sock.onopen = r.sock.onmessage = r.sock.onerror = r.sock.onclose = null),
                  r.onerror({ message: "Changing the websocket aria2 server details" }));
              try {
                var n = r.scheme + "://" + e.host + ":" + e.port + (e.path || "/jsonrpc");
                r.conf.auth &&
                  r.conf.auth.user &&
                  r.conf.auth.pass &&
                  (n =
                    r.scheme +
                    "://" +
                    r.conf.auth.user +
                    ":" +
                    r.conf.auth.pass +
                    "@" +
                    r.conf.host +
                    ":" +
                    r.conf.port +
                    (e.path || "/jsonrpc")),
                  (r.sock = new WebSocket(n)),
                  (r.sock.onopen = r.onopen),
                  (r.sock.onclose = r.onclose),
                  (r.sock.onerror = r.onerror),
                  (r.sock.onmessage = r.onmessage),
                  (r.onready = t);
              } catch (e) {
                console.log("not using websocket for aria2 rpc due to: ", e),
                  i.addAlert("Web sockets not working due to " + e.message, "info"),
                  t();
              }
            }
          };
          return r;
        }
      ]).name;
  },
  function(e, t, n) {
    "use strict";
    var a = n(0),
      o = n.n(a);
    t.a = o.a
      .module("webui.services.rpc.syscall", [
        "webui.services.rpc.jsoncall",
        "webui.services.rpc.sockcall",
        "webui.services.utils",
        "webui.services.alerts"
      ])
      .factory("$syscall", [
        "$log",
        "$jsoncall",
        "$sockcall",
        "$alerts",
        function(e, t, n, a) {
          return {
            state: "none",
            init: function(e) {
              console.log("Syscall is initializing to", e),
                (this.state = "initializing"),
                t.init(e);
              var a = this;
              n.init(e, function() {
                console.log("Syscall is ready"), (a.state = "ready");
              });
            },
            invoke: function(e) {
              return (
                (e.success = e.success || o.a.noop),
                (e.error = e.error || o.a.noop),
                n.initialized ? n.invoke(e) : t.invoke(e)
              );
            }
          };
        }
      ]).name;
  },
  function(e, t, n) {
    "use strict";
    var a = n(0),
      o = n.n(a);
    t.a = o.a
      .module("webui.services.settings", [])
      .value("$fileSettings", {
        "all-proxy": {
          val: "",
          desc:
            'Use this proxy server for all   protocols. To erase previously defined proxy, use "". You can override this setting and specify a proxy server for a particular protocol using http-proxy, https-proxy and ftp-proxy options. This affects all URIs. The format of PROXY is [http://][USER:PASSWORD@]HOST[:PORT].'
        },
        "all-proxy-passwd": { val: "", desc: "Set password for all-proxy option." },
        "all-proxy-user": { val: "", desc: "Set user for all-proxy option." },
        "allow-overwrite": {
          val: !1,
          options: ["true", "false"],
          desc:
            "Restart download from scratch if the corresponding control file doesn't exist. See also auto-file-renaming option. Default: false"
        },
        "allow-piece-length-change": {
          val: !1,
          options: ["true", "false"],
          desc:
            "If false is given, aria2 aborts download when a piece length is different from one in a control file. If true is given, you can proceed but some download progress will be lost. Default: false"
        },
        "always-resume": {
          val: !0,
          options: ["true", "false"],
          desc:
            "Always resume download. If true is given, aria2 always tries to resume download and if resume is not possible, aborts download. If false is given, when all given URIs do not support resume or aria2 encounters N URIs which does not support resume (N is the value specified using --max-resume-failure-tries option), aria2 downloads file from scratch. See --max-resume-failure-tries option. Default: true"
        },
        "async-dns": {
          val: !0,
          options: ["true", "false"],
          desc: "Enable asynchronous DNS. Default: true"
        },
        "auto-file-renaming": {
          val: !0,
          options: ["true", "false"],
          desc:
            "Rename file name if the same file already exists. This option works only in HTTP(S)/FTP download. The new file name has a dot and a number(1..9999) appended. Default: true"
        },
        "bt-detach-seed-only": {
          desc:
            "Exclude seed only downloads when counting concurrent active downloads (See -j option). This means that if -j3 is given and this option is turned on and 3 downloads are active and one of those enters seed mode, then it is excluded from active download count (thus it becomes 2), and the next download waiting in queue gets started. But be aware that seeding item is still recognized as active download in RPC method. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "bt-enable-hook-after-hash-check": {
          desc:
            "Allow hook command invocation after hash check (see -V option) in BitTorrent download. By default, when hash check succeeds, the command given by --on-bt-download-complete is executed. To disable this action, give false to this option. Default: true",
          val: !0,
          options: ["true", "false"]
        },
        "bt-enable-lpd": {
          desc:
            "Enable Local Peer Discovery. If a private flag is set in a torrent, aria2 doesn't use this feature for that download even if true is given. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "bt-exclude-tracker": {
          val: "",
          desc:
            "Comma separated list of BitTorrent tracker's announce URI to remove. You can use special value * which matches all URIs, thus removes all announce URIs. When specifying * in shell command-line, don't forget to escape or quote it. See also --bt-tracker option."
        },
        "bt-external-ip": {
          val: "",
          desc:
            "Specify the external IP address to report to a BitTorrent tracker. Although this function is named external, it can accept any kind of IP addresses. IPADDRESS must be a numeric IP address."
        },
        "bt-force-encryption": {
          desc:
            "Requires BitTorrent message payload encryption with arc4. This is a shorthand of --bt-require-crypto --bt-min-crypto-level=arc4. This option does not change the option value of those options. If true is given, deny legacy BitTorrent handshake and only use Obfuscation handshake and always encrypt message payload. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "bt-hash-check-seed": {
          desc:
            "If true is given, after hash check using --check-integrity option and file is complete, continue to seed file. If you want to check file and download it only when it is damaged or incomplete, set this option to false. This option has effect only on BitTorrent download. Default: true",
          val: !0,
          options: ["true", "false"]
        },
        "bt-max-open-files": {
          val: 100,
          desc: "Specify maximum number of files to open in each BitTorrent download. Default: 100"
        },
        "bt-max-peers": {
          val: 55,
          desc:
            "Specify the maximum number of peers per torrent. 0 means unlimited. See also bt-request-peer-speed-limit option. Default: 55"
        },
        "bt-metadata-only": {
          desc:
            "Download metadata only. The file(s) described in metadata will not be downloaded. This option has effect only when BitTorrent Magnet URI is used. See also --bt-save-metadata option. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "bt-min-crypto-level": {
          desc:
            "Set minimum level of encryption method. If several encryption methods are provided by a peer, aria2 chooses the lowest one which satisfies the given level. Default: plain",
          val: "plain",
          options: ["plain", "arc4"]
        },
        "bt-prioritize-piece": {
          val: "",
          desc:
            "Try to download first and last pieces of each file first. This is useful for previewing files. The argument can contain 2 keywords: head and tail. To include both keywords, they must be separated by comma. These keywords can take one parameter, SIZE. For example, if head=<SIZE> is specified, pieces in the range of first SIZE bytes of each file get higher priority. tail=<SIZE> means the range of last SIZE bytes of each file. SIZE can include K or M (1K = 1024, 1M = 1024K). If SIZE is omitted, SIZE=1M is used."
        },
        "bt-request-peer-speed-limit": {
          val: "50K",
          desc:
            "If the whole download speed of every torrent is lower than SPEED, aria2 temporarily increases the number of peers to try for more download speed. Configuring this option with your preferred download speed can increase your download speed in some cases. You can append K or M (1K = 1024, 1M = 1024K). Default: 50K"
        },
        "bt-require-crypto": {
          desc:
            "If true is given, aria2 doesn't accept and establish connection with legacy BitTorrent handshake(19BitTorrent protocol). Thus aria2 always uses Obfuscation handshake. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "bt-save-metadata": {
          desc:
            "Save metadata as .torrent file. This option has effect only when BitTorrent Magnet URI is used. The filename is hex encoded info hash with suffix .torrent. The directory to be saved is the same directory where download file is saved. If the same file already exists, metadata is not saved. See also --bt-metadata-only option. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "bt-seed-unverified": {
          desc: "Seed previously downloaded files without verifying piece hashes. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "bt-stop-timeout": {
          val: 0,
          desc:
            "Stop BitTorrent download if download speed is 0 in consecutive SEC seconds. If 0 is given, this feature is disabled. Default: 0"
        },
        "bt-tracker": {
          val: "",
          desc:
            "Comma separated list of additional BitTorrent tracker's announce URI. These URIs are not affected by --bt-exclude-tracker option because they are added after URIs in --bt-exclude-tracker option are removed."
        },
        "bt-tracker-connect-timeout": {
          val: 60,
          desc:
            "Set the connect timeout in seconds to establish connection to tracker. After the connection is established, this option makes no effect and --bt-tracker-timeout option is used instead. Default: 60"
        },
        "bt-tracker-interval": {
          val: 0,
          desc:
            "Set the interval in seconds between tracker requests. This completely overrides interval value and aria2 just uses this value and ignores the min interval and interval value in the response of tracker. If 0 is set, aria2 determines interval based on the response of tracker and the download progress. Default: 0"
        },
        "bt-tracker-timeout": { val: 60, desc: "Set timeout in seconds. Default: 60" },
        "bt-remove-unselected-file": {
          desc:
            "Removes the unselected files when download is completed in BitTorrent. To select files, use --select-file option. If it is not used, all files are assumed to be selected. Please use this option with care because it will actually remove files from your disk. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "check-certificate": {
          desc:
            "Verify the peer using certificates specified in --ca-certificate option. Default: true",
          val: !0,
          options: ["true", "false"]
        },
        "check-integrity": {
          desc:
            "Check file integrity by validating piece hashes or a hash of entire file. This option has effect only in BitTorrent, Metalink downloads with checksums or HTTP(S)/FTP downloads with --checksum option. If piece hashes are provided, this option can detect damaged portions of a file and re-download them. If a hash of entire file is provided, hash check is only done when file has been already download. This is determined by file length. If hash check fails, file is re-downloaded from scratch. If both piece hashes and a hash of entire file are provided, only piece hashes are used. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "conditional-get": {
          desc:
            "Download file only when the local file is older than remote file. This function only works with HTTP(S) downloads only. It does not work if file size is specified in Metalink. It also ignores Content-Disposition header. If a control file exists, this option will be ignored. This function uses If-Modified-Since header to get only newer file conditionally. When getting modification time of local file, it uses user supplied filename(see --out option) or filename part in URI if --out is not specified. To overwrite existing file, --allow-overwrite is required. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "connect-timeout": {
          val: 60,
          desc:
            "Set the connect timeout in seconds to establish connection to HTTP/FTP/proxy server. After the connection is established, this option makes no effect and --timeout option is used instead. Default: 60"
        },
        continue: {
          desc:
            "Continue downloading a partially downloaded file. Use this option to resume a download started by a web browser or another program which downloads files sequentially from the beginning. Currently this option is only applicable to HTTP(S)/FTP downloads.",
          val: !0,
          options: ["true", "false"]
        },
        daemon: {
          desc:
            "Run as daemon. The current working directory will be changed to / and standard input, standard output and standard error will be redirected to /dev/null. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "deferred-input": {
          desc:
            "If true is given, aria2 does not read all URIs and options from file specified by --input-file option at startup, but it reads one by one when it needs later. This may reduce memory usage if input file contains a lot of URIs to download. If false is given, aria2 reads all URIs and options at startup. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        dir: { val: "", desc: "The directory to store the downloaded file." },
        "disable-ipv6": {
          desc:
            "Disable IPv6. This is useful if you have to use broken DNS and want to avoid terribly slow AAAA record lookup. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "dry-run": {
          desc:
            "If true is given, aria2 just checks whether the remote file is available and doesn't download data. This option has effect on HTTP/FTP download. BitTorrent downloads are canceled if true is specified. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "enable-async-dns6": {
          desc:
            "Enable IPv6 name resolution in asynchronous DNS resolver. This option will be ignored when --async-dns=false. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "enable-color": {
          desc: "Enable color output for a terminal. Default: true",
          val: !0,
          options: ["true", "false"]
        },
        "enable-dht": {
          desc:
            "Enable IPv4 DHT functionality. It also enables UDP tracker support. If a private flag is set in a torrent, aria2 doesn’t use DHT for that download even if true is given. Default: true",
          val: !0,
          options: ["true", "false"]
        },
        "enable-dht6": {
          desc:
            "Enable IPv6 DHT functionality. If a private flag is set in a torrent, aria2 doesn’t use DHT for that download even if true is given. Use --dht-listen-port option to specify port number to listen on. See also --dht-listen-addr6 option.",
          val: !1,
          options: ["true", "false"]
        },
        "enable-http-keep-alive": {
          desc: "Enable HTTP/1.1 persistent connection. Default: true",
          val: !0,
          options: ["true", "false"]
        },
        "enable-http-pipelining": {
          desc: "Enable HTTP/1.1 pipelining. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "enable-peer-exchange": {
          desc:
            "Enable Peer Exchange extension. If a private flag is set in a torrent, this feature is disabled for that download even if true is given. Default: true",
          val: !0,
          options: ["true", "false"]
        },
        "enable-mmap": {
          desc:
            "Map files into memory. This option may not work if the file space is not pre-allocated. See --file-allocation. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "enable-rpc": {
          desc:
            "Enable JSON-RPC/XML-RPC server. It is strongly recommended to set secret authorization token using --rpc-secret option. See also --rpc-listen-port option. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "file-allocation": {
          desc:
            "Specify file allocation method. none doesn't pre-allocate file space. prealloc pre-allocates file space before download begins. This may take some time depending on the size of the file. If you are using newer file systems such as ext4 (with extents support), btrfs, xfs or NTFS(MinGW build only), falloc is your best choice. It allocates large(few GiB) files almost instantly. Don't use falloc with legacy file systems such as ext3 and FAT32 because it takes almost same time as prealloc and it blocks aria2 entirely until allocation finishes. falloc may not be available if your system doesn't have posix_fallocate(3) function. Possible Values: none, prealloc, falloc Default: prealloc",
          val: void 0,
          options: ["none", "prealloc", "falloc", "trunc"]
        },
        "follow-metalink": {
          desc:
            "If true or mem is specified, when a file whose suffix is .meta4 or .metalink or content type of application/metalink4+xml or application/metalink+xml is downloaded, aria2 parses it as a metalink file and downloads files mentioned in it. If mem is specified, a metalink file is not written to the disk, but is just kept in memory. If false is specified, the action mentioned above is not taken. Default: true",
          val: !0,
          options: ["true", "false"]
        },
        "follow-torrent": {
          desc:
            "If true or mem is specified, when a file whose suffix is .torrent or content type is application/x-bittorrent is downloaded, aria2 parses it as a torrent file and downloads files mentioned in it. If mem is specified, a torrent file is not written to the disk, but is just kept in memory. If false is specified, the action mentioned above is not taken. Default: true",
          val: !0,
          options: ["true", "false"]
        },
        "force-save": {
          desc:
            "Save download with --save-session option even if the download is completed or removed. This option also saves control file in that situations. This may be useful to save BitTorrent seeding which is recognized as completed state. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "ftp-passwd": {
          val: "ARIA2USER@",
          desc:
            "Set FTP password. This affects all URIs. If user name is embedded but password is missing in URI, aria2 tries to resolve password using .netrc. If password is found in .netrc, then use it as password. If not, use the password specified in this option. Default: ARIA2USER@"
        },
        "ftp-pasv": {
          desc:
            "Use the passive mode in FTP. If false is given, the active mode will be used. Default: true",
          val: !0,
          options: ["true", "false"]
        },
        "ftp-proxy": {
          val: "",
          desc:
            'Use this proxy server for FTP. To erase previously defined proxy, use "". See also --all-proxy option. This affects all URIs. The format of PROXY is [http://][USER:PASSWORD@]HOST[:PORT].'
        },
        "ftp-proxy-passwd": { val: "", desc: "Set password for --ftp-proxy option." },
        "ftp-proxy-user": { val: "", desc: "Set user for --ftp-proxy option." },
        "ftp-reuse-connection": {
          desc: "Reuse connection in FTP. Default: true.",
          val: !0,
          options: ["true", "false"]
        },
        "ftp-type": {
          desc: "Set FTP transfer type. TYPE is either binary or ascii. Default: binary",
          val: "binary",
          options: ["binary", "ascii"]
        },
        "ftp-user": {
          val: "anonymous",
          desc: "Set FTP user. This affects all URIs. Default: anonymous"
        },
        header: { val: "", desc: "Append HEADER to HTTP request header.", multiline: !0 },
        "http-accept-gzip": {
          desc:
            "Send Accept: deflate, gzip request header and inflate response if remote server responds with Content-Encoding: gzip or Content-Encoding: deflate. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "http-auth-challenge": {
          desc:
            "Send HTTP authorization header only when it is requested by the server. If false is set, then authorization header is always sent to the server. There is an exception: if username and password are embedded in URI, authorization header is always sent to the server regardless of this option. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "http-no-cache": {
          desc:
            "Send Cache-Control: no-cache and Pragma: no-cache header to avoid cached content. If false is given, these headers are not sent and you can add Cache-Control header with a directive you like using --header option. Default: true",
          val: !0,
          options: ["true", "false"]
        },
        "http-user": { val: "", desc: "Set HTTP username." },
        "http-passwd": { val: "", desc: "Set HTTP password." },
        "http-proxy": {
          val: "",
          desc:
            'Use this proxy server for HTTP. To erase previously defined proxy, use "". See also --all-proxy option. This affects all URIs. The format of PROXY is [http://][USER:PASSWORD@]HOST[:PORT].'
        },
        "http-proxy-passwd": { val: "", desc: "Set password for --http-proxy option." },
        "http-proxy-user": { val: "", desc: "Set user for --http-proxy option." },
        "human-readable": {
          desc:
            "Print sizes and speed in human readable format (e.g., 1.2Ki, 3.4Mi) in the console readout. Default: true",
          val: !0,
          options: ["true", "false"]
        },
        "index-out": {
          val: void 0,
          desc:
            "Set file path for file with index=INDEX. You can find the file index using the --show-files option. PATH is a relative path to the path specified in --dir option. You can use this option multiple times. Using this option, you can specify the output filenames of BitTorrent downloads."
        },
        "lowest-speed-limit": {
          val: "0",
          desc:
            "Close connection if download speed is lower than or equal to this value(bytes per sec). 0 means aria2 does not have a lowest speed limit. You can append K or M (1K = 1024, 1M = 1024K). This option does not affect BitTorrent downloads. Default: 0"
        },
        "max-connection-per-server": {
          val: 1,
          desc: "The maximum number of connections to one server for each download. Default: 1"
        },
        "max-download-limit": {
          val: "0",
          desc:
            "Set max download speed per each download in bytes/sec. 0 means unrestricted. You can append K or M (1K = 1024, 1M = 1024K). To limit the overall download speed, use --max-overall-download-limit option. Default: 0"
        },
        "max-file-not-found": {
          val: 0,
          desc:
            'If aria2 receives "file not found" status from the remote HTTP/FTP servers NUM times without getting a single byte, then force the download to fail. Specify 0 to disable this option. This options is effective only when using HTTP/FTP servers. Default: 0'
        },
        "max-resume-failure-tries": {
          val: 0,
          desc:
            "When used with --always-resume=false, aria2 downloads file from scratch when aria2 detects N number of URIs that does not support resume. If N is 0, aria2 downloads file from scratch when all given URIs do not support resume. See --always-resume option. Default: 0"
        },
        "max-tries": {
          val: 0,
          desc: "Set number of tries. 0 means unlimited. See also --retry-wait. Default: 5"
        },
        "max-upload-limit": {
          val: "0",
          desc:
            "Set max upload speed per each torrent in bytes/sec. 0 means unrestricted. You can append K or M (1K = 1024, 1M = 1024K). To limit the overall upload speed, use --max-overall-upload-limit option. Default: 0"
        },
        "metalink-enable-unique-protocol": {
          desc:
            "If true is given and several protocols are available for a mirror in a metalink file, aria2 uses one of them. Use --metalink-preferred-protocol option to specify the preference of protocol. Default: true",
          val: !0,
          options: ["true", "false"]
        },
        "metalink-language": { val: "", desc: "The language of the file to download." },
        "metalink-location": {
          val: "",
          desc:
            "The location of the preferred server. A comma-delimited list of locations is acceptable, for example, jp,us."
        },
        "metalink-os": { val: "", desc: "The operating system of the file to download." },
        "metalink-version": { val: "", desc: "The version of the file to download." },
        "min-split-size": {
          val: "20M",
          desc:
            "aria2 does not split less than 2*SIZE byte range. For example, let's consider downloading 20MiB file. If SIZE is 10M, aria2 can split file into 2 range [0-10MiB) and [10MiB-20MiB) and download it using 2 sources(if --split >= 2, of course). If SIZE is 15M, since 2*15M > 20MiB, aria2 does not split file and download it using 1 source. You can append K or M (1K = 1024, 1M = 1024K). Possible Values: 1M -1024M Default: 20M"
        },
        "no-conf": {
          desc: "Disable loading aria2.conf file.",
          val: !1,
          options: ["true", "false"]
        },
        "no-file-allocation-limit": {
          val: "5M",
          desc:
            "No file allocation is made for files whose size is smaller than SIZE. You can append K or M (1K = 1024, 1M = 1024K). Default: 5M"
        },
        "no-netrc": {
          desc:
            "Disables netrc support. netrc support is enabled by default.Note netrc file is only read at the startup if --no-netrc is false. So if --no-netrc is true at the startup, no netrc is available throughout the session. You cannot get netrc enabled even if you change this setting.",
          val: !0,
          options: ["true", "false"]
        },
        "no-proxy": {
          val: "",
          desc:
            "Specify comma separated hostnames, domains and network address with or without CIDR block where proxy should not be used."
        },
        out: {
          val: "",
          desc:
            "The file name of the downloaded file. When --force-sequential option is used, this option is ignored."
        },
        "parameterized-uri": {
          desc:
            "Enable parameterized URI support. You can specify set of parts: http://{sv1,sv2,sv3}/foo.iso. Also you can specify numeric sequences with step counter: http://host/image[000-100:2].img. A step counter can be omitted. If all URIs do not point to the same file, such as the second example above, -Z option is required. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "pause-metadata": {
          desc:
            "Pause downloads created as a result of metadata download. There are 3 types of metadata downloads in aria2: (1) downloading .torrent file. (2) downloading torrent metadata using magnet link. (3) downloading metalink file. These metadata downloads will generate downloads using their metadata. This option pauses these subsequent downloads. This option is effective only when --enable-rpc=true is given. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "proxy-method": {
          desc:
            "Set the method to use in proxy request. METHOD is either get or tunnel. HTTPS downloads always use tunnel regardless of this option. Default: get",
          val: "get",
          options: ["get", "tunnel"]
        },
        quiet: {
          desc: "Make aria2 quiet (no console output). Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "realtime-chunk-checksum": {
          desc:
            "Validate chunk of data by calculating checksum while downloading a file if chunk checksums are provided. Default: true",
          val: !0,
          options: ["true", "false"]
        },
        referer: { val: "", desc: "Set Referer. This affects all URIs." },
        "remote-time": {
          desc:
            "Retrieve timestamp of the remote file from the remote HTTP/FTP server and if it is available, apply it to the local file. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "remove-control-file": {
          desc:
            "Remove control file before download. Using with --allow-overwrite=true, download always starts from scratch. This will be useful for users behind proxy server which disables resume.",
          val: !1,
          options: ["true", "false"]
        },
        "reuse-uri": {
          desc: "Reuse already used URIs if no unused URIs are left. Default: true",
          val: !0,
          options: ["true", "false"]
        },
        "seed-ratio": {
          val: 0,
          desc:
            "Specify share ratio. Seed completed torrents until share ratio reaches RATIO. You are strongly encouraged to specify equals or more than 1.0 here. Specify 0.0 if you intend to do seeding regardless of share ratio. If --seed-time option is specified along with this option, seeding ends when at least one of the conditions is satisfied. Default: 1.0"
        },
        "seed-time": {
          val: 0,
          desc:
            "Specify seeding time in minutes. Also see the --seed-ratio option. Note Specifying --seed-time=0 disables seeding after download completed."
        },
        "select-file": {
          val: "",
          desc:
            "Set file to download by specifying its index. You can find the file index using the --show-files option. Multiple indexes can be specified by using ,, for example: 3,6. You can also use - to specify a range: 1-5. , and - can be used together: 1-5,8,9. When used with the -M option, index may vary depending on the query ."
        },
        split: {
          val: 5,
          desc:
            "Download a file using N connections. If more than N URIs are given, first N URIs are used and remaining URIs are used for backup. If less than N URIs are given, those URIs are used more than once so that N connections total are made simultaneously. The number of connections to the same host is restricted by --max-connection-per-server option. See also --min-split-size option. Default: 5"
        },
        timeout: { val: 60, desc: "Set timeout in seconds. Default: 60" },
        "use-head": {
          desc: "Use HEAD method for the first request to the HTTP server. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "user-agent": {
          val: "aria2/$VERSION",
          desc:
            "Set user agent for HTTP(S) downloads. Default: aria2/$VERSION, $VERSION is replaced by package version."
        },
        "retry-wait": {
          val: 0,
          desc:
            "Set the seconds to wait between retries. With SEC > 0, aria2 will retry download when the HTTP server returns 503 response. Default: 0."
        },
        "metalink-base-uri": {
          val: "",
          desc:
            "Specify base URI to resolve relative URI in metalink:url and metalink:metaurl element in a metalink file stored in local disk. If URI points to a directory, URI must end with /."
        },
        pause: {
          desc:
            "Pause download after added. This option is effective only when --enable-rpc=true is given. Default: false",
          val: "false",
          options: ["true", "false"]
        },
        "rpc-allow-origin-all": {
          desc:
            "Add Access-Control-Allow-Origin header field with value * to the RPC response. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "rpc-listen-all": {
          desc:
            "Listen incoming JSON-RPC/XML-RPC requests on all network interfaces. If false is given, listen only on local loopback interface. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        "rpc-secure": {
          desc:
            "RPC transport will be encrypted by SSL/TLS. The RPC clients must use https scheme to access the server. For WebSocket client, use wss scheme. Use --rpc-certificate and --rpc-private-key options to specify the server certificate and private key.",
          val: !1,
          options: ["true", "false"]
        },
        "stream-piece-selector": {
          desc:
            "Specify piece selection algorithm used in HTTP/FTP download. Piece means fixed length segment which is downloaded in parallel in segmented download. If default is given, aria2 selects piece so that it reduces the number of establishing connection. This is reasonable default behaviour because establishing connection is an expensive operation. If inorder is given, aria2 selects piece which has minimum index. Index=0 means first of the file. This will be useful to view movie while downloading it. --enable-http-pipelining option may be useful to reduce reconnection overhead. Please note that aria2 honors --min-split-size option, so it will be necessary to specify a reasonable value to --min-split-size option. If geom is given, at the beginning aria2 selects piece which has minimum index like inorder, but it exponentially increasingly keeps space from previously selected piece. This will reduce the number of establishing connection and at the same time it will download the beginning part of the file first. This will be useful to view movie while downloading it. Default: default",
          val: "default",
          options: ["default", "inorder", "geom"]
        },
        "show-console-readout": {
          desc: "Show console readout. Default: true",
          val: !0,
          options: ["true", "false"]
        },
        "show-files": {
          desc:
            "Print file listing of “.torrent”, “.meta4” and “.metalink” file and exit. In case of “.torrent” file, additional information (infohash, piece length, etc) is also printed.",
          val: !1,
          options: ["true", "false"]
        },
        "truncate-console-readout": {
          desc: "Truncate console readout to fit in a single line. Default: true",
          val: !0,
          options: ["true", "false"]
        },
        "hash-check-only": {
          desc:
            "If true is given, after hash check using --check-integrity option, abort download whether or not download is complete. Default: false",
          val: !1,
          options: ["true", "false"]
        },
        checksum: {
          val: void 0,
          desc:
            "Set checksum. TYPE is hash type. The supported hash type is listed in Hash Algorithms in aria2c -v. DIGEST is hex digest. For example, setting sha-1 digest looks like this: sha-1=0192ba11326fe2298c8cb4de616f4d4140213838 This option applies only to HTTP(S)/FTP downloads."
        },
        "piece-length": {
          val: "1M",
          desc:
            "Set a piece length for HTTP/FTP downloads. This is the boundary when aria2 splits a file. All splits occur at multiple of this length. This option will be ignored in BitTorrent downloads. It will be also ignored if Metalink file contains piece hashes. Default: 1M"
        },
        "uri-selector": {
          desc:
            "Specify URI selection algorithm. The possible values are inorder, feedback and adaptive. If inorder is given, URI is tried in the order appeared in the URI list. If feedback is given, aria2 uses download speed observed in the previous downloads and choose fastest server in the URI list. This also effectively skips dead mirrors. The observed download speed is a part of performance profile of servers mentioned in --server-stat-of and --server-stat-if options. If adaptive is given, selects one of the best mirrors for the first and reserved connections. For supplementary ones, it returns mirrors which has not been tested yet, and if each of them has already been tested, returns mirrors which has to be tested again. Otherwise, it doesn't select anymore mirrors. Like feedback, it uses a performance profile of servers. Default: feedback",
          val: "feedback",
          options: ["inorder", "feedback", "adaptive"]
        }
      })
      .value("$globalSettings", {
        "download-result": {
          desc:
            "This option changes the way Download Results is formatted. If OPT is default, print GID, status, average download speed and path/URI. If multiple files are involved, path/URI of first requested file is printed and remaining ones are omitted. If OPT is full, print GID, status, average download speed, percentage of progress and path/URI. The percentage of progress and path/URI are printed for each requested file in each row. Default: default",
          val: "default",
          options: ["default", "full"]
        },
        log: {
          val: "",
          desc:
            'The file name of the log file. If - is specified, log is written to stdout. If empty string("") is specified, log is not written to file.'
        },
        "log-level": {
          desc:
            "Set log level to output. LEVEL is either debug, info, notice, warn or error. Default: debug.",
          val: "debug",
          options: ["debug", "info", "notice", "warn", "error"]
        },
        "max-concurrent-downloads": {
          val: 5,
          desc:
            "Set maximum number of parallel downloads for every static (HTTP/FTP) URI, torrent and metalink. See also --split option. Default: 5"
        },
        "max-download-result": {
          val: 1e3,
          desc:
            "Set maximum number of download result kept in memory. The download results are completed/error/removed downloads. The download results are stored in FIFO queue and it can store at most NUM download results. When queue is full and new download result is created, oldest download result is removed from the front of the queue and new one is pushed to the back. Setting big number in this option may result high memory consumption after thousands of downloads. Specifying 0 means no download result is kept. Default: 1000"
        },
        "max-overall-download-limit": {
          val: "0",
          desc:
            "Set max overall download speed in bytes/sec. 0 means unrestricted. You can append K or M (1K = 1024, 1M = 1024K). To limit the download speed per download, use --max-download-limit option. Default: 0."
        },
        "max-overall-upload-limit": {
          val: "0",
          desc:
            "Set max overall upload speed in bytes/sec. 0 means unrestricted. You can append K or M (1K = 1024, 1M = 1024K). To limit the upload speed per torrent, use --max-upload-limit option. Default: 0."
        },
        "save-cookies": {
          val: "",
          desc:
            "Save Cookies to FILE in Mozilla/Firefox(1.x/2.x)/ Netscape format. If FILE already exists, it is overwritten. Session Cookies are also saved and their expiry values are treated as 0. Possible Values: /path/to/file."
        },
        "save-session": {
          val: "",
          desc:
            "Save error/unfinished downloads to FILE on exit. You can pass this output file to aria2c with --input-file option on restart."
        },
        "server-stat-of": {
          val: "",
          desc:
            "Specify the filename to which performance profile of the servers is saved. You can load saved data using --server-stat-if option. See Server Performance Profile subsection below for file format."
        }
      })
      .value("$globalExclude", ["checksum", "index-out", "out", "pause", "select-file"])
      .value("$waitingExclude", [
        "dry-run",
        "metalink-base-uri",
        "parameterized-uri",
        "pause",
        "piece-length"
      ])
      .value("$activeInclude", [
        "bt-max-peers",
        "bt-request-peer-speed-limit",
        "bt-remove-unselected-file",
        "max-download-limit",
        "max-upload-limit"
      ]).name;
  },
  function(e, t, n) {
    "use strict";
    var a = n(0),
      o = n.n(a);
    t.a = o.a
      .module("webui.services.settings.filters", [])
      .value("$globalsettingsexclude", ["checksum", "index-out", "out", "pause", "select-file"])
      .value("$waitingsettingsexclude", [
        "dry-run",
        "metalink-base-uri",
        "parameterized-uri",
        "pause",
        "piece-length"
      ])
      .value("$activesettingsfilter", [
        "bt-max-peers",
        "bt-request-peer-speed-limit",
        "bt-remove-unselected-file",
        "max-download-limit",
        "max-upload-limit"
      ]).name;
  },
  function(e, t, n) {
    "use strict";
    var a = n(0),
      o = n.n(a);
    t.a = o.a.module("webui.services.modals", []).factory("$modals", function() {
      var e = {};
      return {
        register: function(t, n) {
          e[t] = n;
        },
        invoke: function(t, n) {
          if (!e[t]) return !1;
          var a = Array.prototype.slice.call(arguments, 1);
          return e[t].apply({}, a);
        }
      };
    }).name;
  },
  function(e, t, n) {
    "use strict";
    var a = n(0),
      o = n.n(a);
    t.a = o.a.module("webui.services.utils", ["webui.services.configuration"]).factory("$utils", [
      "$filter",
      "$name",
      "$titlePattern",
      function(e, t, n) {
        var a = (function() {
            var e = new Uint8Array(16),
              t = function() {
                for (var t, n = 0; n < 16; n++)
                  n % 3 || (t = (4294967296 * Math.random()) | 0),
                    (e[n] = (t >>> ((3 & n) << 3)) & 255);
                return e;
              };
            return window.crypto && crypto.getRandomValues
              ? function() {
                  try {
                    return crypto.getRandomValues(e), e;
                  } catch (e) {
                    return t();
                  }
                }
              : t;
          })(),
          o = {
            fmtsize: function(e) {
              return (e = +e) <= 1024
                ? e.toFixed(0) + " B"
                : (e /= 1024) <= 1024
                  ? e.toFixed(1) + " KB"
                  : (e /= 1024) <= 1024
                    ? e.toFixed(2) + " MB"
                    : (e /= 1024).toFixed(3) + " GB";
            },
            fmtspeed: function(e) {
              return o.fmtsize(e) + "/s";
            },
            setCookie: function(e, t) {
              var n = new Date();
              n.setDate(n.getDate() + 360);
              var a = escape(JSON.stringify(t)) + "; expires=" + n.toUTCString();
              document.cookie = e + "=" + a;
            },
            getCookie: function(e) {
              for (var t = document.cookie.split(";"), n = 0; n < t.length; n++) {
                var a = t[n].substr(0, t[n].indexOf("=")).replace(/^\s+|\s+$/g, ""),
                  o = t[n].substr(t[n].indexOf("=") + 1);
                if (e == a) return JSON.parse(unescape(o));
              }
              return null;
            },
            getFileName: function(e) {
              var t = e.split(/[/\\]/);
              return t[t.length - 1];
            },
            uuid: (function() {
              for (var e = [], t = 0; t < 256; ++t) e.push((t + 256).toString(16).substr(1));
              return (
                Object.freeze(e),
                function() {
                  var t = a();
                  return (
                    (t[6] = (15 & t[6]) | 64),
                    (t[8] = (63 & t[8]) | 128),
                    e[t[0]] +
                      e[t[1]] +
                      e[t[2]] +
                      e[t[3]] +
                      "-" +
                      e[t[4]] +
                      e[t[5]] +
                      "-" +
                      e[t[6]] +
                      e[t[7]] +
                      "-" +
                      e[t[8]] +
                      e[t[9]] +
                      "-" +
                      e[t[10]] +
                      e[t[11]] +
                      e[t[12]] +
                      e[t[13]] +
                      e[t[14]] +
                      e[t[15]]
                  );
                }
              );
            })(),
            randStr: function() {
              return o.uuid();
            },
            mergeMap: function(e, t, n) {
              t || (t = []);
              for (var a = 0, o = Math.min(e.length, t.length); a < o; ++a) n(e[a], t[a]);
              for (; a < e.length; ) t.push(n(e[a++]));
              return (t.length = e.length), t;
            },
            getTitle: function(e) {
              return (
                e || (e = {}),
                n
                  .replace("{active}", e.numActive || "⌛")
                  .replace("{waiting}", e.numWaiting || "⌛")
                  .replace("{download_speed}", o.fmtspeed(e.downloadSpeed) || "⌛")
                  .replace("{upload_speed}", o.fmtspeed(e.uploadSpeed) || "⌛")
                  .replace("{stopped}", e.numStopped || "⌛")
                  .replace("{name}", t)
              );
            },
            getChunksFromHex: function(e, t) {
              var n = [],
                a = 0,
                o = parseInt(t);
              if (!e) return [];
              if (o > 1)
                for (var i = 1 / o, r = 0, s = 0; s < e.length; s++)
                  for (var l = parseInt(e[s], 16), c = 1; c <= 4; c++) {
                    var d = l & (1 << (4 - c));
                    d && 0;
                    var u = !!d;
                    if (
                      (a >= 1 && n[a - 1].show == u
                        ? (n[a - 1].ratio += i)
                        : (n.push({ ratio: i, show: u }), a++),
                      ++r == o)
                    )
                      return n;
                  }
              return n;
            }
          };
        return o;
      }
    ]).name;
  },
  function(e, t, n) {
    "use strict";
    var a = n(0),
      o = n.n(a);
    t.a = o.a
      .module("webui.filters.bytes", ["webui.services.utils"])
      .filter("blength", [
        "$filter",
        "$utils",
        function(e, t) {
          return t.fmtsize;
        }
      ])
      .filter("bspeed", [
        "$filter",
        "$utils",
        function(e, t) {
          return t.fmtspeed;
        }
      ])
      .filter("time", function() {
        function e(e) {
          return ("0" + e).substr(-2);
        }
        return function(t) {
          if (!(t = parseInt(t, 10)) || !isFinite(t)) return "∞";
          var n = t % 60;
          if (t < 60) return n + "s";
          var a = Math.floor((t % 3600) / 60);
          if (t < 3600) return e(a) + ":" + e(n);
          var o = Math.floor((t % 86400) / 3600);
          return t < 86400
            ? e(o) + ":" + e(a) + ":" + e(n)
            : Math.floor(t / 86400) + "::" + e(o) + ":" + e(a) + ":" + e(n);
        };
      }).name;
  },
  function(e, t, n) {
    "use strict";
    var a = n(0),
      o = n.n(a);
    t.a = o.a.module("webui.filters.url", ["webui.services.utils"]).filter("encodeURI", funct
Download .txt
gitextract_464do6bl/

├── .dockerignore
├── .gitignore
├── .prettierignore
├── .prettierrc
├── CONTRIBUTING.md
├── Dockerfile
├── Dockerfile.arm32v7
├── LICENSE
├── README.md
├── app.json
├── directurl.md
├── docker-compose.yml
├── docs/
│   ├── app.css
│   ├── app.js
│   ├── index.html
│   ├── precache-manifest.b562a874cfed1a8c74df9b49e6f1c2cc.js
│   ├── service-worker.js
│   └── vendor.js
├── node-server.js
├── package.json
├── postcss.config.js
├── src/
│   ├── index-template.html
│   ├── js/
│   │   ├── app.js
│   │   ├── ctrls/
│   │   │   ├── alert.js
│   │   │   ├── main.js
│   │   │   ├── modal.js
│   │   │   ├── nav.js
│   │   │   └── props.js
│   │   ├── directives/
│   │   │   ├── chunkbar.js
│   │   │   ├── dgraph.js
│   │   │   ├── fileselect.js
│   │   │   ├── fselect.js
│   │   │   └── textarea.js
│   │   ├── filters/
│   │   │   ├── bytes.js
│   │   │   └── url.js
│   │   ├── libs/
│   │   │   └── bootstrap-filestyle.js
│   │   ├── services/
│   │   │   ├── alerts.js
│   │   │   ├── base64.js
│   │   │   ├── configuration.js
│   │   │   ├── deps.js
│   │   │   ├── errors.js
│   │   │   ├── modals.js
│   │   │   ├── rpc/
│   │   │   │   ├── helpers.js
│   │   │   │   ├── jsoncall.js
│   │   │   │   ├── rpc.js
│   │   │   │   ├── sockcall.js
│   │   │   │   └── syscall.js
│   │   │   ├── settings/
│   │   │   │   ├── filters.js
│   │   │   │   └── settings.js
│   │   │   └── utils.js
│   │   └── translate/
│   │       ├── cs_CZ.js
│   │       ├── de_DE.js
│   │       ├── en_US.js
│   │       ├── es_ES.js
│   │       ├── fa_IR.js
│   │       ├── fr_FR.js
│   │       ├── id_ID.js
│   │       ├── it_IT.js
│   │       ├── nl_NL.js
│   │       ├── pl_PL.js
│   │       ├── pt_BR.js
│   │       ├── ru_RU.js
│   │       ├── template.js
│   │       ├── th_TH.js
│   │       ├── tr_TR.js
│   │       ├── zh_CN.js
│   │       └── zh_TW.js
│   └── scss/
│       ├── _bootstrap-custom.scss
│       ├── _download.scss
│       ├── _flag-icon-css-custom.scss
│       ├── _icon.scss
│       ├── _modals.scss
│       ├── _style.scss
│       └── app.scss
├── static.json
├── webpack.config.js
└── webui-aria2.spec
Download .txt
SYMBOL INDEX (632 symbols across 9 files)

FILE: docs/app.js
  function t (line 2) | function t(t) {
  function n (line 9) | function n() {
  function r (line 22) | function r(t) {
  function a (line 122) | function a(e, t, n, a, o, i) {
  function e (line 1611) | function e(e) {
  function t (line 2580) | function t() {
  function M (line 2953) | function M(e, t) {
  function o (line 3073) | function o() {
  function i (line 3081) | function i() {
  function r (line 3084) | function r() {
  function s (line 3095) | function s() {
  function i (line 3292) | function i() {
  function r (line 3295) | function r() {
  function s (line 3298) | function s(e, n) {
  function o (line 3334) | function o(t, n, o) {
  function i (line 3359) | function i(e) {
  function r (line 3364) | function r() {
  function s (line 3369) | function s() {
  function l (line 3372) | function l() {
  function n (line 3487) | function n(e, t, n) {
  function a (line 3547) | function a(e) {
  function n (line 3744) | function n(e) {
  function i (line 4062) | function i(e, t) {
  function r (line 4065) | function r(e) {
  function o (line 4200) | function o(e) {
  function h (line 4284) | function h(e) {
  function a (line 4840) | function a(t, a, i) {
  function c (line 4956) | function c() {
  function d (line 4961) | function d(e, t) {
  function u (line 4980) | function u(t, n, a) {
  function p (line 5007) | function p(e, t, n) {
  function s (line 5151) | function s(e) {
  function l (line 5156) | function l(e) {
  function r (line 5349) | function r(e, t, n) {
  function f (line 5458) | function f(e) {
  function p (line 5500) | function p() {
  function m (line 5503) | function m() {
  function g (line 5514) | function g() {
  function v (line 5517) | function v() {
  function b (line 5548) | function b() {
  function w (line 5557) | function w() {
  function y (line 5562) | function y() {
  function r (line 6199) | function r() {
  function s (line 6207) | function s() {
  function l (line 6211) | function l(e) {
  function c (line 6214) | function c(e) {
  function d (line 6217) | function d() {
  function u (line 6220) | function u(t) {
  function p (line 6228) | function p(e, t) {
  function h (line 6233) | function h(e) {
  function i (line 6430) | function i(e) {
  function m (line 6518) | function m() {
  function g (line 6525) | function g() {
  function e (line 7378) | function e(e, t, n) {
  function n (line 7497) | function n(t, n) {
  function a (line 7529) | function a(t, a, o, i) {
  function t (line 9352) | function t(e, t) {
  function n (line 9355) | function n(e, t, n, a) {
  function a (line 9440) | function a(e) {
  function o (line 9468) | function o(e, t) {

FILE: docs/vendor.js
  function w (line 67) | function w(t, e, n) {
  function x (line 73) | function x(t) {
  function S (line 84) | function S(t) {
  function ot (line 398) | function ot(t, e, r, i) {
  function at (line 448) | function at() {
  function ut (line 454) | function ut(t) {
  function st (line 457) | function st(t) {
  function ct (line 467) | function ct(t, e) {
  function lt (line 470) | function lt(t, e) {
  function ft (line 477) | function ft(t) {
  function pt (line 482) | function pt(t) {
  function ht (line 488) | function ht(t) {
  function dt (line 501) | function dt(t) {
  function vt (line 512) | function vt(t) {
  function gt (line 1097) | function gt() {}
  function mt (line 1098) | function mt(t) {
  function $t (line 1102) | function $t(t, e, n) {
  function yt (line 1135) | function yt(t) {
  function bt (line 1143) | function bt(t, e, n, r, i) {
  function wt (line 1148) | function wt(t, e, n, r, i, o) {
  function xt (line 1183) | function xt(t) {
  function O (line 1426) | function O(t, e) {
  function N (line 1430) | function N(t, e, n) {
  function R (line 1522) | function R(t, e) {
  function V (line 1623) | function V(t) {
  function q (line 1626) | function q(t) {
  function U (line 1629) | function U(t, e, n, r) {
  function a (line 1779) | function a(t, e, r, i) {
  function B (line 1895) | function B() {
  function K (line 1941) | function K(t, e) {
  function J (line 1944) | function J(t) {
  function Z (line 1950) | function Z() {
  function nt (line 2004) | function nt(t, e, n) {
  function st (line 2191) | function st(t, e, n, r) {
  function lt (line 2219) | function lt(t) {
  function ft (line 2234) | function ft(t, e) {
  function gt (line 2274) | function gt(t, e) {
  function mt (line 2286) | function mt(t, e) {
  function yt (line 2294) | function yt(t, e, n, r, i) {
  function Ct (line 2341) | function Ct() {
  function St (line 2344) | function St() {
  function Et (line 2347) | function Et() {
  function kt (line 2352) | function kt(t, e, n, r, i, o) {
  function Nt (line 2744) | function Nt(t, e) {
  function Mt (line 2752) | function Mt(t) {
  function Lt (line 2755) | function Lt(t) {
  function Dt (line 2763) | function Dt(t, e) {
  function It (line 2772) | function It(t, e) {
  function Rt (line 2778) | function Rt(t, e, n, r) {
  function Pt (line 2818) | function Pt(t, e, n) {
  function Ft (line 2982) | function Ft(t, e, n) {
  function Ht (line 3007) | function Ht(t, e) {
  function t (line 3016) | function t() {
  function e (line 3035) | function e(t) {
  function Yt (line 3073) | function Yt(t) {
  function Zt (line 3086) | function Zt(t, e, n) {
  function Xt (line 3090) | function Xt(t, e, n, r, i, o) {
  function Qt (line 3114) | function Qt(t, e, n) {
  function te (line 3130) | function te(t, e, n, r, i) {
  function oe (line 3352) | function oe() {
  function ae (line 3359) | function ae() {
  function ue (line 3367) | function ue(t, e) {
  function se (line 3374) | function se(t, e, n) {
  function ce (line 3382) | function ce(t, e, n) {
  function de (line 3786) | function de(t) {
  function ve (line 3789) | function ve(t) {
  function ge (line 3792) | function ge(t) {
  function ke (line 4158) | function ke(t, e, n, r) {
  function Pe (line 4225) | function Pe(t) {
  function Ve (line 4238) | function Ve(t, e, n, r) {
  function qe (line 4258) | function qe(t, e) {
  function S (line 4435) | function S(t, e, a, u) {
  function r (line 5055) | function r(t) {
  function i (line 5063) | function i(t) {
  function o (line 5066) | function o(t, e) {
  function _ (line 5114) | function _(t) {
  function C (line 5120) | function C(t, e, n) {
  function S (line 5140) | function S(t, e, n) {
  function E (line 5144) | function E(t) {
  function k (line 5149) | function k() {
  function A (line 5152) | function A(t, e) {
  function T (line 5155) | function T(t, e, n) {
  function O (line 5177) | function O(t) {
  function j (line 5180) | function j(t) {
  function N (line 5183) | function N(t) {
  function L (line 5192) | function L(t, e) {
  function D (line 5195) | function D() {}
  function I (line 5196) | function I(t) {
  function R (line 5199) | function R(t) {
  function P (line 5204) | function P(t) {
  function V (line 5207) | function V(t) {
  function q (line 5210) | function q(t) {
  function U (line 5213) | function U(t) {
  function F (line 5216) | function F(t) {
  function H (line 5219) | function H(t) {
  function B (line 5222) | function B(t) {
  function z (line 5225) | function z(t) {
  function W (line 5228) | function W(t) {
  function G (line 5231) | function G(t) {
  function K (line 5241) | function K(t) {
  function J (line 5244) | function J(t) {
  function Y (line 5247) | function Y(t) {
  function Z (line 5250) | function Z(t) {
  function X (line 5253) | function X(t) {
  function Q (line 5256) | function Q(t) {
  function rt (line 5267) | function rt(t) {
  function it (line 5270) | function it(t) {
  function ot (line 5273) | function ot(t, e) {
  function at (line 5276) | function at(t, e) {
  function ut (line 5280) | function ut(t, e, n) {
  function st (line 5366) | function st(t, e) {
  function ct (line 5369) | function ct(t, e) {
  function pt (line 5438) | function pt(t, e, n) {
  function ht (line 5441) | function ht(t, e) {
  function dt (line 5444) | function dt(t, e) {
  function vt (line 5456) | function vt(t, n) {
  function gt (line 5469) | function gt(t, e) {
  function mt (line 5472) | function mt(t) {
  function yt (line 5476) | function yt(t, e) {
  function bt (line 5481) | function bt(t, e) {
  function wt (line 5484) | function wt(t, e, n) {
  function xt (line 5489) | function xt(t) {
  function _t (line 5506) | function _t(t) {
  function Ct (line 5511) | function Ct(t) {
  function St (line 5527) | function St(t) {
  function Et (line 5533) | function Et(t, e) {
  function Tt (line 5570) | function Tt(t, n) {
  function Ot (line 5609) | function Ot(t, n, r) {
  function jt (line 5669) | function jt() {
  function Nt (line 5672) | function Nt(t) {
  function Lt (line 5678) | function Lt(t, e) {
  function It (line 5687) | function It(t, e, n) {
  function Rt (line 5691) | function Rt(t, e, n) {
  function Pt (line 5703) | function Pt(t, e) {
  function Vt (line 5707) | function Vt(t) {
  function qt (line 5712) | function qt() {
  function Ut (line 5715) | function Ut(t) {
  function Gt (line 5733) | function Gt(t, e) {
  function Kt (line 5742) | function Kt(t, e) {
  function ne (line 5774) | function ne(t, e) {
  function re (line 5777) | function re(t) {
  function ce (line 5792) | function ce(t) {
  function le (line 5795) | function le(t) {
  function fe (line 5799) | function fe(t, e) {
  function he (line 5837) | function he(t) {
  function de (line 5867) | function de(t) {
  function ve (line 5870) | function ve(t, e) {
  function ge (line 5874) | function ge(t) {
  function me (line 5879) | function me(t) {
  function $e (line 5886) | function $e(t, e, n, r) {
  function ye (line 5905) | function ye(t, e) {
  function be (line 5910) | function be(t, e) {
  function we (line 5920) | function we(t, e, n) {
  function xe (line 5936) | function xe(t, e) {
  function _e (line 5944) | function _e(t, e) {
  function Ce (line 5954) | function Ce(t, e) {
  function Se (line 5964) | function Se(t, e) {
  function Ee (line 5974) | function Ee(t, e) {
  function ke (line 5977) | function ke(t, e, n) {
  function Ae (line 5984) | function Ae(t) {
  function Te (line 5987) | function Te(t, e) {
  function Oe (line 5992) | function Oe(t) {
  function De (line 6037) | function De(t, e) {
  function Ie (line 6041) | function Ie(t, e, n) {
  function Re (line 6044) | function Re(t, e, n) {
  function Pe (line 6048) | function Pe() {
  function Ve (line 6063) | function Ve(t, e) {
  function t (line 6137) | function t(t, e) {
  function Ue (line 6378) | function Ue() {
  function Ye (line 6436) | function Ye(t) {
  function Ze (line 6439) | function Ze(t) {
  function Xe (line 6443) | function Xe(t, e) {
  function Qe (line 6633) | function Qe() {
  function nn (line 6738) | function nn(t, e) {
  function rn (line 6747) | function rn(t) {
  function i (line 6781) | function i(t, e, n) {
  function o (line 6791) | function o() {
  function e (line 6861) | function e(t, e, n) {
  function n (line 6939) | function n(n) {
  function o (line 6969) | function o(t) {
  function i (line 6995) | function i(i) {
  function u (line 7078) | function u() {
  function fn (line 7096) | function fn() {
  function pn (line 7224) | function pn() {
  function hn (line 7294) | function hn() {
  function gn (line 7304) | function gn(t, n) {
  function mn (line 8797) | function mn(t, e) {
  function bn (line 8806) | function bn(t) {
  function wn (line 8811) | function wn(t, e) {
  function xn (line 8821) | function xn(t) {
  function Sn (line 8833) | function Sn() {
  function En (line 8904) | function En() {
  function kn (line 8912) | function kn() {
  function An (line 8934) | function An() {
  function In (line 8963) | function In(t) {
  function Rn (line 8966) | function Rn() {
  function Pn (line 8987) | function Pn() {
  function Vn (line 9009) | function Vn(t, e) {
  function qn (line 9037) | function qn(t) {
  function Un (line 9055) | function Un(t) {
  function Fn (line 9065) | function Fn(t, e, n, r) {
  function Hn (line 9073) | function Hn(t) {
  function Bn (line 9076) | function Bn() {
  function zn (line 9363) | function zn() {
  function Wn (line 9370) | function Wn() {
  function Kn (line 9472) | function Kn() {
  function Yn (line 9606) | function Yn() {
  function Zn (line 9637) | function Zn() {
  function nr (line 9707) | function nr(t, e, n) {
  function rr (line 9732) | function rr(t, e) {
  function or (line 9739) | function or(t, e, n) {
  function ar (line 9754) | function ar(t, e) {
  function ur (line 9757) | function ur(t, e) {
  function sr (line 9760) | function sr(t) {
  function cr (line 9764) | function cr(t, e, n) {
  function lr (line 9790) | function lr(t, e, n) {
  function fr (line 9817) | function fr(t, e, n) {
  function hr (line 9892) | function hr(t) {
  function dr (line 9897) | function dr(t, e) {
  function vr (line 9902) | function vr() {
  function gr (line 10038) | function gr() {
  function yr (line 10104) | function yr(t) {
  function Cr (line 10274) | function Cr(t, e) {
  function Sr (line 10277) | function Sr(t, e) {
  function Ar (line 10580) | function Ar(t, e, n) {
  function Tr (line 10691) | function Tr(t) {
  function Or (line 10698) | function Or(t) {
  function jr (line 10701) | function jr(t) {
  function Nr (line 10710) | function Nr(t) {
  function Mr (line 10713) | function Mr(t) {
  function Lr (line 10716) | function Lr(t, e, n) {
  function Dr (line 10719) | function Dr(t) {
  function Ir (line 10722) | function Ir() {
  function Rr (line 10897) | function Rr() {
  function Pr (line 10916) | function Pr() {
  function Vr (line 10935) | function Vr(t, e, n) {
  function qr (line 11186) | function qr(t) {
  function Ur (line 11189) | function Ur(t) {
  function Fr (line 11192) | function Fr(t) {
  function Hr (line 11195) | function Hr() {
  function Br (line 11223) | function Br() {
  function zr (line 11687) | function zr() {
  function Jr (line 12496) | function Jr(t) {
  function Yr (line 12499) | function Yr(t) {
  function Zr (line 12532) | function Zr() {
  function Xr (line 12662) | function Xr() {
  function Qr (line 12717) | function Qr() {
  function ti (line 12761) | function ti() {
  function ni (line 12807) | function ni() {
  function ri (line 12857) | function ri() {
  function oi (line 12901) | function oi() {
  function ci (line 12958) | function ci(t) {
  function li (line 12976) | function li(t, e) {
  function fi (line 12979) | function fi() {
  function pi (line 12982) | function pi(t) {
  function hi (line 13013) | function hi() {
  function di (line 13016) | function di(t) {
  function vi (line 13049) | function vi() {
  function gi (line 13091) | function gi(t, e, n, r, i, o) {
  function mi (line 13124) | function mi(t) {
  function wi (line 13131) | function wi(t) {
  function xi (line 13141) | function xi(t) {
  function _i (line 13147) | function _i(t, e, n, r, i) {
  function Ci (line 13239) | function Ci(t, e, n, r) {
  function Si (line 13249) | function Si(t, e, n, r, i) {
  function Ei (line 13260) | function Ei(t, e, n) {
  function ki (line 13266) | function ki(t) {
  function Ai (line 13270) | function Ai(t) {
  function Ti (line 13280) | function Ti(t, e) {
  function Mi (line 13326) | function Mi(t) {
  function Li (line 13378) | function Li() {
  function Ri (line 13386) | function Ri() {
  function Pi (line 13404) | function Pi(t, e, n) {
  function Vi (line 13407) | function Vi(t) {
  function qi (line 13503) | function qi(t) {
  function i (line 13537) | function i(t, r, i) {
  function zi (line 13593) | function zi(t, e, n, r, i) {
  function r (line 13755) | function r(t) {
  function Ji (line 13763) | function Ji(t) {
  function Yi (line 13767) | function Yi(t) {
  function Zi (line 13814) | function Zi(t) {
  function v (line 13993) | function v(t, r) {
  function lo (line 14022) | function lo(t) {
  function fo (line 14027) | function fo(t, e, n, r, i, o) {
  function po (line 14084) | function po(t, e) {
  function ho (line 14119) | function ho(t, e, n, r) {
  function vo (line 14182) | function vo(t, e, n, r, i) {
  function go (line 14191) | function go(t) {
  function mo (line 14207) | function mo(t) {
  function $o (line 14210) | function $o(t) {
  function yo (line 14213) | function yo(t) {
  function bo (line 14225) | function bo(t, e, n) {
  function wo (line 14245) | function wo(t, e, n, r, i) {
  function t (line 14278) | function t(t, e, n) {
  function To (line 14374) | function To(t, e) {
  function Ro (line 14474) | function Ro(t, e, n, r, i, o) {
  function Ko (line 14678) | function Ko(t, e, n, r, i, o, a, u, s) {
  function o (line 14823) | function o(t, e) {
  function a (line 14826) | function a(t) {
  function o (line 14922) | function o() {
  function a (line 15041) | function a() {
  function Xo (line 15056) | function Xo(t) {
  function t (line 15099) | function t(t, e) {
  function ta (line 15120) | function ta(t, e) {
  function b (line 15200) | function b(t, e, n, r, i) {
  function w (line 15207) | function w(t) {
  function b (line 15267) | function b(t, e) {
  function w (line 15278) | function w(t) {
  function y (line 15420) | function y(t) {
  function u (line 15782) | function u() {
  function ya (line 15826) | function ya(t, e) {
  function a (line 15920) | function a() {
  function c (line 15928) | function c(t) {
  function r (line 16220) | function r(t, e, n) {
  function f (line 16282) | function f(e, n, r, i) {
  function p (line 16290) | function p(e, n, r) {
  function t (line 16563) | function t(t) {
  function e (line 16578) | function e(t, e, n, r) {
  function n (line 17354) | function n(t, e) {
  function r (line 17380) | function r(t, e, n, r, i) {
  function i (line 17541) | function i(t, e) {
  function o (line 17602) | function o(t, e, n, r) {
  function a (line 17616) | function a(t, e) {
  function u (line 17643) | function u() {
  function s (line 17666) | function s() {
  function c (line 17683) | function c(t, e) {
  function l (line 17697) | function l(t) {
  function ze (line 18177) | function ze(t, e, n) {
  function We (line 18190) | function We(t, e, n, r) {
  function Ge (line 18197) | function Ge(t, e) {
  function Ke (line 18201) | function Ke(t, e) {
  function Je (line 18205) | function Je(t, e) {
  function Ye (line 18209) | function Ye(t, e) {
  function Ze (line 18216) | function Ze(t, e) {
  function Xe (line 18219) | function Xe(t, e, n) {
  function Qe (line 18223) | function Qe(t, e) {
  function tn (line 18228) | function tn(t, e) {
  function en (line 18232) | function en(t, e, n, r) {
  function nn (line 18238) | function nn(t, e, n, r) {
  function rn (line 18243) | function rn(t, e) {
  function an (line 18248) | function an(t, e, n) {
  function un (line 18257) | function un(t, e, n, r) {
  function sn (line 18262) | function sn(t, e, n) {
  function cn (line 18272) | function cn(t, e, n, r) {
  function ln (line 18276) | function ln(t) {
  function fn (line 18279) | function fn(t, e) {
  function pn (line 18283) | function pn(t) {
  function hn (line 18288) | function hn(t) {
  function dn (line 18293) | function dn(t, e, n, r, i) {
  function vn (line 18301) | function vn(t, e) {
  function gn (line 18308) | function gn(t, e) {
  function mn (line 18312) | function mn(t) {
  function $n (line 18317) | function $n(t, e) {
  function yn (line 18322) | function yn(t, e) {
  function bn (line 18325) | function bn(t, e) {
  function wn (line 18329) | function wn(t, e) {
  function Cn (line 18526) | function Cn(t) {
  function Sn (line 18529) | function Sn(t) {
  function En (line 18532) | function En(t) {
  function kn (line 18542) | function kn(t, e) {
  function An (line 18547) | function An(t, e) {
  function Tn (line 18554) | function Tn(t, e) {
  function On (line 18557) | function On(t) {
  function jn (line 18567) | function jn(t) {
  function Nn (line 18577) | function Nn(t) {
  function Mn (line 18586) | function Mn(t) {
  function hr (line 18677) | function hr(t) {
  function t (line 18685) | function t() {}
  function vr (line 18694) | function vr() {}
  function gr (line 18695) | function gr(t, e) {
  function mr (line 18702) | function mr(t) {
  function $r (line 18711) | function $r(t) {
  function yr (line 18719) | function yr(t) {
  function br (line 18727) | function br(t) {
  function wr (line 18735) | function wr(t) {
  function xr (line 18740) | function xr(t) {
  function _r (line 18744) | function _r(t, e) {
  function Cr (line 18762) | function Cr(t) {
  function Sr (line 18766) | function Sr(t, e) {
  function Er (line 18769) | function Er(t) {
  function kr (line 18772) | function kr(t, e, n) {
  function Ar (line 18775) | function Ar(t, e, n) {
  function Tr (line 18779) | function Tr(t, e) {
  function Or (line 18783) | function Or(t, e, n, r) {
  function jr (line 18791) | function jr(t, e) {
  function Nr (line 18794) | function Nr(t, e, n) {
  function Mr (line 18799) | function Mr(t, e) {
  function Lr (line 18804) | function Lr(t, e, n) {
  function Dr (line 18809) | function Dr(t, e, n, r, i, a) {
  function Ir (line 18921) | function Ir(t, e, n) {
  function Rr (line 18932) | function Rr(t, e, n) {
  function Pr (line 18938) | function Pr(t, e, n, r) {
  function Ur (line 19065) | function Ur(t, e) {
  function Fr (line 19074) | function Fr(t, e, n) {
  function Hr (line 19084) | function Hr(t, e) {
  function Br (line 19093) | function Br(t, e, n, r, i) {
  function Gr (line 19104) | function Gr(t, e) {
  function Kr (line 19107) | function Kr(t, e) {
  function Jr (line 19110) | function Jr(t, e) {
  function Yr (line 19115) | function Yr(t, e) {
  function Zr (line 19119) | function Zr(t, e, n) {
  function Xr (line 19123) | function Xr(t) {
  function Qr (line 19143) | function Qr(t, e) {
  function ti (line 19146) | function ti(t, e) {
  function ei (line 19149) | function ei(t, e) {
  function ni (line 19152) | function ni(t, e, r) {
  function ri (line 19185) | function ri(t, e, n) {
  function ii (line 19189) | function ii(t) {
  function oi (line 19192) | function oi(t, e, n, r, i) {
  function ai (line 19309) | function ai(t, e, n, r) {
  function ui (line 19332) | function ui(t) {
  function si (line 19342) | function si(t) {
  function ci (line 19353) | function ci(t) {
  function li (line 19359) | function li(t) {
  function fi (line 19371) | function fi(t, e) {
  function pi (line 19374) | function pi(t, e) {
  function hi (line 19384) | function hi(t) {
  function di (line 19392) | function di(t, e) {
  function vi (line 19400) | function vi(t, e, n, r, i) {
  function gi (line 19446) | function gi(t, e) {
  function mi (line 19450) | function mi(t, e, n) {
  function $i (line 19488) | function $i(t, e, n) {
  function yi (line 19496) | function yi(t, e, n, r) {
  function bi (line 19506) | function bi(t, e) {
  function wi (line 19516) | function wi(t, e) {
  function xi (line 19519) | function xi(t, e) {
  function _i (line 19527) | function _i(t, e) {
  function Ci (line 19530) | function Ci(t) {
  function Si (line 19533) | function Si(t, e) {
  function Ei (line 19537) | function Ei(t, e, n, r) {
  function Ti (line 19569) | function Ti(t) {
  function Oi (line 19572) | function Oi(t, e, r) {
  function ji (line 19582) | function ji(t, e) {
  function Ni (line 19591) | function Ni(t, e, n) {
  function Mi (line 19604) | function Mi(t, e, n, r) {
  function Li (line 19635) | function Li(t, e) {
  function Di (line 19646) | function Di(t) {
  function Ii (line 19649) | function Ii(t) {
  function Ri (line 19656) | function Ri(t, e, n) {
  function Pi (line 19679) | function Pi(t, e) {
  function Vi (line 19682) | function Vi(t, e, n, r) {
  function qi (line 19685) | function qi(t, e, n, r) {
  function Ui (line 19689) | function Ui(t, e) {
  function Fi (line 19702) | function Fi(t, e, r) {
  function Hi (line 19709) | function Hi(t, e, n) {
  function Bi (line 19716) | function Bi(t) {
  function zi (line 19719) | function zi(t) {
  function Wi (line 19722) | function Wi(t, e) {
  function Ki (line 19726) | function Ki(t, e, n) {
  function Yi (line 19735) | function Yi(t, e) {
  function Zi (line 19741) | function Zi(t) {
  function Xi (line 19745) | function Xi(t, e) {
  function Qi (line 19749) | function Qi(t, e) {
  function to (line 19778) | function to(t, e, r, i) {
  function eo (line 19796) | function eo(t, e, r, i) {
  function no (line 19815) | function no(t, e) {
  function ro (line 19821) | function ro(t, e, n, r) {
  function io (line 19831) | function io(t, e) {
  function oo (line 19838) | function oo(t) {
  function ao (line 19857) | function ao(t, e) {
  function uo (line 19869) | function uo(t) {
  function so (line 19878) | function so(t) {
  function co (line 19886) | function co(t) {
  function lo (line 19891) | function lo(t) {
  function fo (line 19917) | function fo(t) {
  function po (line 19931) | function po(t) {
  function ho (line 19961) | function ho(t, e, r, i, a, u, s, c, l, f) {
  function vo (line 19999) | function vo(t, e) {
  function go (line 20011) | function go(t, e) {
  function mo (line 20025) | function mo(t) {
  function $o (line 20038) | function $o(t, e) {
  function yo (line 20044) | function yo(t) {
  function bo (line 20058) | function bo(t) {
  function wo (line 20066) | function wo(t, e, n, r, i, a, u, s, c, l) {
  function xo (line 20073) | function xo(t) {
  function Co (line 20093) | function Co(t) {
  function So (line 20107) | function So(t, e, r, i, a, u, c, l) {
  function Eo (line 20209) | function Eo(t, e, n, r) {
  function ko (line 20212) | function ko(t, e, n, r, i, a) {
  function Ao (line 20215) | function Ao(t) {
  function To (line 20218) | function To(t, e, n, r, i, a) {
  function Oo (line 20253) | function Oo(t) {
  function jo (line 20256) | function jo(t) {
  function No (line 20259) | function No(t) {
  function Lo (line 20267) | function Lo(t) {
  function Do (line 20275) | function Do(t) {
  function Io (line 20278) | function Io() {
  function Ro (line 20282) | function Ro(t, e) {
  function Po (line 20293) | function Po(t) {
  function Vo (line 20301) | function Vo(t, e) {
  function Ho (line 20324) | function Ho(t, e, n) {
  function Bo (line 20334) | function Bo(t) {
  function zo (line 20337) | function zo(t) {
  function Wo (line 20340) | function Wo(t, e) {
  function Go (line 20350) | function Go(t, e, n) {
  function Ko (line 20358) | function Ko(t, e) {
  function Jo (line 20368) | function Jo(t) {
  function Zo (line 20401) | function Zo(t) {
  function Xo (line 20405) | function Xo(t) {
  function Qo (line 20408) | function Qo(t, e) {
  function ta (line 20413) | function ta(t, e, r) {
  function ea (line 20425) | function ea(t, e) {
  function oa (line 20435) | function oa(t, e, n) {
  function aa (line 20468) | function aa(t) {
  function ua (line 20480) | function ua(t, e) {
  function ca (line 20507) | function ca(t) {
  function la (line 20512) | function la(t) {
  function fa (line 20523) | function fa(t) {
  function va (line 20544) | function va(t, e, n) {
  function ga (line 20550) | function ga(t, e, n) {
  function ma (line 20559) | function ma(t) {
  function $a (line 20562) | function $a(t) {
  function xa (line 20584) | function xa(t) {
  function Ca (line 20589) | function Ca(t, e) {
  function Ea (line 20605) | function Ea(t) {
  function Oa (line 20619) | function Oa(t) {
  function ja (line 20631) | function ja(t, e) {
  function Pa (line 20660) | function Pa(t) {
  function Va (line 20664) | function Va(t, e) {
  function Ba (line 20690) | function Ba(t, e) {
  function za (line 20693) | function za(t, e) {
  function Ja (line 20713) | function Ja(t, e) {
  function Qa (line 20739) | function Qa(t, e, n) {
  function tu (line 20742) | function tu(t, e) {
  function ru (line 20768) | function ru(t, e, n) {
  function au (line 20836) | function au(t, e) {
  function uu (line 20848) | function uu(t) {
  function pu (line 20885) | function pu(t, e) {
  function $u (line 20907) | function $u(t) {
  function yu (line 20910) | function yu(t) {
  function xu (line 20919) | function xu(t) {
  function _u (line 20928) | function _u(t) {
  function Cu (line 20933) | function Cu(t) {
  function Su (line 20936) | function Su(t) {
  function Eu (line 20939) | function Eu(t) {
  function ku (line 20943) | function ku(t) {
  function Tu (line 20951) | function Tu(t) {
  function Ou (line 20954) | function Ou(t) {
  function Mu (line 20971) | function Mu(t) {
  function Lu (line 20974) | function Lu(t) {
  function Pu (line 20986) | function Pu(t) {
  function Vu (line 20997) | function Vu(t) {
  function qu (line 21008) | function qu(t) {
  function Uu (line 21013) | function Uu(t) {
  function Fu (line 21016) | function Fu(t) {
  function Hu (line 21028) | function Hu(t) {
  function Bu (line 21031) | function Bu(t) {
  function Xu (line 21064) | function Xu(t, e, n) {
  function Qu (line 21068) | function Qu(t, e) {
  function rs (line 21079) | function rs(t) {
  function is (line 21082) | function is(t) {
  function cs (line 21112) | function cs(t, e) {
  function ps (line 21126) | function ps(t) {
  function ds (line 21132) | function ds(t) {
  function vs (line 21135) | function vs(t) {
  function _s (line 21155) | function _s(t, e, n) {
  function Es (line 21186) | function Es(t) {
  function Ts (line 21193) | function Ts(t) {
  function Os (line 21196) | function Os(t) {
  function Ms (line 21209) | function Ms(t, e, n) {
  function Ls (line 21242) | function Ls() {}
  function Ps (line 21246) | function Ps(t) {
  function Us (line 21257) | function Us() {
  function Fs (line 21260) | function Fs() {

FILE: src/js/app.js
  function mergeTranslation (line 99) | function mergeTranslation(translation, base) {

FILE: src/js/ctrls/modal.js
  function OrganizedFolder (line 152) | function OrganizedFolder() {

FILE: src/js/directives/dgraph.js
  function update (line 105) | function update() {

FILE: src/js/directives/textarea.js
  function textareaDirective (line 1) | function textareaDirective() {

FILE: src/js/filters/bytes.js
  function pad (line 20) | function pad(f) {

FILE: src/js/services/base64.js
  function code (line 14) | function code(s, discard, alpha, beta, w1, w2) {

FILE: webpack.config.js
  constant BUILD_DIR (line 9) | const BUILD_DIR = path.join(__dirname, "docs");
  constant APP_DIR (line 10) | const APP_DIR = path.join(__dirname, "src", "js");
Condensed preview — 77 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,070K chars).
[
  {
    "path": ".dockerignore",
    "chars": 258,
    "preview": ".git\nscreenshots\nsrc\n.gitignore\n.prettierignore\n.prettierrc\nCONTRIBUTING.md\nLICENSE\nREADME.md\napp.json\ndirecturl.md\ndock"
  },
  {
    "path": ".gitignore",
    "chars": 54,
    "preview": ".DS_STORE\n.idea\n.git\ndebug.log\nstats.json\nnode_modules"
  },
  {
    "path": ".prettierignore",
    "chars": 32,
    "preview": "build/*\n**/*.min.js\n**/*.min.css"
  },
  {
    "path": ".prettierrc",
    "chars": 22,
    "preview": "{\n\t\"printWidth\": 100\n}"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 1780,
    "preview": "## Contributor's Guide\n\nFirst off, thanks for taking the time to contribute! :tada::+1:\n\nWebUI-Aria2 is an Angular JS 1."
  },
  {
    "path": "Dockerfile",
    "chars": 1383,
    "preview": "FROM debian:8\n\n# less priviledge user, the id should map the user the downloaded files belongs to\nRUN groupadd -r dummy "
  },
  {
    "path": "Dockerfile.arm32v7",
    "chars": 3106,
    "preview": "# As of 2018-06-29 https://github.com/aria2/aria2/blob/master/Dockerfile.raspberrypi, aria2 is build upon ubuntu trusty "
  },
  {
    "path": "LICENSE",
    "chars": 1060,
    "preview": "Copyright (c) 2012 Hamza Zia\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this sof"
  },
  {
    "path": "README.md",
    "chars": 4784,
    "preview": "# WebUI-Aria2\n\n![Main interface](/screenshots/overview.png?raw=true)\n\nThe aim for this project is to create the worlds b"
  },
  {
    "path": "app.json",
    "chars": 347,
    "preview": "{\n  \"name\": \"webui-aria2\",\n  \"description\":\n    \"This project is to create the worlds best and hottest interface to inte"
  },
  {
    "path": "directurl.md",
    "chars": 2428,
    "preview": "DirectURL\n=========\nConsider the following scenarios:\n\n1. aria2 is running on a computer that is not locally accessible "
  },
  {
    "path": "docker-compose.yml",
    "chars": 268,
    "preview": "aria2:\n    image: ndthuan/aria2-alpine\n    volumes:\n        - $HOME/Downloads:/downloads\n    ports:\n        - \"6800:6800"
  },
  {
    "path": "docs/app.css",
    "chars": 110676,
    "preview": "/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n  font-family: sans-serif;\n  -ms-tex"
  },
  {
    "path": "docs/app.js",
    "chars": 527037,
    "preview": "!(function(e) {\n  function t(t) {\n    for (var a, r, s = t[0], l = t[1], c = t[2], u = 0, p = []; u < s.length; u++)\n   "
  },
  {
    "path": "docs/index.html",
    "chars": 81729,
    "preview": "<!doctype html>\n<html>\n\n<!-- {{{ head -->\n<head>\n  <link rel=\"icon\" href=\"../favicon.ico\" />\n\n  <meta charset=\"utf-8\">\n "
  },
  {
    "path": "docs/precache-manifest.b562a874cfed1a8c74df9b49e6f1c2cc.js",
    "chars": 1638,
    "preview": "self.__precacheManifest = [\n  {\n    revision: \"4eb7af0db693855a4f24cb119a73110d\",\n    url: \"flags/de.svg\"\n  },\n  {\n    r"
  },
  {
    "path": "docs/service-worker.js",
    "chars": 903,
    "preview": "/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app and you s"
  },
  {
    "path": "docs/vendor.js",
    "chars": 865988,
    "preview": "(window.webpackJsonp = window.webpackJsonp || []).push([\n  [1],\n  {\n    0: function(t, e, n) {\n      n(30), (t.exports ="
  },
  {
    "path": "node-server.js",
    "chars": 1479,
    "preview": "var http = require(\"http\"),\n  url = require(\"url\"),\n  path = require(\"path\"),\n  fs = require(\"fs\");\nport = process.argv["
  },
  {
    "path": "package.json",
    "chars": 1545,
    "preview": "{\n  \"name\": \"webui-aria2\",\n  \"version\": \"1.0.0\",\n  \"description\": \"The aim for this project is to create the worlds best"
  },
  {
    "path": "postcss.config.js",
    "chars": 111,
    "preview": "module.exports = {\n  plugins: [require(\"autoprefixer\")({ browsers: [\"> 5%\", \"IE 11\", \"last 2 versions\"] })]\n};\n"
  },
  {
    "path": "src/index-template.html",
    "chars": 81582,
    "preview": "<!doctype html>\n<html>\n\n<!-- {{{ head -->\n<head>\n  <link rel=\"icon\" href=\"../favicon.ico\" />\n\n  <meta charset=\"utf-8\">\n "
  },
  {
    "path": "src/js/app.js",
    "chars": 5470,
    "preview": "// WebUI Aria2 is an angular 1.x application\n// This file imports all the required modules for the application\n\n// Vendo"
  },
  {
    "path": "src/js/ctrls/alert.js",
    "chars": 1069,
    "preview": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.ctrls.alert\", [\"webui.services.alerts\"])\n  .cont"
  },
  {
    "path": "src/js/ctrls/main.js",
    "chars": 21853,
    "preview": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.ctrls.download\", [\n    \"ui.bootstrap\",\n    \"webu"
  },
  {
    "path": "src/js/ctrls/modal.js",
    "chars": 8961,
    "preview": "import angular from \"angular\";\n\nvar parseFiles = function(files, cb) {\n  var cnt = 0;\n  var txts = [];\n  var onload = fu"
  },
  {
    "path": "src/js/ctrls/nav.js",
    "chars": 4027,
    "preview": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.ctrls.nav\", [\n    \"webui.services.configuration\""
  },
  {
    "path": "src/js/ctrls/props.js",
    "chars": 2755,
    "preview": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.ctrls.props\", [\n    \"webui.services.utils\",\n    "
  },
  {
    "path": "src/js/directives/chunkbar.js",
    "chars": 1495,
    "preview": "import angular from \"angular\";\n\nvar draw = function(canvas, chunks, fillStyle) {\n  chunks = chunks || [];\n  if (!canvas."
  },
  {
    "path": "src/js/directives/dgraph.js",
    "chars": 4703,
    "preview": "import angular from \"angular\";\n\n// graph takes dspeed and uspeed, it queries them every second and draws\n// the last 180"
  },
  {
    "path": "src/js/directives/fileselect.js",
    "chars": 7074,
    "preview": "import angular from \"angular\";\n\n// watches changes in the file upload control (input[file]) and\n// puts the files select"
  },
  {
    "path": "src/js/directives/fselect.js",
    "chars": 614,
    "preview": "import angular from \"angular\";\n\n// watches changes in the file upload control (input[file]) and\n// puts the files select"
  },
  {
    "path": "src/js/directives/textarea.js",
    "chars": 584,
    "preview": "function textareaDirective() {\n  return {\n    restrict: \"E\",\n    link: function(scope, element) {\n      element\n        "
  },
  {
    "path": "src/js/filters/bytes.js",
    "chars": 998,
    "preview": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.filters.bytes\", [\"webui.services.utils\"])\n  .fil"
  },
  {
    "path": "src/js/filters/url.js",
    "chars": 188,
    "preview": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.filters.url\", [\"webui.services.utils\"])\n  .filte"
  },
  {
    "path": "src/js/libs/bootstrap-filestyle.js",
    "chars": 11502,
    "preview": "/*\n * bootstrap-filestyle\n * doc: http://markusslima.github.io/bootstrap-filestyle/\n * github: https://github.com/markus"
  },
  {
    "path": "src/js/services/alerts.js",
    "chars": 630,
    "preview": "import angular from \"angular\";\n\nexport default angular.module(\"webui.services.alerts\", [\"webui.services.deps\"]).factory("
  },
  {
    "path": "src/js/services/base64.js",
    "chars": 1556,
    "preview": "import angular from \"angular\";\n\nexport default angular.module(\"webui.services.base64\", []).factory(\"$base64\", [\n  functi"
  },
  {
    "path": "src/js/services/configuration.js",
    "chars": 2618,
    "preview": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.services.configuration\", [])\n  .constant(\"$name\""
  },
  {
    "path": "src/js/services/deps.js",
    "chars": 205,
    "preview": "import angular from \"angular\";\nimport $ from \"jquery\";\nimport _ from \"lodash\";\n\nexport default angular\n  .module(\"webui."
  },
  {
    "path": "src/js/services/errors.js",
    "chars": 2431,
    "preview": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.services.errors\", [])\n  .value(\"$getErrorStatus\""
  },
  {
    "path": "src/js/services/modals.js",
    "chars": 601,
    "preview": "import angular from \"angular\";\n\nexport default angular.module(\"webui.services.modals\", []).factory(\"$modals\", function()"
  },
  {
    "path": "src/js/services/rpc/helpers.js",
    "chars": 2238,
    "preview": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.services.rpc.helpers\", [\n    \"webui.services.dep"
  },
  {
    "path": "src/js/services/rpc/jsoncall.js",
    "chars": 2905,
    "preview": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.services.rpc.jsoncall\", [\"webui.services.deps\", "
  },
  {
    "path": "src/js/services/rpc/rpc.js",
    "chars": 9802,
    "preview": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.services.rpc\", [\n    \"webui.services.rpc.syscall"
  },
  {
    "path": "src/js/services/rpc/sockcall.js",
    "chars": 5057,
    "preview": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.services.rpc.sockcall\", [\n    \"webui.services.de"
  },
  {
    "path": "src/js/services/rpc/syscall.js",
    "chars": 2185,
    "preview": "import angular from \"angular\";\r\n\r\nexport default angular\r\n  .module(\"webui.services.rpc.syscall\", [\r\n    \"webui.services"
  },
  {
    "path": "src/js/services/settings/filters.js",
    "chars": 521,
    "preview": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.services.settings.filters\", [])\n  .value(\"$globa"
  },
  {
    "path": "src/js/services/settings/settings.js",
    "chars": 37840,
    "preview": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.services.settings\", [])\n  .value(\"$fileSettings\""
  },
  {
    "path": "src/js/services/utils.js",
    "chars": 5849,
    "preview": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.services.utils\", [\"webui.services.configuration\""
  },
  {
    "path": "src/js/translate/cs_CZ.js",
    "chars": 8178,
    "preview": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.cs_CZ = {\n  // header\n  Search: \"Hledat\","
  },
  {
    "path": "src/js/translate/de_DE.js",
    "chars": 6929,
    "preview": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.de_DE = {\n  // header\n  Search: \"Suche\",\n"
  },
  {
    "path": "src/js/translate/en_US.js",
    "chars": 8377,
    "preview": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.en_US = {\n  // header\n  Search: \"Search\","
  },
  {
    "path": "src/js/translate/es_ES.js",
    "chars": 9048,
    "preview": "// This text is a template of translation list.\n\n// pre: ll_CC, locale name, examples: en_US, zh_CN\n// 1. Copy and renam"
  },
  {
    "path": "src/js/translate/fa_IR.js",
    "chars": 8369,
    "preview": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.fa_IR = {\n  // header\n  Search: \"جستجو\",\n"
  },
  {
    "path": "src/js/translate/fr_FR.js",
    "chars": 9226,
    "preview": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.fr_FR = {\n  // header\n  Search: \"Recherch"
  },
  {
    "path": "src/js/translate/id_ID.js",
    "chars": 8398,
    "preview": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.id_ID = {\n  // replace en_US to ll_CC, ex"
  },
  {
    "path": "src/js/translate/it_IT.js",
    "chars": 8079,
    "preview": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.it_IT = {\n  // header\n  Search: \"Cerca\",\n"
  },
  {
    "path": "src/js/translate/nl_NL.js",
    "chars": 6649,
    "preview": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.nl_NL = {\n  // header\n  Search: \"Zoeken\","
  },
  {
    "path": "src/js/translate/pl_PL.js",
    "chars": 8093,
    "preview": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.pl_PL = {\n  // header\n  Search: \"Szukaj\","
  },
  {
    "path": "src/js/translate/pt_BR.js",
    "chars": 8903,
    "preview": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.pt_BR = {\n  // replace en_US to ll_CC, ex"
  },
  {
    "path": "src/js/translate/ru_RU.js",
    "chars": 8171,
    "preview": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.ru_RU = {\n  // header\n  Search: \"Поиск\",\n"
  },
  {
    "path": "src/js/translate/template.js",
    "chars": 5734,
    "preview": "// This text is a template of translation list.\n\n// pre: ll_CC, locale name, examples: en_US, zh_CN\n// 1. Copy and renam"
  },
  {
    "path": "src/js/translate/th_TH.js",
    "chars": 4827,
    "preview": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.th_TH = {\n  // header\n  Search: \"ค้นหา\",\n"
  },
  {
    "path": "src/js/translate/tr_TR.js",
    "chars": 8017,
    "preview": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.tr_TR = {\n  // header\n  Search: \"Arama\",\n"
  },
  {
    "path": "src/js/translate/zh_CN.js",
    "chars": 6206,
    "preview": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.zh_CN = {\n  // header\n  Search: \"搜索\",\n  /"
  },
  {
    "path": "src/js/translate/zh_TW.js",
    "chars": 6210,
    "preview": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.zh_TW = {\n  // header\n  Search: \"搜尋\",\n  /"
  },
  {
    "path": "src/scss/_bootstrap-custom.scss",
    "chars": 2827,
    "preview": "// This is a customised bootstrap v3.3.7 file for webui-aria2\n// Extra components which are not being used are commented"
  },
  {
    "path": "src/scss/_download.scss",
    "chars": 2235,
    "preview": ".download .label {\n  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);\n  -webkit-transition: all 2s;\n  transition: all 2s;"
  },
  {
    "path": "src/scss/_flag-icon-css-custom.scss",
    "chars": 553,
    "preview": "$flag-icon-css-path: \"~flag-icon-css/flags\";\n\n@import \"~flag-icon-css/sass/variables\";\n@import \"~flag-icon-css/sass/flag"
  },
  {
    "path": "src/scss/_icon.scss",
    "chars": 264,
    "preview": ".icon {\n  display: inline-block;\n  width: 1em;\n  height: 1em;\n  stroke-width: 0;\n  stroke: currentColor;\n  fill: current"
  },
  {
    "path": "src/scss/_modals.scss",
    "chars": 883,
    "preview": ".modal-body textarea {\n  width: 100%;\n}\n\n.modal-advanced-title {\n  font-weight: bold;\n  margin-bottom: 0;\n  background-c"
  },
  {
    "path": "src/scss/_style.scss",
    "chars": 2154,
    "preview": "body {\n  font-family: \"Lato\", sans-serif;\n  overflow-y: scroll;\n  background-color: #f5f5f5;\n  padding-bottom: 5em;\n}\n\ni"
  },
  {
    "path": "src/scss/app.scss",
    "chars": 190,
    "preview": "@charset 'utf-8';\n\n// Vendor Styles\n@import \"bootstrap-custom\";\n@import \"flag-icon-css-custom\";\n\n// Application Styles\n@"
  },
  {
    "path": "static.json",
    "chars": 66,
    "preview": "{\n  \"root\": \"./docs\",\n  \"routes\": {\n    \"/**\": \"index.html\"\n  }\n}\n"
  },
  {
    "path": "webpack.config.js",
    "chars": 1780,
    "preview": "const path = require(\"path\");\nconst webpack = require(\"webpack\");\n\nconst MiniCssExtractPlugin = require(\"mini-css-extrac"
  },
  {
    "path": "webui-aria2.spec",
    "chars": 4549,
    "preview": "Name:           webui-aria2\nVersion:        master\nRelease:        1%{?dist}\nSummary:        Web interface for aria2\n\nLi"
  }
]

About this extraction

This page contains the full source code of the ziahamza/webui-aria2 GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 77 files (1.9 MB), approximately 482.6k tokens, and a symbol index with 632 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!