[
  {
    "path": ".dockerignore",
    "content": ".git\nscreenshots\nsrc\n.gitignore\n.prettierignore\n.prettierrc\nCONTRIBUTING.md\nLICENSE\nREADME.md\napp.json\ndirecturl.md\ndocker-compose.yml\nfavicon.ico\nnode-server.js\npackage-lock.json\npackage.json\npostcss.config.js\nstatic.json\nwebpack.config.js\nwebui-aria2.spec\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_STORE\n.idea\n.git\ndebug.log\nstats.json\nnode_modules"
  },
  {
    "path": ".prettierignore",
    "content": "build/*\n**/*.min.js\n**/*.min.css"
  },
  {
    "path": ".prettierrc",
    "content": "{\n\t\"printWidth\": 100\n}"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "## Contributor's Guide\n\nFirst off, thanks for taking the time to contribute! :tada::+1:\n\nWebUI-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.\n\n## Get Started\n\nTo 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.\n\nNext, install this package's dependencies with npm using `npm install` command.\n\nThen run `npm run dev` command to start an HTTP development server on http://localhost:8888 and to watch and compile the source files.\n\nUse `npm run build` to create a production ready build from source files.\n\n### Useful commands\n\n| Command                   | Purpose                                                                                                   |\n| ------------------------- | --------------------------------------------------------------------------------------------------------- |\n| `npm install`             | will install required dependencies                                                                        |\n| `npm run dev`             | will start an HTTP dev server on http://localhost:8888 and will watch and compile the source files        |\n| `npm run build`           | will create a production build from source files                                                          |\n| `npm run analyze`         | will open a bundle analyzer on port http://localhost:9999. Useful for visualizing contents of your bundle |\n| `npm run format --silent` | will format your code for consistency using Prettier                                                      |\n"
  },
  {
    "path": "Dockerfile",
    "content": "FROM debian:8\n\n# less priviledge user, the id should map the user the downloaded files belongs to\nRUN groupadd -r dummy && useradd -r -g dummy dummy -u 1000\n\n# webui + aria2\nRUN apt-get update \\\n\t&& apt-get install -y aria2 busybox curl \\\n\t&& rm -rf /var/lib/apt/lists/*\n\nADD ./docs /webui-aria2\n\n# gosu install latest\nRUN GITHUB_REPO=\"https://github.com/tianon/gosu\" \\\n  && LATEST=`curl -s  $GITHUB_REPO\"/releases/latest\" | grep -Eo \"[0-9].[0-9]*\"` \\\n  && curl -L $GITHUB_REPO\"/releases/download/\"$LATEST\"/gosu-amd64\" > /usr/local/bin/gosu \\\n  && chmod +x /usr/local/bin/gosu\n\n# goreman supervisor install latest\nRUN GITHUB_REPO=\"https://github.com/mattn/goreman\" \\\n  && LATEST=`curl -s  $GITHUB_REPO\"/releases/latest\" | grep -Eo \"v[0-9]*.[0-9]*.[0-9]*\"` \\\n  && curl -L $GITHUB_REPO\"/releases/download/\"$LATEST\"/goreman_\"$LATEST\"_linux_amd64.tar.gz\" > goreman.tar.gz \\\n  && tar xvf goreman.tar.gz && mv /goreman*/goreman /usr/local/bin/goreman && rm -R goreman*\n\n# goreman setup\nRUN 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\n\n# aria2 downloads directory\nVOLUME /data\n\n# aria2 RPC port, map as-is or reconfigure webui\nEXPOSE 6800/tcp\n\n# webui static content web server, map wherever is convenient\nEXPOSE 8080/tcp\n\nCMD [\"start\"]\nENTRYPOINT [\"/usr/local/bin/goreman\"]\n"
  },
  {
    "path": "Dockerfile.arm32v7",
    "content": "# 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\nFROM arm32v7/debian:8.11 AS aria2-builder\n\n# aria2 build\nRUN mkdir -p /builds && mkdir -p /builds/aria2c \\\n    && apt-get update \\\n    && export DEBIAN_FRONTEND=noninteractive \\\n    && apt-get install -y curl git \\\n    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 \\\n    && ARIA2_VERSION=\"1.34.0\" \\\n    && mkdir aria_build && cd aria_build \\\n    && curl -L https://github.com/aria2/aria2/releases/download/release-\"$ARIA2_VERSION\"/aria2-\"$ARIA2_VERSION\".tar.gz > aria2.tar.gz \\\n    && tar -xzf aria2.tar.gz \\\n    && cd aria2-$ARIA2_VERSION \\\n    && autoreconf -i \\\n    && ./configure --with-ca-bundle='/etc/ssl/certs/ca-certificates.crt' \\\n    && make \\\n    && mv src/aria2c /builds/aria2c \\\n    && cd ../.. \\\n    && rm -rf aria_build \\\n    && rm -rf /var/lib/apt/lists/*\n\n\n\nFROM arm32v7/golang:1.10.0-stretch AS go-builder\n\n# goreman build\nRUN mkdir -p /builds && mkdir -p /builds/goreman \\\n    && export GOPATH=`pwd` \\\n    && go get github.com/mattn/goreman \\\n    && go build -o /builds/goreman/goreman github.com/mattn/goreman\n\nRUN mkdir -p /builds && mkdir -p /builds/gosu \\\n    && apt-get update && apt-get install -y curl \\\n    && GITHUB_REPO=\"https://github.com/tianon/gosu\" \\\n    && LATEST=`curl -s  $GITHUB_REPO\"/releases/latest\" | grep -Eo \"[0-9].[0-9]*\"` \\\n    && curl -L $GITHUB_REPO\"/releases/download/\"$LATEST\"/gosu-armhf\" > /builds/gosu/gosu \\\n    && chmod +x /builds/gosu/gosu \\\n    && unset GITHUB_REPO && unset LATEST \\\n    && rm -rf /var/lib/apt/lists/*\n\n\n\nFROM arm32v7/httpd:2.4.33\n# 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.\n# A better approach will be to build static version of aria2.\n\n# download aria2 dependendies\nRUN apt-get update && apt-get install -y --no-install-recommends \\\n      busybox \\\n      ca-certificates \\\n      libc-ares2 \\\n      libssh2-1 \\\n      libxml2 \\\n      openssl \\\n      libsqlite3-0 \\\n      zlib1g \\\n    && rm -rf /var/lib/apt/lists/*\n\n# Grab aria2c, goreman and gosu binaries\nCOPY --from=aria2-builder /builds/aria2c/aria2c /usr/bin/\nCOPY --from=go-builder /builds/goreman/goreman /usr/local/bin/\nCOPY --from=go-builder /builds/gosu/gosu /usr/local/bin/\n\nADD ./docs /webui-aria2\n\nRUN groupadd -r aria \\\n    && useradd -m -r -g aria aria -u 1000 \\\n    && 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\n\n# aria2 downloads directory\nVOLUME /data/downloads\n\n# aria2 conf directory\nVOLUME /home/aria/.aria2\n\n# webui static content web server and aria2 RPC port\nEXPOSE 8080 6800\n\nCMD [\"start\"]\nENTRYPOINT [\"/usr/local/bin/goreman\"]\n"
  },
  {
    "path": "LICENSE",
    "content": "Copyright (c) 2012 Hamza Zia\r\n\r\nPermission 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:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\nTHE 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.\r\n"
  },
  {
    "path": "README.md",
    "content": "# WebUI-Aria2\n\n![Main interface](/screenshots/overview.png?raw=true)\n\nThe 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.\n\nVery 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:\n\n```bash\naria2c --enable-rpc --rpc-listen-all\n```\n\nIf aria2 is not installed in your local machine then head on to https://aria2.github.io/ and follow the instructions there.\n\nThen to use the WebUI-Aria2,\n\n- You can either download this repository and open index.html from `docs` folder.\n- 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.\n- Or you can also use NodeJS to create simple server by using the following command from the project folder.\n\n```bash\nnode node-server.js\n```\n\n# Tips\n\n1. 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)\n\n# Configuration\n\nRead and edit [configuration.js](src/js/services/configuration.js).\n\n## DirectURL\n\nThis 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.\n\nIf the above is not obvious, keep reading what this is about in [directurl.md](directurl.md)\n\n# Dependencies\n\nWell, you need aria2. And a web browser (if that even counts!)\n\n# Docker support\n\nThere is two Dockerfile in this project, one is a common Dockerfile, which can be use for **testing purpose**.<br>\nThe second is a **production ready** Dockerfile for arm32v7 platforms (including Raspberry Pi).\n\n### For testing purpose\n\nYou can also try or use webui-aria2 in your LAN inside a Docker sandbox.\n\nBuild the image\n\n```bash\nsudo docker build -t yourname/webui-aria2 .\n```\n\n..and run it! It will be available at: `http://localhost:9100`\n\n```bash\nsudo docker run -v /Downloads:/data -p 6800:6800 -p 9100:8080 --name=\"webui-aria2\" yourname/webui-aria2\n```\n\n`/Downloads` is the directory in the host where you want to keep the downloaded files\n\n### Production ready (ARM platform)\n\nThis image contains both aria2 and webui-aria2.\n\nBuild it (may take several hours due to the aria2 compilation process. Don't panic and grab a coffee).\n\n```\ndocker build -f Dockerfile.arm32v7 -t yourname/webui-aria2 .\n```\n\nThis command will ends up building three images:\n\n- 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.\n- The second is about building and downloading some go dependencies (goreman and gosu).\n- The second one is the acutal aria2 container, the one you must use.\n\n<br />\nPrepare the host volume:\nThis image required few file to be mounted in the container.\n```\n/home/aria/aria2/session.txt  (empty file)\n/home/aria/aria2/aria2.log    (empty file)\n/home/aria/aria2/aria2.conf   (aria2 configuration file, not webui-aria2 conf) must contains at least `enable-rpc=true` and `rpc-listen-all=true`\n/data/downloads/        (where the downloaded files goes)\n```\n\nRun it\n\n```\ndocker run --restart=always \\\n        -v /home/<USER>/data/aria2/downloads:/data/downloads \\\n        -v /home/<USER>/data/aria2/.aria2:/home/aria/.aria2 \\\n        -p 6800:6800 -p 9100:8080 \\\n        --name=\"webui-aria2\" \\\n        -d yourname/webui-aria2\n```\n\n# Contributing\n\nCheckout [contributor's guide](CONTRIBUTING.md) to know more about how to contribute to this project.\n\n# Deploy to Heroku\n\n[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy)\n\n# Support\n\nFor any support, feature request and bug report add an issue in the github project. [link](https://github.com/ziahamza/webui-aria2/issues)\n\n# License\n\nRefer to the LICENSE file (MIT License). If the more liberal license is needed then add it as an issue\n"
  },
  {
    "path": "app.json",
    "content": "{\n  \"name\": \"webui-aria2\",\n  \"description\":\n    \"This project is to create the worlds best and hottest interface to interact with aria2.\",\n  \"repository\": \"https://github.com/ziahamza/webui-aria2\",\n  \"keywords\": [\"AngularJS\", \"aria2\", \"static\"],\n  \"buildpacks\": [\n    {\n      \"url\": \"https://github.com/heroku/heroku-buildpack-static\"\n    }\n  ]\n}\n"
  },
  {
    "path": "directurl.md",
    "content": "DirectURL\n=========\nConsider the following scenarios:\n\n1. 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\n2. aria2 is running locally somewhere and setting up samba/nfs/etc is \"meh\"\n\nHTTP to the rescue, already in the browser right?\n\nSimplest way is to link your download folder or use python to setup an extra http server.\n\nSteps using linked download folder\n----------------------------------\n1. as part of configuring aria2 to make life easier you will have set the global **dir** option to something like **/home/aria2/downloads**\n2. clearly this folder is owned by the user **aria2**\n3. open a shell session logged in as **aria2**\n4. run ```ln -s /home/aria2/downloads /var/www/aria2/downloads```\n5. go to webui-aria2 in your browser (http://serverip:81 - assuming webui-aria2 is running on port 81)\n6. go to ```Settings > Connection Settings```\n7. scroll down to Direct Download and put ```http://serverip:81/downloads/``` in base URL field _(make sure have the / on the end)_\n8. now that URL has been specified all the files will be converted into clickable links\n9. checkout the ```more info``` on a download and see for yourself\n10. if you click on files that aren't finished downloading **you're going to have a bad day**\n\nSteps using extra http server\n-----------------------------\n1. as part of configuring aria2 to make life easier you will have set the global **dir** option to something like **/home/aria2/downloads**\n2. clearly this folder is owned by the user **aria2**\n3. open a shell session logged in as **aria2**\n4. run ```cd /home/aria2/downloads```\n5. run ```python -m SimpleHTTPServer 8080```\n6. webserver is now running on port 8080 and will serve files from the directory the command was run in\n7. 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\n8. go back to webui-aria2\n9. go to ```Settings > Connection Settings```\n10. scroll down to Direct Download and put ```http://serverip:8080/``` in base URL field _(make sure have the / on the end)_\n11. now that URL has been specified all the files will be converted into clickable links\n13. checkout the ```more info``` on a download and see for yourself\n14. if you click on files that aren't finished downloading **you're going to have a bad day**\n"
  },
  {
    "path": "docker-compose.yml",
    "content": "aria2:\n    image: ndthuan/aria2-alpine\n    volumes:\n        - $HOME/Downloads:/downloads\n    ports:\n        - \"6800:6800\"\n\nhttpd:\n    image: busybox\n    volumes:\n        - ./:/usr/html\n    ports:\n        - \"80:80\"\n    command: /bin/busybox httpd -f -p 80 -h /usr/html\n"
  },
  {
    "path": "docs/app.css",
    "content": "/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n  font-family: sans-serif;\n  -ms-text-size-adjust: 100%;\n  -webkit-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background-color: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\nmark {\n  background: #ff0;\n  color: #000;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\nsup {\n  top: -0.5em;\n}\nsub {\n  bottom: -0.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  -webkit-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit;\n  font: inherit;\n  margin: 0;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: textfield;\n  -webkit-box-sizing: content-box;\n  box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n  border: 0;\n  padding: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\ntd,\nth {\n  padding: 0;\n} /*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    background: transparent !important;\n    color: #000 !important;\n    -webkit-box-shadow: none !important;\n    box-shadow: none !important;\n    text-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  .navbar {\n    display: none;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n* {\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857;\n  color: #333;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #337ab7;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #23527c;\n  text-decoration: underline;\n}\na:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  padding: 4px;\n  line-height: 1.42857;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all 0.2s ease-in-out;\n  transition: all 0.2s ease-in-out;\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n[role=\"button\"] {\n  cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh1 .small,\nh2 small,\nh2 .small,\nh3 small,\nh3 .small,\nh4 small,\nh4 .small,\nh5 small,\nh5 .small,\nh6 small,\nh6 .small,\n.h1 small,\n.h1 .small,\n.h2 small,\n.h2 .small,\n.h3 small,\n.h3 .small,\n.h4 small,\n.h4 .small,\n.h5 small,\n.h5 .small,\n.h6 small,\n.h6 .small {\n  font-weight: normal;\n  line-height: 1;\n  color: #777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\nh1 .small,\n.h1 small,\n.h1 .small,\nh2 small,\nh2 .small,\n.h2 small,\n.h2 .small,\nh3 small,\nh3 .small,\n.h3 small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\nh4 .small,\n.h4 small,\n.h4 .small,\nh5 small,\nh5 .small,\n.h5 small,\n.h5 .small,\nh6 small,\nh6 .small,\n.h6 small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\nmark,\n.mark {\n  background-color: #fcf8e3;\n  padding: 0.2em;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase,\n.initialism {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #777;\n}\n.text-primary {\n  color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n  color: #286090;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n}\n.bg-primary {\n  background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n  background-color: #286090;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nul ol,\nol ul,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n  margin-left: -5px;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-left: 5px;\n  padding-right: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0;\n}\n.dl-horizontal dd:before,\n.dl-horizontal dd:after {\n  content: \" \";\n  display: table;\n}\n.dl-horizontal dd:after {\n  clear: both;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    clear: left;\n    text-align: right;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #777;\n}\n.initialism {\n  font-size: 90%;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857;\n  color: #777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: \"\\2014   \\A0\";\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid #eee;\n  border-left: 0;\n  text-align: right;\n}\n.blockquote-reverse footer:before,\n.blockquote-reverse small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right footer:before,\nblockquote.pull-right small:before,\nblockquote.pull-right .small:before {\n  content: \"\";\n}\n.blockquote-reverse footer:after,\n.blockquote-reverse small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right footer:after,\nblockquote.pull-right small:after,\nblockquote.pull-right .small:after {\n  content: \"\\A0   \\2014\";\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: bold;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: #333;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left: 15px;\n  padding-right: 15px;\n}\n.container:before,\n.container:after {\n  content: \" \";\n  display: table;\n}\n.container:after {\n  clear: both;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left: 15px;\n  padding-right: 15px;\n}\n.container-fluid:before,\n.container-fluid:after {\n  content: \" \";\n  display: table;\n}\n.container-fluid:after {\n  clear: both;\n}\n.row {\n  margin-left: -15px;\n  margin-right: -15px;\n}\n.row:before,\n.row:after {\n  content: \" \";\n  display: table;\n}\n.row:after {\n  clear: both;\n}\n.col-xs-1,\n.col-sm-1,\n.col-md-1,\n.col-lg-1,\n.col-xs-2,\n.col-sm-2,\n.col-md-2,\n.col-lg-2,\n.col-xs-3,\n.col-sm-3,\n.col-md-3,\n.col-lg-3,\n.col-xs-4,\n.col-sm-4,\n.col-md-4,\n.col-lg-4,\n.col-xs-5,\n.col-sm-5,\n.col-md-5,\n.col-lg-5,\n.col-xs-6,\n.col-sm-6,\n.col-md-6,\n.col-lg-6,\n.col-xs-7,\n.col-sm-7,\n.col-md-7,\n.col-lg-7,\n.col-xs-8,\n.col-sm-8,\n.col-md-8,\n.col-lg-8,\n.col-xs-9,\n.col-sm-9,\n.col-md-9,\n.col-lg-9,\n.col-xs-10,\n.col-sm-10,\n.col-md-10,\n.col-lg-10,\n.col-xs-11,\n.col-sm-11,\n.col-md-11,\n.col-lg-11,\n.col-xs-12,\n.col-sm-12,\n.col-md-12,\n.col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-left: 15px;\n  padding-right: 15px;\n}\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11,\n.col-xs-12 {\n  float: left;\n}\n.col-xs-1 {\n  width: 8.33333%;\n}\n.col-xs-2 {\n  width: 16.66667%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-4 {\n  width: 33.33333%;\n}\n.col-xs-5 {\n  width: 41.66667%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-7 {\n  width: 58.33333%;\n}\n.col-xs-8 {\n  width: 66.66667%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-10 {\n  width: 83.33333%;\n}\n.col-xs-11 {\n  width: 91.66667%;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-pull-1 {\n  right: 8.33333%;\n}\n.col-xs-pull-2 {\n  right: 16.66667%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-4 {\n  right: 33.33333%;\n}\n.col-xs-pull-5 {\n  right: 41.66667%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-7 {\n  right: 58.33333%;\n}\n.col-xs-pull-8 {\n  right: 66.66667%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-10 {\n  right: 83.33333%;\n}\n.col-xs-pull-11 {\n  right: 91.66667%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-push-1 {\n  left: 8.33333%;\n}\n.col-xs-push-2 {\n  left: 16.66667%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-4 {\n  left: 33.33333%;\n}\n.col-xs-push-5 {\n  left: 41.66667%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-7 {\n  left: 58.33333%;\n}\n.col-xs-push-8 {\n  left: 66.66667%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-10 {\n  left: 83.33333%;\n}\n.col-xs-push-11 {\n  left: 91.66667%;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-offset-0 {\n  margin-left: 0%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66667%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66667%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66667%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66667%;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n@media (min-width: 768px) {\n  .col-sm-1,\n  .col-sm-2,\n  .col-sm-3,\n  .col-sm-4,\n  .col-sm-5,\n  .col-sm-6,\n  .col-sm-7,\n  .col-sm-8,\n  .col-sm-9,\n  .col-sm-10,\n  .col-sm-11,\n  .col-sm-12 {\n    float: left;\n  }\n  .col-sm-1 {\n    width: 8.33333%;\n  }\n  .col-sm-2 {\n    width: 16.66667%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-4 {\n    width: 33.33333%;\n  }\n  .col-sm-5 {\n    width: 41.66667%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-7 {\n    width: 58.33333%;\n  }\n  .col-sm-8 {\n    width: 66.66667%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-10 {\n    width: 83.33333%;\n  }\n  .col-sm-11 {\n    width: 91.66667%;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66667%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66667%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66667%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66667%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-push-1 {\n    left: 8.33333%;\n  }\n  .col-sm-push-2 {\n    left: 16.66667%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333%;\n  }\n  .col-sm-push-5 {\n    left: 41.66667%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333%;\n  }\n  .col-sm-push-8 {\n    left: 66.66667%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333%;\n  }\n  .col-sm-push-11 {\n    left: 91.66667%;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66667%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66667%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66667%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66667%;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1,\n  .col-md-2,\n  .col-md-3,\n  .col-md-4,\n  .col-md-5,\n  .col-md-6,\n  .col-md-7,\n  .col-md-8,\n  .col-md-9,\n  .col-md-10,\n  .col-md-11,\n  .col-md-12 {\n    float: left;\n  }\n  .col-md-1 {\n    width: 8.33333%;\n  }\n  .col-md-2 {\n    width: 16.66667%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-4 {\n    width: 33.33333%;\n  }\n  .col-md-5 {\n    width: 41.66667%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-7 {\n    width: 58.33333%;\n  }\n  .col-md-8 {\n    width: 66.66667%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-10 {\n    width: 83.33333%;\n  }\n  .col-md-11 {\n    width: 91.66667%;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-pull-1 {\n    right: 8.33333%;\n  }\n  .col-md-pull-2 {\n    right: 16.66667%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333%;\n  }\n  .col-md-pull-5 {\n    right: 41.66667%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333%;\n  }\n  .col-md-pull-8 {\n    right: 66.66667%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333%;\n  }\n  .col-md-pull-11 {\n    right: 91.66667%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-push-1 {\n    left: 8.33333%;\n  }\n  .col-md-push-2 {\n    left: 16.66667%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-4 {\n    left: 33.33333%;\n  }\n  .col-md-push-5 {\n    left: 41.66667%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-7 {\n    left: 58.33333%;\n  }\n  .col-md-push-8 {\n    left: 66.66667%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-10 {\n    left: 83.33333%;\n  }\n  .col-md-push-11 {\n    left: 91.66667%;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66667%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66667%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66667%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66667%;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1,\n  .col-lg-2,\n  .col-lg-3,\n  .col-lg-4,\n  .col-lg-5,\n  .col-lg-6,\n  .col-lg-7,\n  .col-lg-8,\n  .col-lg-9,\n  .col-lg-10,\n  .col-lg-11,\n  .col-lg-12 {\n    float: left;\n  }\n  .col-lg-1 {\n    width: 8.33333%;\n  }\n  .col-lg-2 {\n    width: 16.66667%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-4 {\n    width: 33.33333%;\n  }\n  .col-lg-5 {\n    width: 41.66667%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-7 {\n    width: 58.33333%;\n  }\n  .col-lg-8 {\n    width: 66.66667%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-10 {\n    width: 83.33333%;\n  }\n  .col-lg-11 {\n    width: 91.66667%;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66667%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66667%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66667%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66667%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-push-1 {\n    left: 8.33333%;\n  }\n  .col-lg-push-2 {\n    left: 16.66667%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333%;\n  }\n  .col-lg-push-5 {\n    left: 41.66667%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333%;\n  }\n  .col-lg-push-8 {\n    left: 66.66667%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333%;\n  }\n  .col-lg-push-11 {\n    left: 91.66667%;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66667%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66667%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66667%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66667%;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n}\ntable {\n  background-color: rgba(0, 0, 0, 0);\n}\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #777;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > th,\n.table > tbody > tr > td,\n.table > tfoot > tr > th,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > th,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > th,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > th,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > th,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > th,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  float: none;\n  display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  float: none;\n  display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > thead > tr > th.active,\n.table > thead > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr > td.active,\n.table > tbody > tr > th.active,\n.table > tbody > tr.active > td,\n.table > tbody > tr.active > th,\n.table > tfoot > tr > td.active,\n.table > tfoot > tr > th.active,\n.table > tfoot > tr.active > td,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > thead > tr > th.success,\n.table > thead > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr > td.success,\n.table > tbody > tr > th.success,\n.table > tbody > tr.success > td,\n.table > tbody > tr.success > th,\n.table > tfoot > tr > td.success,\n.table > tfoot > tr > th.success,\n.table > tfoot > tr.success > td,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > thead > tr > th.info,\n.table > thead > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr > td.info,\n.table > tbody > tr > th.info,\n.table > tbody > tr.info > td,\n.table > tbody > tr.info > th,\n.table > tfoot > tr > td.info,\n.table > tfoot > tr > th.info,\n.table > tfoot > tr.info > td,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr > td.warning,\n.table > tbody > tr > th.warning,\n.table > tbody > tr.warning > td,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr > td.warning,\n.table > tfoot > tr > th.warning,\n.table > tfoot > tr.warning > td,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr > td.danger,\n.table > tbody > tr > th.danger,\n.table > tbody > tr.danger > td,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr > td.danger,\n.table > tfoot > tr > th.danger,\n.table > tfoot > tr.danger > td,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n.table-responsive {\n  overflow-x: auto;\n  min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n  min-width: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857;\n  color: #555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857;\n  color: #555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n  -webkit-transition: border-color ease-in-out 0.15s, -webkit-box-shadow ease-in-out 0.15s;\n  transition: border-color ease-in-out 0.15s, -webkit-box-shadow ease-in-out 0.15s;\n  transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n  transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s,\n    -webkit-box-shadow ease-in-out 0.15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control::-ms-expand {\n  border: 0;\n  background-color: transparent;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  background-color: #eee;\n  opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"].form-control,\n  input[type=\"time\"].form-control,\n  input[type=\"datetime-local\"].form-control,\n  input[type=\"month\"].form-control {\n    line-height: 34px;\n  }\n  input[type=\"date\"].input-sm,\n  .input-group-sm > input.form-control[type=\"date\"],\n  .input-group-sm > input.input-group-addon[type=\"date\"],\n  .input-group-sm > .input-group-btn > input.btn[type=\"date\"],\n  .input-group-sm input[type=\"date\"],\n  input[type=\"time\"].input-sm,\n  .input-group-sm > input.form-control[type=\"time\"],\n  .input-group-sm > input.input-group-addon[type=\"time\"],\n  .input-group-sm > .input-group-btn > input.btn[type=\"time\"],\n  .input-group-sm input[type=\"time\"],\n  input[type=\"datetime-local\"].input-sm,\n  .input-group-sm > input.form-control[type=\"datetime-local\"],\n  .input-group-sm > input.input-group-addon[type=\"datetime-local\"],\n  .input-group-sm > .input-group-btn > input.btn[type=\"datetime-local\"],\n  .input-group-sm input[type=\"datetime-local\"],\n  input[type=\"month\"].input-sm,\n  .input-group-sm > input.form-control[type=\"month\"],\n  .input-group-sm > input.input-group-addon[type=\"month\"],\n  .input-group-sm > .input-group-btn > input.btn[type=\"month\"],\n  .input-group-sm input[type=\"month\"] {\n    line-height: 30px;\n  }\n  input[type=\"date\"].input-lg,\n  .input-group-lg > input.form-control[type=\"date\"],\n  .input-group-lg > input.input-group-addon[type=\"date\"],\n  .input-group-lg > .input-group-btn > input.btn[type=\"date\"],\n  .input-group-lg input[type=\"date\"],\n  input[type=\"time\"].input-lg,\n  .input-group-lg > input.form-control[type=\"time\"],\n  .input-group-lg > input.input-group-addon[type=\"time\"],\n  .input-group-lg > .input-group-btn > input.btn[type=\"time\"],\n  .input-group-lg input[type=\"time\"],\n  input[type=\"datetime-local\"].input-lg,\n  .input-group-lg > input.form-control[type=\"datetime-local\"],\n  .input-group-lg > input.input-group-addon[type=\"datetime-local\"],\n  .input-group-lg > .input-group-btn > input.btn[type=\"datetime-local\"],\n  .input-group-lg input[type=\"datetime-local\"],\n  input[type=\"month\"].input-lg,\n  .input-group-lg > input.form-control[type=\"month\"],\n  .input-group-lg > input.input-group-addon[type=\"month\"],\n  .input-group-lg > .input-group-btn > input.btn[type=\"month\"],\n  .input-group-lg input[type=\"month\"] {\n    line-height: 46px;\n  }\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n  min-height: 20px;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-left: -20px;\n  margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  vertical-align: middle;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"radio\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\n.radio-inline.disabled,\nfieldset[disabled] .radio-inline,\n.checkbox-inline.disabled,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio.disabled label,\nfieldset[disabled] .radio label,\n.checkbox.disabled label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.form-control-static {\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n  min-height: 34px;\n}\n.form-control-static.input-lg,\n.input-group-lg > .form-control-static.form-control,\n.input-group-lg > .form-control-static.input-group-addon,\n.input-group-lg > .input-group-btn > .form-control-static.btn,\n.form-control-static.input-sm,\n.input-group-sm > .form-control-static.form-control,\n.input-group-sm > .form-control-static.input-group-addon,\n.input-group-sm > .input-group-btn > .form-control-static.btn {\n  padding-left: 0;\n  padding-right: 0;\n}\n.input-sm,\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm,\n.input-group-sm > select.form-control,\n.input-group-sm > select.input-group-addon,\n.input-group-sm > .input-group-btn > select.btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\n.input-group-sm > textarea.form-control,\n.input-group-sm > textarea.input-group-addon,\n.input-group-sm > .input-group-btn > textarea.btn,\nselect[multiple].input-sm,\n.input-group-sm > select.form-control[multiple],\n.input-group-sm > select.input-group-addon[multiple],\n.input-group-sm > .input-group-btn > select.btn[multiple] {\n  height: auto;\n}\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.form-group-sm select.form-control {\n  height: 30px;\n  line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n  height: auto;\n}\n.form-group-sm .form-control-static {\n  height: 30px;\n  min-height: 32px;\n  padding: 6px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.input-lg,\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33333;\n  border-radius: 6px;\n}\nselect.input-lg,\n.input-group-lg > select.form-control,\n.input-group-lg > select.input-group-addon,\n.input-group-lg > .input-group-btn > select.btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\n.input-group-lg > textarea.form-control,\n.input-group-lg > textarea.input-group-addon,\n.input-group-lg > .input-group-btn > textarea.btn,\nselect[multiple].input-lg,\n.input-group-lg > select.form-control[multiple],\n.input-group-lg > select.input-group-addon[multiple],\n.input-group-lg > .input-group-btn > select.btn[multiple] {\n  height: auto;\n}\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33333;\n  border-radius: 6px;\n}\n.form-group-lg select.form-control {\n  height: 46px;\n  line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n  height: auto;\n}\n.form-group-lg .form-control-static {\n  height: 46px;\n  min-height: 38px;\n  padding: 11px 16px;\n  font-size: 18px;\n  line-height: 1.33333;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg > .form-control + .form-control-feedback,\n.input-group-lg > .input-group-addon + .form-control-feedback,\n.input-group-lg > .input-group-btn > .btn + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm > .form-control + .form-control-feedback,\n.input-group-sm > .input-group-addon + .form-control-feedback,\n.input-group-sm > .input-group-btn > .btn + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  border-color: #3c763d;\n  background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  border-color: #8a6d3b;\n  background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  border-color: #a94442;\n  background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n  top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-static {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  margin-top: 0;\n  margin-bottom: 0;\n  padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-left: -15px;\n  margin-right: -15px;\n}\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after {\n  content: \" \";\n  display: table;\n}\n.form-horizontal .form-group:after {\n  clear: both;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    text-align: right;\n    margin-bottom: 0;\n    padding-top: 7px;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 11px;\n    font-size: 18px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n    font-size: 12px;\n  }\n}\n.btn {\n  display: inline-block;\n  margin-bottom: 0;\n  font-weight: normal;\n  text-align: center;\n  vertical-align: middle;\n  -ms-touch-action: manipulation;\n  touch-action: manipulation;\n  cursor: pointer;\n  background-image: none;\n  border: 1px solid transparent;\n  white-space: nowrap;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857;\n  border-radius: 4px;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.btn:focus,\n.btn.focus,\n.btn:active:focus,\n.btn:active.focus,\n.btn.active:focus,\n.btn.active.focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n  color: #333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  outline: 0;\n  background-image: none;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  cursor: not-allowed;\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n  pointer-events: none;\n}\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #8c8c8c;\n}\n.btn-default:hover {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .btn-default.dropdown-toggle {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default:active:focus,\n.btn-default:active.focus,\n.btn-default.active:hover,\n.btn-default.active:focus,\n.btn-default.active.focus,\n.open > .btn-default.dropdown-toggle:hover,\n.open > .btn-default.dropdown-toggle:focus,\n.open > .btn-default.dropdown-toggle.focus {\n  color: #333;\n  background-color: #d4d4d4;\n  border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .btn-default.dropdown-toggle {\n  background-image: none;\n}\n.btn-default.disabled:hover,\n.btn-default.disabled:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled]:hover,\n.btn-default[disabled]:focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default:hover,\nfieldset[disabled] .btn-default:focus,\nfieldset[disabled] .btn-default.focus {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n  color: #fff;\n  background-color: #286090;\n  border-color: #122b40;\n}\n.btn-primary:hover {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary:active:focus,\n.btn-primary:active.focus,\n.btn-primary.active:hover,\n.btn-primary.active:focus,\n.btn-primary.active.focus,\n.open > .btn-primary.dropdown-toggle:hover,\n.open > .btn-primary.dropdown-toggle:focus,\n.open > .btn-primary.dropdown-toggle.focus {\n  color: #fff;\n  background-color: #204d74;\n  border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .btn-primary.dropdown-toggle {\n  background-image: none;\n}\n.btn-primary.disabled:hover,\n.btn-primary.disabled:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled]:hover,\n.btn-primary[disabled]:focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary:hover,\nfieldset[disabled] .btn-primary:focus,\nfieldset[disabled] .btn-primary.focus {\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #255625;\n}\n.btn-success:hover {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success:active:focus,\n.btn-success:active.focus,\n.btn-success.active:hover,\n.btn-success.active:focus,\n.btn-success.active.focus,\n.open > .btn-success.dropdown-toggle:hover,\n.open > .btn-success.dropdown-toggle:focus,\n.open > .btn-success.dropdown-toggle.focus {\n  color: #fff;\n  background-color: #398439;\n  border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .btn-success.dropdown-toggle {\n  background-image: none;\n}\n.btn-success.disabled:hover,\n.btn-success.disabled:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled]:hover,\n.btn-success[disabled]:focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success:hover,\nfieldset[disabled] .btn-success:focus,\nfieldset[disabled] .btn-success.focus {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success .badge {\n  color: #5cb85c;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #1b6d85;\n}\n.btn-info:hover {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info:active:focus,\n.btn-info:active.focus,\n.btn-info.active:hover,\n.btn-info.active:focus,\n.btn-info.active.focus,\n.open > .btn-info.dropdown-toggle:hover,\n.open > .btn-info.dropdown-toggle:focus,\n.open > .btn-info.dropdown-toggle.focus {\n  color: #fff;\n  background-color: #269abc;\n  border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .btn-info.dropdown-toggle {\n  background-image: none;\n}\n.btn-info.disabled:hover,\n.btn-info.disabled:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled]:hover,\n.btn-info[disabled]:focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info:hover,\nfieldset[disabled] .btn-info:focus,\nfieldset[disabled] .btn-info.focus {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info .badge {\n  color: #5bc0de;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #985f0d;\n}\n.btn-warning:hover {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .btn-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning:active:focus,\n.btn-warning:active.focus,\n.btn-warning.active:hover,\n.btn-warning.active:focus,\n.btn-warning.active.focus,\n.open > .btn-warning.dropdown-toggle:hover,\n.open > .btn-warning.dropdown-toggle:focus,\n.open > .btn-warning.dropdown-toggle.focus {\n  color: #fff;\n  background-color: #d58512;\n  border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .btn-warning.dropdown-toggle {\n  background-image: none;\n}\n.btn-warning.disabled:hover,\n.btn-warning.disabled:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled]:hover,\n.btn-warning[disabled]:focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning:hover,\nfieldset[disabled] .btn-warning:focus,\nfieldset[disabled] .btn-warning.focus {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #761c19;\n}\n.btn-danger:hover {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger:active:focus,\n.btn-danger:active.focus,\n.btn-danger.active:hover,\n.btn-danger.active:focus,\n.btn-danger.active.focus,\n.open > .btn-danger.dropdown-toggle:hover,\n.open > .btn-danger.dropdown-toggle:focus,\n.open > .btn-danger.dropdown-toggle.focus {\n  color: #fff;\n  background-color: #ac2925;\n  border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .btn-danger.dropdown-toggle {\n  background-image: none;\n}\n.btn-danger.disabled:hover,\n.btn-danger.disabled:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled]:hover,\n.btn-danger[disabled]:focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger:hover,\nfieldset[disabled] .btn-danger:focus,\nfieldset[disabled] .btn-danger.focus {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger .badge {\n  color: #d9534f;\n  background-color: #fff;\n}\n.btn-link {\n  color: #337ab7;\n  font-weight: normal;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #23527c;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:hover,\nfieldset[disabled] .btn-link:focus {\n  color: #777;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33333;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity 0.15s linear;\n  transition: opacity 0.15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition-property: height, visibility;\n  transition-property: height, visibility;\n  -webkit-transition-duration: 0.35s;\n  transition-duration: 0.35s;\n  -webkit-transition-timing-function: ease;\n  transition-timing-function: ease;\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px dashed;\n  border-top: 4px solid \\9;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  list-style: none;\n  font-size: 14px;\n  text-align: left;\n  background-color: #fff;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n  background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.42857;\n  color: #333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  text-decoration: none;\n  color: #262626;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  background-color: #337ab7;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  cursor: not-allowed;\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  left: auto;\n  right: 0;\n}\n.dropdown-menu-left {\n  left: 0;\n  right: auto;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857;\n  color: #777;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  border-top: 0;\n  border-bottom: 4px dashed;\n  border-bottom: 4px solid \\9;\n  content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    left: 0;\n    right: auto;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar:before,\n.btn-toolbar:after {\n  content: \" \";\n  display: table;\n}\n.btn-toolbar:after {\n  clear: both;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-left: 8px;\n  padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle,\n.btn-group-lg.btn-group > .btn + .dropdown-toggle {\n  padding-left: 12px;\n  padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret,\n.btn-group-lg > .btn .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret,\n.dropup .btn-group-lg > .btn .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after {\n  content: \" \";\n  display: table;\n}\n.btn-group-vertical > .btn-group:after {\n  clear: both;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-right-radius: 4px;\n  border-top-left-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  float: none;\n  display: table-cell;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-left: 0;\n  padding-right: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group .form-control:focus {\n  z-index: 3;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555;\n  text-align: center;\n  background-color: #eee;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .input-group-addon.btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .input-group-addon.btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  z-index: 2;\n  margin-left: -1px;\n}\n.nav {\n  margin-bottom: 0;\n  padding-left: 0;\n  list-style: none;\n}\n.nav:before,\n.nav:after {\n  content: \" \";\n  display: table;\n}\n.nav:after {\n  clear: both;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.nav > li.disabled > a {\n  color: #777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #777;\n  text-decoration: none;\n  background-color: transparent;\n  cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eee;\n  border-color: #337ab7;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eee #eee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n  cursor: default;\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #337ab7;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified,\n.nav-tabs.nav-justified {\n  width: 100%;\n}\n.nav-justified > li,\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a,\n.nav-tabs.nav-justified > li > a {\n  text-align: center;\n  margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li,\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a,\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified,\n.nav-tabs.nav-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a,\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a,\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n.navbar:before,\n.navbar:after {\n  content: \" \";\n  display: table;\n}\n.navbar:after {\n  clear: both;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n.navbar-header:before,\n.navbar-header:after {\n  content: \" \";\n  display: table;\n}\n.navbar-header:after {\n  clear: both;\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  overflow-x: visible;\n  padding-right: 15px;\n  padding-left: 15px;\n  border-top: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n  -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse:before,\n.navbar-collapse:after {\n  content: \" \";\n  display: table;\n}\n.navbar-collapse:after {\n  clear: both;\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-left: 0;\n    padding-right: 0;\n  }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n.container > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-header,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-header,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.navbar-brand {\n  float: left;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n  height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n.navbar-brand > img {\n  display: block;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: 15px;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n.navbar-form {\n  margin-left: -15px;\n  margin-right: -15px;\n  padding: 10px 15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control-static {\n    display: inline-block;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n  .navbar-form .form-group:last-child {\n    margin-bottom: 0;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    border: 0;\n    margin-left: 0;\n    margin-right: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  border-top-right-radius: 4px;\n  border-top-left-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm,\n.btn-group-sm > .navbar-btn.btn {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs,\n.btn-group-xs > .navbar-btn.btn {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-left: 15px;\n    margin-right: 15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px;\n  }\n  .navbar-right ~ .navbar-right {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: rgba(0, 0, 0, 0);\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333;\n  background-color: rgba(0, 0, 0, 0);\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #ccc;\n  background-color: rgba(0, 0, 0, 0);\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  background-color: #e7e7e7;\n  color: #555;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333;\n    background-color: rgba(0, 0, 0, 0);\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #ccc;\n    background-color: rgba(0, 0, 0, 0);\n  }\n}\n.navbar-default .navbar-link {\n  color: #777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333;\n}\n.navbar-default .btn-link {\n  color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:hover,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #ccc;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #090909;\n}\n.navbar-inverse .navbar-brand {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: rgba(0, 0, 0, 0);\n}\n.navbar-inverse .navbar-text {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: rgba(0, 0, 0, 0);\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #090909;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: rgba(0, 0, 0, 0);\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  background-color: #090909;\n  color: #fff;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #090909;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #090909;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #9d9d9d;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: rgba(0, 0, 0, 0);\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #090909;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: rgba(0, 0, 0, 0);\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.navbar-inverse .btn-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  line-height: 1.42857;\n  text-decoration: none;\n  color: #337ab7;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-bottom-left-radius: 4px;\n  border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-bottom-right-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > a:focus,\n.pagination > li > span:hover,\n.pagination > li > span:focus {\n  z-index: 2;\n  color: #23527c;\n  background-color: #eee;\n  border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > a:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span,\n.pagination > .active > span:hover,\n.pagination > .active > span:focus {\n  z-index: 3;\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n  cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #777;\n  background-color: #fff;\n  border-color: #ddd;\n  cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-bottom-left-radius: 6px;\n  border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-bottom-right-radius: 6px;\n  border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-bottom-left-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-bottom-right-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.label {\n  display: inline;\n  padding: 0.2em 0.6em 0.3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25em;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\na.label:hover,\na.label:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label-default {\n  background-color: #777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #5e5e5e;\n}\n.label-primary {\n  background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #286090;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n  color: #3c763d;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n  color: #31708f;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n  color: #8a6d3b;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  background-color: #f2dede;\n  border-color: #ebccd1;\n  color: #a94442;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  overflow: hidden;\n  height: 20px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #337ab7;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n  -webkit-transition: width 0.6s ease;\n  transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  background-image: linear-gradient(\n    45deg,\n    rgba(255, 255, 255, 0.15) 25%,\n    transparent 25%,\n    transparent 50%,\n    rgba(255, 255, 255, 0.15) 50%,\n    rgba(255, 255, 255, 0.15) 75%,\n    transparent 75%,\n    transparent\n  );\n  background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n  animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  background-image: linear-gradient(\n    45deg,\n    rgba(255, 255, 255, 0.15) 25%,\n    transparent 25%,\n    transparent 50%,\n    rgba(255, 255, 255, 0.15) 50%,\n    rgba(255, 255, 255, 0.15) 75%,\n    transparent 75%,\n    transparent\n  );\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  background-image: linear-gradient(\n    45deg,\n    rgba(255, 255, 255, 0.15) 25%,\n    transparent 25%,\n    transparent 50%,\n    rgba(255, 255, 255, 0.15) 50%,\n    rgba(255, 255, 255, 0.15) 75%,\n    transparent 75%,\n    transparent\n  );\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  background-image: linear-gradient(\n    45deg,\n    rgba(255, 255, 255, 0.15) 25%,\n    transparent 25%,\n    transparent 50%,\n    rgba(255, 255, 255, 0.15) 50%,\n    rgba(255, 255, 255, 0.15) 75%,\n    transparent 75%,\n    transparent\n  );\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  background-image: linear-gradient(\n    45deg,\n    rgba(255, 255, 255, 0.15) 25%,\n    transparent 25%,\n    transparent 50%,\n    rgba(255, 255, 255, 0.15) 50%,\n    rgba(255, 255, 255, 0.15) 75%,\n    transparent 75%,\n    transparent\n  );\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  opacity: 0.2;\n  filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\nbutton.close {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  display: none;\n  overflow: hidden;\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transform: translate(0, -25%);\n  transform: translate(0, -25%);\n  -webkit-transition: -webkit-transform 0.3s ease-out;\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n  transform: translate(0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  background-clip: padding-box;\n  outline: 0;\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  opacity: 0;\n  filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header:before,\n.modal-header:after {\n  content: \" \";\n  display: table;\n}\n.modal-header:after {\n  clear: both;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer:before,\n.modal-footer:after {\n  content: \" \";\n  display: table;\n}\n.modal-footer:after {\n  clear: both;\n}\n.modal-footer .btn + .btn {\n  margin-left: 5px;\n  margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  letter-spacing: normal;\n  line-break: auto;\n  line-height: 1.42857;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  white-space: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  font-size: 12px;\n  opacity: 0;\n  filter: alpha(opacity=0);\n}\n.tooltip.in {\n  opacity: 0.9;\n  filter: alpha(opacity=90);\n}\n.tooltip.top {\n  margin-top: -3px;\n  padding: 5px 0;\n}\n.tooltip.right {\n  margin-left: 3px;\n  padding: 0 5px;\n}\n.tooltip.bottom {\n  margin-top: 3px;\n  padding: 5px 0;\n}\n.tooltip.left {\n  margin-left: -3px;\n  padding: 0 5px;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n  bottom: 0;\n  right: 5px;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  letter-spacing: normal;\n  line-break: auto;\n  line-height: 1.42857;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  white-space: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  font-size: 14px;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover-title {\n  margin: 0;\n  padding: 8px 14px;\n  font-size: 14px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow:after {\n  border-width: 10px;\n  content: \"\";\n}\n.popover.top > .arrow {\n  left: 50%;\n  margin-left: -11px;\n  border-bottom-width: 0;\n  border-top-color: #999;\n  border-top-color: rgba(0, 0, 0, 0.25);\n  bottom: -11px;\n}\n.popover.top > .arrow:after {\n  content: \" \";\n  bottom: 1px;\n  margin-left: -10px;\n  border-bottom-width: 0;\n  border-top-color: #fff;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-left-width: 0;\n  border-right-color: #999;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n  content: \" \";\n  left: 1px;\n  bottom: -10px;\n  border-left-width: 0;\n  border-right-color: #fff;\n}\n.popover.bottom > .arrow {\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n  top: -11px;\n}\n.popover.bottom > .arrow:after {\n  content: \" \";\n  top: 1px;\n  margin-left: -10px;\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n  content: \" \";\n  right: 1px;\n  border-right-width: 0;\n  border-left-color: #fff;\n  bottom: -10px;\n}\n.clearfix:before,\n.clearfix:after {\n  content: \" \";\n  display: table;\n}\n.clearfix:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs {\n  display: none !important;\n}\n.visible-sm {\n  display: none !important;\n}\n.visible-md {\n  display: none !important;\n}\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table !important;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table !important;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table !important;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table !important;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table !important;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n.flag-icon-background,\n.flag-icon {\n  background-size: contain;\n  background-position: 50%;\n  background-repeat: no-repeat;\n}\n.flag-icon {\n  position: relative;\n  display: inline-block;\n  width: 1.33333em;\n  line-height: 1em;\n}\n.flag-icon:before {\n  content: \"\\A0\";\n}\n.flag-icon.flag-icon-squared {\n  width: 1em;\n}\n.flag-icon-us {\n  background-image: url(flags/us.svg);\n}\n.flag-icon-us.flag-icon-squared {\n  background-image: url(flags/us.svg);\n}\n.flag-icon-th {\n  background-image: url(flags/th.svg);\n}\n.flag-icon-th.flag-icon-squared {\n  background-image: url(flags/th.svg);\n}\n.flag-icon-nl {\n  background-image: url(flags/nl.svg);\n}\n.flag-icon-nl.flag-icon-squared {\n  background-image: url(flags/nl.svg);\n}\n.flag-icon-cn {\n  background-image: url(flags/cn.svg);\n}\n.flag-icon-cn.flag-icon-squared {\n  background-image: url(flags/cn.svg);\n}\n.flag-icon-tw {\n  background-image: url(flags/tw.svg);\n}\n.flag-icon-tw.flag-icon-squared {\n  background-image: url(flags/tw.svg);\n}\n.flag-icon-pl {\n  background-image: url(flags/pl.svg);\n}\n.flag-icon-pl.flag-icon-squared {\n  background-image: url(flags/pl.svg);\n}\n.flag-icon-fr {\n  background-image: url(flags/fr.svg);\n}\n.flag-icon-fr.flag-icon-squared {\n  background-image: url(flags/fr.svg);\n}\n.flag-icon-de {\n  background-image: url(flags/de.svg);\n}\n.flag-icon-de.flag-icon-squared {\n  background-image: url(flags/de.svg);\n}\n.flag-icon-es {\n  background-image: url(flags/es.svg);\n}\n.flag-icon-es.flag-icon-squared {\n  background-image: url(flags/es.svg);\n}\n.flag-icon-ru {\n  background-image: url(flags/ru.svg);\n}\n.flag-icon-ru.flag-icon-squared {\n  background-image: url(flags/ru.svg);\n}\n.flag-icon-it {\n  background-image: url(flags/it.svg);\n}\n.flag-icon-it.flag-icon-squared {\n  background-image: url(flags/it.svg);\n}\n.flag-icon-tr {\n  background-image: url(flags/tr.svg);\n}\n.flag-icon-tr.flag-icon-squared {\n  background-image: url(flags/tr.svg);\n}\n.flag-icon-cz {\n  background-image: url(flags/cz.svg);\n}\n.flag-icon-cz.flag-icon-squared {\n  background-image: url(flags/cz.svg);\n}\n.flag-icon-ir {\n  background-image: url(flags/ir.svg);\n}\n.flag-icon-ir.flag-icon-squared {\n  background-image: url(flags/ir.svg);\n}\n.flag-icon-id {\n  background-image: url(flags/id.svg);\n}\n.flag-icon-id.flag-icon-squared {\n  background-image: url(flags/id.svg);\n}\n.flag-icon-br {\n  background-image: url(flags/br.svg);\n}\n.flag-icon-br.flag-icon-squared {\n  background-image: url(flags/br.svg);\n}\n.icon {\n  display: inline-block;\n  width: 1em;\n  height: 1em;\n  stroke-width: 0;\n  stroke: currentColor;\n  fill: currentColor;\n  vertical-align: sub;\n  margin-bottom: 0.1em;\n}\n.icon.icon-fw {\n  width: 1.28571429em;\n}\n.rotate-90 {\n  -webkit-transform: rotate(-90deg);\n  transform: rotate(-90deg);\n}\nbody {\n  font-family: \"Lato\", sans-serif;\n  overflow-y: scroll;\n  background-color: #f5f5f5;\n  padding-bottom: 5em;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  vertical-align: middle;\n  position: relative;\n}\n.pagination ul > li:not(.disabled) {\n  cursor: pointer;\n}\n.pagination ul > li.active > a {\n  color: #fff;\n  background-color: #428bca;\n}\n.label-active,\n.badge-active,\n.progress-active .bar {\n  background-color: #62c462;\n}\n.progress-success .bar {\n  background-color: #468847 !important;\n}\n.alerts {\n  position: fixed;\n  right: 6px;\n  z-index: 900;\n  width: 40%;\n}\n.alert {\n  float: right;\n  clear: right;\n  margin-bottom: 5px;\n  margin-top: 5px;\n}\n.modal {\n  position: absolute;\n}\n#global-graph {\n  width: 100%;\n}\n@media (min-width: 767px) and (max-width: 992px) {\n  #global-graph {\n    width: 80%;\n  }\n}\n#download-filter {\n  margin: 0;\n  height: auto;\n}\n#filters label {\n  display: inline-block;\n  white-space: nowrap;\n}\n.nav-header {\n  display: block;\n  padding: 3px 0;\n  font-size: 11px;\n  font-weight: bold;\n  line-height: 20px;\n  color: #999;\n  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);\n  text-transform: uppercase;\n}\n.main-navbar {\n  -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1);\n  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1);\n  background-color: #00897b;\n  border-color: #00897b;\n}\n.main-navbar .navbar-brand {\n  color: #fff;\n}\n.main-navbar .nav > li > a {\n  color: #fff;\n  -webkit-transition: background-color 0.3s ease-in-out;\n  transition: background-color 0.3s ease-in-out;\n}\n.main-navbar .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.main-navbar .nav .open > a,\n.main-navbar .nav .open > a:hover,\n.main-navbar .nav .open > a:focus,\n.main-navbar .nav > li > a:focus,\n.main-navbar .nav > li > a:hover {\n  background-color: rgba(0, 0, 0, 0.2);\n}\n.sidebar-nav {\n  margin-bottom: 30px;\n  background-color: #fff;\n  padding: 10px 20px 20px;\n  border-radius: 2px;\n  -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14),\n    0 2px 1px -1px rgba(0, 0, 0, 0.12);\n  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14),\n    0 2px 1px -1px rgba(0, 0, 0, 0.12);\n}\n.filter-input-group {\n  position: relative;\n  margin-bottom: 30px;\n}\n.filter-input-group > .clear-button {\n  position: absolute;\n  right: 25px;\n  top: 6px;\n  cursor: pointer;\n}\n.download .label {\n  -webkit-box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);\n  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);\n  -webkit-transition: all 2s;\n  transition: all 2s;\n}\n.download .title {\n  font-size: 1.2em;\n  padding: 5px 0;\n}\n.download .progress {\n  background-color: #fff;\n  -webkit-box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);\n  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);\n  width: 100%;\n  margin: 0;\n  padding: 0;\n}\n.download .progress-bar {\n  -webkit-box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);\n  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);\n}\n.download-name {\n  font-weight: bold;\n  font-size: small;\n  word-wrap: break-word;\n}\n.active-download,\n.waiting-download,\n.stopped-download,\n.download {\n  cursor: pointer;\n  width: 100%;\n  padding: 4px 5px;\n  background-color: #fff;\n  margin-bottom: 20px;\n  -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14),\n    0 2px 1px -1px rgba(0, 0, 0, 0.12);\n  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14),\n    0 2px 1px -1px rgba(0, 0, 0, 0.12);\n}\n@media (max-width: 767px) {\n  .active-download,\n  .waiting-download,\n  .stopped-download,\n  .download {\n    table-layout: fixed;\n  }\n}\n.download-graph {\n  margin: 0.5em 30px 0.5em 0;\n}\n@media (min-width: 1200px) {\n  .download-graph {\n    width: 50%;\n  }\n}\n@media (min-width: 767px) and (max-width: 1200px) {\n  .download-graph {\n    width: 60%;\n  }\n}\n@media (max-width: 767px) {\n  .download-graph {\n    width: 100%;\n  }\n}\n.large-graph {\n  width: 66%;\n}\n.stats {\n  margin: 0 auto;\n  padding: 0;\n}\n.stats li {\n  display: inline-block;\n  margin-bottom: 2px;\n  padding: 0.75ex;\n  min-width: 20ex;\n  text-align: center;\n}\n.download-item {\n  margin: 0;\n  padding: 0.5ex 6px 0.5ex;\n}\n.download-controls .btn-group {\n  float: right;\n}\n.download-controls > .btn-group {\n  margin: 5px 5px 5px 0;\n}\n.download-controls .btn-group .btn {\n  height: 100%;\n}\n.download-controls .btn-group .btn span {\n  font-size: 14px;\n  color: gray;\n}\n.download-detail h4 {\n  margin-left: 10px;\n}\n.download-files {\n  margin: 0;\n}\n.download-files li {\n  display: inline-block;\n  padding: 0.8ex;\n  max-width: 100%;\n  margin: 0 6px 6px 0;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.download-files a {\n  color: #fff;\n}\n.download-empty {\n  padding: 40px;\n  background-color: #fff;\n  border-radius: 2px;\n  -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14),\n    0 2px 1px -1px rgba(0, 0, 0, 0.12);\n  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14),\n    0 2px 1px -1px rgba(0, 0, 0, 0.12);\n}\n.modal-body textarea {\n  width: 100%;\n}\n.modal-advanced-title {\n  font-weight: bold;\n  margin-bottom: 0;\n  background-color: #f5f5f5;\n  border: 1px solid rgba(0, 0, 0, 0.05);\n  border-bottom: 0;\n  border-radius: 4px 4px 0 0;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n  cursor: pointer;\n  padding: 5px 15px;\n}\n.modal-advanced-options {\n  margin-top: 0;\n  margin-bottom: 2px;\n  background-color: #f5f5f5;\n  border: 1px solid rgba(0, 0, 0, 0.05);\n  border-top: 0;\n  border-radius: 0 0 4px 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.modal-form-input-verylarge {\n  width: 95%;\n}\n.modal-form-input-number {\n  width: 80px;\n}\n.selectFiles div .control-label {\n  font-weight: normal;\n  margin-left: 30px;\n}\n.selectFiles div .controls {\n  margin-left: 30px;\n}\n.selectFiles div.recursivedir {\n  width: 100%;\n}\n"
  },
  {
    "path": "docs/app.js",
    "content": "!(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      (r = s[u]), o[r] && p.push(o[r][0]), (o[r] = 0);\n    for (a in l) Object.prototype.hasOwnProperty.call(l, a) && (e[a] = l[a]);\n    for (d && d(t); p.length; ) p.shift()();\n    return i.push.apply(i, c || []), n();\n  }\n  function n() {\n    for (var e, t = 0; t < i.length; t++) {\n      for (var n = i[t], a = !0, s = 1; s < n.length; s++) {\n        var l = n[s];\n        0 !== o[l] && (a = !1);\n      }\n      a && (i.splice(t--, 1), (e = r((r.s = n[0]))));\n    }\n    return e;\n  }\n  var a = {},\n    o = { 0: 0 },\n    i = [];\n  function r(t) {\n    if (a[t]) return a[t].exports;\n    var n = (a[t] = { i: t, l: !1, exports: {} });\n    return e[t].call(n.exports, n, n.exports, r), (n.l = !0), n.exports;\n  }\n  (r.m = e),\n    (r.c = a),\n    (r.d = function(e, t, n) {\n      r.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: n });\n    }),\n    (r.r = function(e) {\n      \"undefined\" != typeof Symbol &&\n        Symbol.toStringTag &&\n        Object.defineProperty(e, Symbol.toStringTag, { value: \"Module\" }),\n        Object.defineProperty(e, \"__esModule\", { value: !0 });\n    }),\n    (r.t = function(e, t) {\n      if ((1 & t && (e = r(e)), 8 & t)) return e;\n      if (4 & t && \"object\" == typeof e && e && e.__esModule) return e;\n      var n = Object.create(null);\n      if (\n        (r.r(n),\n        Object.defineProperty(n, \"default\", { enumerable: !0, value: e }),\n        2 & t && \"string\" != typeof e)\n      )\n        for (var a in e)\n          r.d(\n            n,\n            a,\n            function(t) {\n              return e[t];\n            }.bind(null, a)\n          );\n      return n;\n    }),\n    (r.n = function(e) {\n      var t =\n        e && e.__esModule\n          ? function() {\n              return e.default;\n            }\n          : function() {\n              return e;\n            };\n      return r.d(t, \"a\", t), t;\n    }),\n    (r.o = function(e, t) {\n      return Object.prototype.hasOwnProperty.call(e, t);\n    }),\n    (r.p = \"\");\n  var s = (window.webpackJsonp = window.webpackJsonp || []),\n    l = s.push.bind(s);\n  (s.push = t), (s = s.slice());\n  for (var c = 0; c < s.length; c++) t(s[c]);\n  var d = l;\n  i.push([29, 1]), n();\n})([\n  ,\n  ,\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a);\n    t.a = o.a.module(\"webui.services.alerts\", [\"webui.services.deps\"]).factory(\"$alerts\", [\n      \"$_\",\n      function(e) {\n        var t = [];\n        return {\n          addAlert: function() {\n            var n = Array.prototype.slice.call(arguments, 0);\n            setTimeout(function() {\n              e.each(t, function(e) {\n                e.apply({}, n);\n              });\n            }, 0);\n          },\n          addAlerter: function(e) {\n            t.push(e);\n          },\n          log: function(e) {\n            this.addAlert(e, \"info\");\n          }\n        };\n      }\n    ]).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a);\n    t.a = o.a.module(\"webui.services.base64\", []).factory(\"$base64\", [\n      function() {\n        var e = {},\n          t = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",\n          n = {\n            indexOf: function(e) {\n              return e.charCodeAt(0);\n            },\n            charAt: String.fromCharCode\n          };\n        function a(e, t, n, a, o, i) {\n          var r,\n            s,\n            l,\n            c = 0,\n            d = \"\",\n            u = 1,\n            p = 1,\n            h = (e = String(e)).length;\n          for (r = 0; r < h || (!t && p > 1); r += 1) {\n            if (((c *= o), (u *= o), r < h)) {\n              if ((s = n.indexOf(e.charAt(r))) <= -1 || s >= o) throw new RangeError();\n              (p *= o), (c += s);\n            }\n            for (; u >= i; )\n              (u /= i), p > 1 && ((l = c), (c %= u), (d += a.charAt((l - c) / u)), (p /= i));\n          }\n          return d;\n        }\n        return (\n          (e.btoa = function(e) {\n            return (e = a(e, !1, n, t, 256, 64)) + \"====\".slice(e.length % 4 || 4);\n          }),\n          (e.atob = function(e) {\n            var o;\n            for (o = (e = String(e).split(\"=\")).length - 1; o >= 0; o -= 1) {\n              if (e[o].length % 4 == 1) throw new RangeError();\n              e[o] = a(e[o], !0, t, n, 64, 256);\n            }\n            return e.join(\"\");\n          }),\n          e\n        );\n      }\n    ]).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a);\n    t.a = o.a\n      .module(\"webui.services.configuration\", [])\n      .constant(\"$name\", \"Aria2 WebUI\")\n      .constant(\n        \"$titlePattern\",\n        \"active: {active} - waiting: {waiting} - stopped: {stopped} — {name}\"\n      )\n      .constant(\"$pageSize\", 11)\n      .constant(\"$authconf\", {\n        host: location.protocol.startsWith(\"http\") ? location.hostname : \"localhost\",\n        path: \"/jsonrpc\",\n        port: 6800,\n        encrypt: !1,\n        auth: {},\n        directURL: \"\"\n      })\n      .constant(\"$enable\", {\n        torrent: !0,\n        metalink: !0,\n        sidebar: { show: !0, stats: !0, filters: !0, starredProps: !0 }\n      })\n      .constant(\"$starredProps\", [\n        \"dir\",\n        \"conf-path\",\n        \"auto-file-renaming\",\n        \"max-connection-per-server\"\n      ])\n      .constant(\"$downloadProps\", [\n        \"header\",\n        \"http-user\",\n        \"http-passwd\",\n        \"pause\",\n        \"dir\",\n        \"max-connection-per-server\"\n      ])\n      .constant(\"$globalTimeout\", 1e3).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a),\n      i = n(1),\n      r = n.n(i),\n      s = n(6),\n      l = n.n(s);\n    t.a = o.a\n      .module(\"webui.services.deps\", [])\n      .value(\"$\", r.a)\n      .value(\"$_\", l.a)\n      .value(\"$json\", JSON).name;\n  },\n  ,\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a);\n    t.a = o.a.module(\"webui.services.errors\", []).value(\"$getErrorStatus\", function(e) {\n      switch ((e -= 1)) {\n        case 0:\n          return \"download was unsuccessful\";\n        case 1:\n          return \"unknown error occurred\";\n        case 2:\n          return \"time out occurred\";\n        case 3:\n          return \"resource was not found\";\n        case 4:\n          return 'aria2 saw the specified number of \"resource not found\" error. See --max-file-not-found option';\n        case 5:\n          return \"download aborted because download speed was too slow. See --lowest-speed-limit option\";\n        case 6:\n          return \"there were unfinished downloads\";\n        case 7:\n          return \"remote server did not support resume when resume was required to complete download\";\n        case 8:\n          return \"not enough disk space available\";\n        case 9:\n          return \"piece length was different from one in .aria2 control\";\n        case 10:\n          return \"downloading same file at that moment\";\n        case 11:\n          return \"downloading same info hash torrent at that moment\";\n        case 12:\n          return \"file already existed\";\n        case 13:\n          return \"renaming file failed\";\n        case 14:\n          return \"could not open existing file\";\n        case 15:\n          return \"could not create new file or truncate existing file\";\n        case 16:\n          return \"file I/O error occurred\";\n        case 17:\n          return \"could not create directory\";\n        case 18:\n          return \"name resolution failed\";\n        case 19:\n          return \"could not parse Metalink document\";\n        case 20:\n          return \"FTP command failed\";\n        case 21:\n          return \"HTTP response header was bad or unexpected\";\n        case 22:\n          return \"too many redirects occurred\";\n        case 23:\n          return \"HTTP authorization failed\";\n        case 24:\n          return \"could not parse bencoded file\";\n        case 25:\n          return ' \".torrent\" file was corrupted or missing information ';\n        case 26:\n          return \"Magnet URI was bad\";\n        case 27:\n          return \"bad/unrecognized option was given or unexpected option argument was given\";\n        case 28:\n          return \"remote server was unable to handle the request due to a temporary overloading or maintenance\";\n        case 29:\n          return \"could not parse JSON-RPC request\";\n      }\n    }).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a);\n    t.a = o.a\n      .module(\"webui.services.rpc\", [\n        \"webui.services.rpc.syscall\",\n        \"webui.services.configuration\",\n        \"webui.services.alerts\",\n        \"webui.services.utils\"\n      ])\n      .factory(\"$rpc\", [\n        \"$syscall\",\n        \"$globalTimeout\",\n        \"$alerts\",\n        \"$utils\",\n        \"$rootScope\",\n        \"$location\",\n        \"$authconf\",\n        \"$filter\",\n        function(e, t, n, a, i, r, s, l) {\n          var c,\n            d = [],\n            u = [s],\n            p = {},\n            h = null,\n            f = !1,\n            m = a.getCookie(\"aria2conf\");\n          m && u.unshift(m),\n            r.search().host &&\n              (u.unshift(r.search()),\n              (u[0].auth = { token: u[0].token, user: u[0].username, pass: u[0].password })),\n            -1 != [\"http\", \"https\"].indexOf(r.protocol()) &&\n              \"localhost\" != r.host() &&\n              u.push(\n                { host: r.host(), path: \"/jsonrpc\", port: 6800, encrypt: !1 },\n                {\n                  host: r.host(),\n                  port: r.port(),\n                  path: \"/jsonrpc\",\n                  encrypt: \"https\" == r.protocol()\n                },\n                { host: r.host(), port: r.port(), path: s.path, encrypt: \"https\" == r.protocol() }\n              );\n          var g = !0,\n            v = function() {\n              clearTimeout(h), (h = null);\n              var o = (d = _.filter(d, function(e) {\n                return !!e && 2 !== e.once;\n              })).slice();\n              if (o.length) {\n                if (\"initializing\" == e.state)\n                  return (\n                    console.log(\"Syscall is initializing, waiting\"), void (h = setTimeout(v, t))\n                  );\n                if (g && u.length)\n                  return (\n                    (g = !1),\n                    (p = u[0]),\n                    (c = p && p.auth && p.auth.token ? p.auth.token : null),\n                    e.init(p),\n                    void (h = setTimeout(v, t))\n                  );\n                var r = _.map(o, function(e) {\n                  var t = e.params;\n                  return (\n                    c && (t = [\"token:\" + c].concat(t || [])),\n                    { methodName: e.name, params: t && t.length ? t : void 0 }\n                  );\n                });\n                e.invoke({\n                  name: \"system.multicall\",\n                  params: [r],\n                  success: function(e) {\n                    if (\n                      _.some(e.result, function(e) {\n                        return e.code && \"Unauthorized\" === e.message;\n                      })\n                    )\n                      return (\n                        (g = !0),\n                        n.addAlert(\n                          \"<strong>\" +\n                            l(\"translate\")(\"Oh Snap!\") +\n                            \"</strong> \" +\n                            l(\"translate\")(\n                              \"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\",\n                              \"error\"\n                            )\n                        ),\n                        void (h = setTimeout(v, t))\n                      );\n                    u.length &&\n                      (c\n                        ? n.addAlert(\n                            l(\"translate\")(\n                              \"Successfully connected to Aria2 through its remote RPC …\"\n                            ),\n                            \"success\"\n                          )\n                        : n.addAlert(\n                            l(\"translate\")(\n                              \"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)\"\n                            )\n                          ),\n                      (u = [])),\n                      a.setCookie(\"aria2conf\", p);\n                    var r = [];\n                    _.each(e.result, function(e, t) {\n                      var a = o[t];\n                      a &&\n                        (e.code && (console.error(a, e), n.addAlert(e.message, \"error\")),\n                        r.push({ cb: a.cb, data: e }),\n                        a.once && (a.once = 2));\n                    }),\n                      _.each(r, function(e) {\n                        e.cb(e.data);\n                      }),\n                      i.$digest(),\n                      f ? ((f = !1), (h = setTimeout(v, 0))) : (h = setTimeout(v, t));\n                  },\n                  error: function() {\n                    g = !0;\n                    var e = u.indexOf(p);\n                    -1 != e && u.splice(e, 1),\n                      u.length\n                        ? (n.log(\n                            l(\"translate\")(\n                              \"The last connection attempt was unsuccessful. Trying another configuration\"\n                            )\n                          ),\n                          (h = setTimeout(v, 0)))\n                        : (n.addAlert(\n                            \"<strong>\" +\n                              l(\"translate\")(\"Oh Snap!\") +\n                              \"</strong> \" +\n                              l(\"translate\")(\n                                \"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\"\n                              ),\n                            \"error\"\n                          ),\n                          (h = setTimeout(v, t)));\n                  }\n                });\n              } else h = setTimeout(v, t);\n            };\n          return (\n            (h = setTimeout(v, t)),\n            {\n              configure: function(e) {\n                n.addAlert(\n                  l(\"translate\")(\n                    \"Trying to connect to aria2 using the new connection configuration\"\n                  ),\n                  \"info\"\n                ),\n                  (u = e instanceof Array ? e : [e]),\n                  h && (clearTimeout(h), (h = setTimeout(v, 0)));\n              },\n              getConfiguration: function() {\n                return p;\n              },\n              getDirectURL: function() {\n                return p.directURL;\n              },\n              once: function(e, t, n, a) {\n                (n = n || o.a.noop),\n                  (t = t || []),\n                  d.push({ once: !0, name: \"aria2.\" + e, params: t, cb: n }),\n                  a || this.forceUpdate();\n              },\n              subscribe: function(e, t, n, a) {\n                n = n || o.a.noop;\n                var i = { once: !1, name: \"aria2.\" + e, params: (t = t || []), cb: n };\n                return d.push(i), a || this.forceUpdate(), i;\n              },\n              unsubscribe: function(e) {\n                var t = d.indexOf(e);\n                d[t] = null;\n              },\n              forceUpdate: function() {\n                h ? (clearTimeout(h), (h = setTimeout(v, 0))) : (f = !0);\n              }\n            }\n          );\n        }\n      ]).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a);\n    t.a = o.a\n      .module(\"webui.services.rpc.helpers\", [\n        \"webui.services.deps\",\n        \"webui.services.rpc\",\n        \"webui.services.alerts\"\n      ])\n      .factory(\"$rpchelpers\", [\n        \"$_\",\n        \"$rpc\",\n        \"$alerts\",\n        function(e, t, n) {\n          var a = { version: \"\", enabledFeatures: [] };\n          return (\n            t.once(\"getVersion\", [], function(e) {\n              a = e[0];\n            }),\n            {\n              isFeatureEnabled: function(e) {\n                return -1 != a.enabledFeatures.indexOf(e);\n              },\n              getAria2Version: function() {\n                return a.version;\n              },\n              addUris: function(n, a, o) {\n                e.each(n, function(n) {\n                  var i = [],\n                    r = e.cloneDeep(a);\n                  e.each(n, function(e) {\n                    if (e.startsWith(\"--\")) {\n                      var t = e.split(/--|=(.*)/);\n                      t.length > 2 && (r[t[2]] = t[3] || \"true\");\n                    } else i.push(e);\n                  }),\n                    t.once(\"addUri\", [i, r], o, !0);\n                }),\n                  t.forceUpdate();\n              },\n              addTorrents: function(n, a, o) {\n                e.each(n, function(e) {\n                  t.once(\"addTorrent\", [e, [], a], o, !0);\n                }),\n                  t.forceUpdate();\n              },\n              addMetalinks: function(n, a, o) {\n                e.each(n, function(e) {\n                  t.once(\"addMetalink\", [e, a], o, !0);\n                }),\n                  t.forceUpdate();\n              }\n            }\n          );\n        }\n      ]).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a);\n    t.a = o.a\n      .module(\"webui.services.rpc.jsoncall\", [\"webui.services.deps\", \"webui.services.base64\"])\n      .factory(\"$jsoncall\", [\n        \"$\",\n        \"$json\",\n        \"$base64\",\n        function(e, t, n) {\n          return {\n            init: function(e) {\n              (this.avgTimeout = 2e3), (this.serverConf = e);\n            },\n            ariaRequest: function(n, a, o, i, r) {\n              var s = new Date(),\n                l = this;\n              e.post({\n                url: n,\n                timeout: this.avgTimeout,\n                contentType: \"application/json\",\n                data: t.stringify({ jsonrpc: 2, id: \"webui\", method: a, params: o }),\n                success: function(e) {\n                  return (l.avgTimeout = 2e3 + 3 * (new Date() - s)), i(e);\n                },\n                error: r\n              });\n            },\n            invoke: function(t) {\n              var n = this,\n                a = n.serverConf.encrypt ? \"https\" : \"http\";\n              n.ariaRequest(\n                a +\n                  \"://\" +\n                  n.serverConf.host +\n                  \":\" +\n                  n.serverConf.port +\n                  (n.serverConf.path || \"/jsonrpc\"),\n                t.name,\n                t.params,\n                t.success,\n                function() {\n                  if (!n.serverConf.auth || !n.serverConf.auth.user)\n                    return console.log(\"jsonrpc disconnect!!!\"), t.error();\n                  var o =\n                      a +\n                      \"://\" +\n                      n.serverConf.auth.user +\n                      \":\" +\n                      n.serverConf.auth.pass +\n                      \"@\" +\n                      n.serverConf.host +\n                      \":\" +\n                      n.serverConf.port +\n                      (n.serverConf.path || \"/jsonrpc\"),\n                    i = e(\"<img/>\").attr(\"src\", o);\n                  e(\"body\").append(i),\n                    i.remove(),\n                    setTimeout(function() {\n                      n.ariaRequest(o, t.name, t.params, t.success, function() {\n                        return console.log(\"jsonrpc disconnect!!!\"), t.error();\n                      });\n                    }, n.avgTimeout);\n                }\n              );\n            }\n          };\n        }\n      ]).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a);\n    t.a = o.a\n      .module(\"webui.services.rpc.sockcall\", [\n        \"webui.services.deps\",\n        \"webui.services.utils\",\n        \"webui.services.base64\",\n        \"webui.services.alerts\"\n      ])\n      .factory(\"$sockcall\", [\n        \"$_\",\n        \"$json\",\n        \"$name\",\n        \"$utils\",\n        \"$alerts\",\n        function(e, t, n, a, i) {\n          var r = {\n            initialized: !1,\n            handles: [],\n            sock: null,\n            conf: null,\n            scheme: \"ws\",\n            onerror: function(t) {\n              e.each(r.handles, function(e) {\n                e.error();\n              }),\n                (r.handles = []),\n                (r.initialized = !1),\n                r.onready && (r.onready(), (r.onready = null));\n            },\n            onclose: function(e) {\n              r.handles && r.handles.length && r.onerror(\"Connection reset while calling aria2\"),\n                (r.initialized = !1),\n                r.onready && (r.onready(), (r.onready = null));\n            },\n            onopen: function() {\n              console.log(\"websocket initialized!!!\"),\n                (r.initialized = !0),\n                r.onready && (r.onready(), (r.onready = null));\n            },\n            onmessage: function(e) {\n              for (var n = t.parse(e.data), a = r.handles.length - 1; a >= 0; a--)\n                if (r.handles[a].id === n.id)\n                  return r.handles[a].success(n), void r.handles.splice(a, 1);\n            },\n            invoke: function(e) {\n              var n = {\n                jsonrpc: 2,\n                id: a.uuid(),\n                method: e.name,\n                params: e.params && e.params.length ? e.params : void 0\n              };\n              n.params && !n.params.length && (n.params = void 0),\n                r.handles.push({\n                  success: e.success || o.a.noop,\n                  error: e.error || o.a.noop,\n                  id: n.id\n                }),\n                r.sock.send(t.stringify(n));\n            },\n            init: function(e, t) {\n              if (\n                ((r.initialized = !1),\n                r.onready && (r.onready(), (r.onready = null)),\n                \"undefined\" == typeof WebSocket)\n              )\n                return (\n                  i.addAlert(\"Web sockets are not supported! Falling back to JSONP.\", \"info\"),\n                  void t()\n                );\n              (r.conf = e || r.conf),\n                (r.scheme = r.conf.encrypt ? \"wss\" : \"ws\"),\n                r.sock &&\n                  ((r.sock.onopen = r.sock.onmessage = r.sock.onerror = r.sock.onclose = null),\n                  r.onerror({ message: \"Changing the websocket aria2 server details\" }));\n              try {\n                var n = r.scheme + \"://\" + e.host + \":\" + e.port + (e.path || \"/jsonrpc\");\n                r.conf.auth &&\n                  r.conf.auth.user &&\n                  r.conf.auth.pass &&\n                  (n =\n                    r.scheme +\n                    \"://\" +\n                    r.conf.auth.user +\n                    \":\" +\n                    r.conf.auth.pass +\n                    \"@\" +\n                    r.conf.host +\n                    \":\" +\n                    r.conf.port +\n                    (e.path || \"/jsonrpc\")),\n                  (r.sock = new WebSocket(n)),\n                  (r.sock.onopen = r.onopen),\n                  (r.sock.onclose = r.onclose),\n                  (r.sock.onerror = r.onerror),\n                  (r.sock.onmessage = r.onmessage),\n                  (r.onready = t);\n              } catch (e) {\n                console.log(\"not using websocket for aria2 rpc due to: \", e),\n                  i.addAlert(\"Web sockets not working due to \" + e.message, \"info\"),\n                  t();\n              }\n            }\n          };\n          return r;\n        }\n      ]).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a);\n    t.a = o.a\n      .module(\"webui.services.rpc.syscall\", [\n        \"webui.services.rpc.jsoncall\",\n        \"webui.services.rpc.sockcall\",\n        \"webui.services.utils\",\n        \"webui.services.alerts\"\n      ])\n      .factory(\"$syscall\", [\n        \"$log\",\n        \"$jsoncall\",\n        \"$sockcall\",\n        \"$alerts\",\n        function(e, t, n, a) {\n          return {\n            state: \"none\",\n            init: function(e) {\n              console.log(\"Syscall is initializing to\", e),\n                (this.state = \"initializing\"),\n                t.init(e);\n              var a = this;\n              n.init(e, function() {\n                console.log(\"Syscall is ready\"), (a.state = \"ready\");\n              });\n            },\n            invoke: function(e) {\n              return (\n                (e.success = e.success || o.a.noop),\n                (e.error = e.error || o.a.noop),\n                n.initialized ? n.invoke(e) : t.invoke(e)\n              );\n            }\n          };\n        }\n      ]).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a);\n    t.a = o.a\n      .module(\"webui.services.settings\", [])\n      .value(\"$fileSettings\", {\n        \"all-proxy\": {\n          val: \"\",\n          desc:\n            '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].'\n        },\n        \"all-proxy-passwd\": { val: \"\", desc: \"Set password for all-proxy option.\" },\n        \"all-proxy-user\": { val: \"\", desc: \"Set user for all-proxy option.\" },\n        \"allow-overwrite\": {\n          val: !1,\n          options: [\"true\", \"false\"],\n          desc:\n            \"Restart download from scratch if the corresponding control file doesn't exist. See also auto-file-renaming option. Default: false\"\n        },\n        \"allow-piece-length-change\": {\n          val: !1,\n          options: [\"true\", \"false\"],\n          desc:\n            \"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\"\n        },\n        \"always-resume\": {\n          val: !0,\n          options: [\"true\", \"false\"],\n          desc:\n            \"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\"\n        },\n        \"async-dns\": {\n          val: !0,\n          options: [\"true\", \"false\"],\n          desc: \"Enable asynchronous DNS. Default: true\"\n        },\n        \"auto-file-renaming\": {\n          val: !0,\n          options: [\"true\", \"false\"],\n          desc:\n            \"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\"\n        },\n        \"bt-detach-seed-only\": {\n          desc:\n            \"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\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"bt-enable-hook-after-hash-check\": {\n          desc:\n            \"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\",\n          val: !0,\n          options: [\"true\", \"false\"]\n        },\n        \"bt-enable-lpd\": {\n          desc:\n            \"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\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"bt-exclude-tracker\": {\n          val: \"\",\n          desc:\n            \"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.\"\n        },\n        \"bt-external-ip\": {\n          val: \"\",\n          desc:\n            \"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.\"\n        },\n        \"bt-force-encryption\": {\n          desc:\n            \"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\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"bt-hash-check-seed\": {\n          desc:\n            \"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\",\n          val: !0,\n          options: [\"true\", \"false\"]\n        },\n        \"bt-max-open-files\": {\n          val: 100,\n          desc: \"Specify maximum number of files to open in each BitTorrent download. Default: 100\"\n        },\n        \"bt-max-peers\": {\n          val: 55,\n          desc:\n            \"Specify the maximum number of peers per torrent. 0 means unlimited. See also bt-request-peer-speed-limit option. Default: 55\"\n        },\n        \"bt-metadata-only\": {\n          desc:\n            \"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\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"bt-min-crypto-level\": {\n          desc:\n            \"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\",\n          val: \"plain\",\n          options: [\"plain\", \"arc4\"]\n        },\n        \"bt-prioritize-piece\": {\n          val: \"\",\n          desc:\n            \"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.\"\n        },\n        \"bt-request-peer-speed-limit\": {\n          val: \"50K\",\n          desc:\n            \"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\"\n        },\n        \"bt-require-crypto\": {\n          desc:\n            \"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\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"bt-save-metadata\": {\n          desc:\n            \"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\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"bt-seed-unverified\": {\n          desc: \"Seed previously downloaded files without verifying piece hashes. Default: false\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"bt-stop-timeout\": {\n          val: 0,\n          desc:\n            \"Stop BitTorrent download if download speed is 0 in consecutive SEC seconds. If 0 is given, this feature is disabled. Default: 0\"\n        },\n        \"bt-tracker\": {\n          val: \"\",\n          desc:\n            \"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.\"\n        },\n        \"bt-tracker-connect-timeout\": {\n          val: 60,\n          desc:\n            \"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\"\n        },\n        \"bt-tracker-interval\": {\n          val: 0,\n          desc:\n            \"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\"\n        },\n        \"bt-tracker-timeout\": { val: 60, desc: \"Set timeout in seconds. Default: 60\" },\n        \"bt-remove-unselected-file\": {\n          desc:\n            \"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\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"check-certificate\": {\n          desc:\n            \"Verify the peer using certificates specified in --ca-certificate option. Default: true\",\n          val: !0,\n          options: [\"true\", \"false\"]\n        },\n        \"check-integrity\": {\n          desc:\n            \"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\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"conditional-get\": {\n          desc:\n            \"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\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"connect-timeout\": {\n          val: 60,\n          desc:\n            \"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\"\n        },\n        continue: {\n          desc:\n            \"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.\",\n          val: !0,\n          options: [\"true\", \"false\"]\n        },\n        daemon: {\n          desc:\n            \"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\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"deferred-input\": {\n          desc:\n            \"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\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        dir: { val: \"\", desc: \"The directory to store the downloaded file.\" },\n        \"disable-ipv6\": {\n          desc:\n            \"Disable IPv6. This is useful if you have to use broken DNS and want to avoid terribly slow AAAA record lookup. Default: false\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"dry-run\": {\n          desc:\n            \"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\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"enable-async-dns6\": {\n          desc:\n            \"Enable IPv6 name resolution in asynchronous DNS resolver. This option will be ignored when --async-dns=false. Default: false\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"enable-color\": {\n          desc: \"Enable color output for a terminal. Default: true\",\n          val: !0,\n          options: [\"true\", \"false\"]\n        },\n        \"enable-dht\": {\n          desc:\n            \"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\",\n          val: !0,\n          options: [\"true\", \"false\"]\n        },\n        \"enable-dht6\": {\n          desc:\n            \"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.\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"enable-http-keep-alive\": {\n          desc: \"Enable HTTP/1.1 persistent connection. Default: true\",\n          val: !0,\n          options: [\"true\", \"false\"]\n        },\n        \"enable-http-pipelining\": {\n          desc: \"Enable HTTP/1.1 pipelining. Default: false\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"enable-peer-exchange\": {\n          desc:\n            \"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\",\n          val: !0,\n          options: [\"true\", \"false\"]\n        },\n        \"enable-mmap\": {\n          desc:\n            \"Map files into memory. This option may not work if the file space is not pre-allocated. See --file-allocation. Default: false\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"enable-rpc\": {\n          desc:\n            \"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\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"file-allocation\": {\n          desc:\n            \"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\",\n          val: void 0,\n          options: [\"none\", \"prealloc\", \"falloc\", \"trunc\"]\n        },\n        \"follow-metalink\": {\n          desc:\n            \"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\",\n          val: !0,\n          options: [\"true\", \"false\"]\n        },\n        \"follow-torrent\": {\n          desc:\n            \"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\",\n          val: !0,\n          options: [\"true\", \"false\"]\n        },\n        \"force-save\": {\n          desc:\n            \"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\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"ftp-passwd\": {\n          val: \"ARIA2USER@\",\n          desc:\n            \"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@\"\n        },\n        \"ftp-pasv\": {\n          desc:\n            \"Use the passive mode in FTP. If false is given, the active mode will be used. Default: true\",\n          val: !0,\n          options: [\"true\", \"false\"]\n        },\n        \"ftp-proxy\": {\n          val: \"\",\n          desc:\n            '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].'\n        },\n        \"ftp-proxy-passwd\": { val: \"\", desc: \"Set password for --ftp-proxy option.\" },\n        \"ftp-proxy-user\": { val: \"\", desc: \"Set user for --ftp-proxy option.\" },\n        \"ftp-reuse-connection\": {\n          desc: \"Reuse connection in FTP. Default: true.\",\n          val: !0,\n          options: [\"true\", \"false\"]\n        },\n        \"ftp-type\": {\n          desc: \"Set FTP transfer type. TYPE is either binary or ascii. Default: binary\",\n          val: \"binary\",\n          options: [\"binary\", \"ascii\"]\n        },\n        \"ftp-user\": {\n          val: \"anonymous\",\n          desc: \"Set FTP user. This affects all URIs. Default: anonymous\"\n        },\n        header: { val: \"\", desc: \"Append HEADER to HTTP request header.\", multiline: !0 },\n        \"http-accept-gzip\": {\n          desc:\n            \"Send Accept: deflate, gzip request header and inflate response if remote server responds with Content-Encoding: gzip or Content-Encoding: deflate. Default: false\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"http-auth-challenge\": {\n          desc:\n            \"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\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"http-no-cache\": {\n          desc:\n            \"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\",\n          val: !0,\n          options: [\"true\", \"false\"]\n        },\n        \"http-user\": { val: \"\", desc: \"Set HTTP username.\" },\n        \"http-passwd\": { val: \"\", desc: \"Set HTTP password.\" },\n        \"http-proxy\": {\n          val: \"\",\n          desc:\n            '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].'\n        },\n        \"http-proxy-passwd\": { val: \"\", desc: \"Set password for --http-proxy option.\" },\n        \"http-proxy-user\": { val: \"\", desc: \"Set user for --http-proxy option.\" },\n        \"human-readable\": {\n          desc:\n            \"Print sizes and speed in human readable format (e.g., 1.2Ki, 3.4Mi) in the console readout. Default: true\",\n          val: !0,\n          options: [\"true\", \"false\"]\n        },\n        \"index-out\": {\n          val: void 0,\n          desc:\n            \"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.\"\n        },\n        \"lowest-speed-limit\": {\n          val: \"0\",\n          desc:\n            \"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\"\n        },\n        \"max-connection-per-server\": {\n          val: 1,\n          desc: \"The maximum number of connections to one server for each download. Default: 1\"\n        },\n        \"max-download-limit\": {\n          val: \"0\",\n          desc:\n            \"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\"\n        },\n        \"max-file-not-found\": {\n          val: 0,\n          desc:\n            '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'\n        },\n        \"max-resume-failure-tries\": {\n          val: 0,\n          desc:\n            \"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\"\n        },\n        \"max-tries\": {\n          val: 0,\n          desc: \"Set number of tries. 0 means unlimited. See also --retry-wait. Default: 5\"\n        },\n        \"max-upload-limit\": {\n          val: \"0\",\n          desc:\n            \"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\"\n        },\n        \"metalink-enable-unique-protocol\": {\n          desc:\n            \"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\",\n          val: !0,\n          options: [\"true\", \"false\"]\n        },\n        \"metalink-language\": { val: \"\", desc: \"The language of the file to download.\" },\n        \"metalink-location\": {\n          val: \"\",\n          desc:\n            \"The location of the preferred server. A comma-delimited list of locations is acceptable, for example, jp,us.\"\n        },\n        \"metalink-os\": { val: \"\", desc: \"The operating system of the file to download.\" },\n        \"metalink-version\": { val: \"\", desc: \"The version of the file to download.\" },\n        \"min-split-size\": {\n          val: \"20M\",\n          desc:\n            \"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\"\n        },\n        \"no-conf\": {\n          desc: \"Disable loading aria2.conf file.\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"no-file-allocation-limit\": {\n          val: \"5M\",\n          desc:\n            \"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\"\n        },\n        \"no-netrc\": {\n          desc:\n            \"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.\",\n          val: !0,\n          options: [\"true\", \"false\"]\n        },\n        \"no-proxy\": {\n          val: \"\",\n          desc:\n            \"Specify comma separated hostnames, domains and network address with or without CIDR block where proxy should not be used.\"\n        },\n        out: {\n          val: \"\",\n          desc:\n            \"The file name of the downloaded file. When --force-sequential option is used, this option is ignored.\"\n        },\n        \"parameterized-uri\": {\n          desc:\n            \"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\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"pause-metadata\": {\n          desc:\n            \"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\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"proxy-method\": {\n          desc:\n            \"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\",\n          val: \"get\",\n          options: [\"get\", \"tunnel\"]\n        },\n        quiet: {\n          desc: \"Make aria2 quiet (no console output). Default: false\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"realtime-chunk-checksum\": {\n          desc:\n            \"Validate chunk of data by calculating checksum while downloading a file if chunk checksums are provided. Default: true\",\n          val: !0,\n          options: [\"true\", \"false\"]\n        },\n        referer: { val: \"\", desc: \"Set Referer. This affects all URIs.\" },\n        \"remote-time\": {\n          desc:\n            \"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\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"remove-control-file\": {\n          desc:\n            \"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.\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"reuse-uri\": {\n          desc: \"Reuse already used URIs if no unused URIs are left. Default: true\",\n          val: !0,\n          options: [\"true\", \"false\"]\n        },\n        \"seed-ratio\": {\n          val: 0,\n          desc:\n            \"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\"\n        },\n        \"seed-time\": {\n          val: 0,\n          desc:\n            \"Specify seeding time in minutes. Also see the --seed-ratio option. Note Specifying --seed-time=0 disables seeding after download completed.\"\n        },\n        \"select-file\": {\n          val: \"\",\n          desc:\n            \"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 .\"\n        },\n        split: {\n          val: 5,\n          desc:\n            \"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\"\n        },\n        timeout: { val: 60, desc: \"Set timeout in seconds. Default: 60\" },\n        \"use-head\": {\n          desc: \"Use HEAD method for the first request to the HTTP server. Default: false\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"user-agent\": {\n          val: \"aria2/$VERSION\",\n          desc:\n            \"Set user agent for HTTP(S) downloads. Default: aria2/$VERSION, $VERSION is replaced by package version.\"\n        },\n        \"retry-wait\": {\n          val: 0,\n          desc:\n            \"Set the seconds to wait between retries. With SEC > 0, aria2 will retry download when the HTTP server returns 503 response. Default: 0.\"\n        },\n        \"metalink-base-uri\": {\n          val: \"\",\n          desc:\n            \"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 /.\"\n        },\n        pause: {\n          desc:\n            \"Pause download after added. This option is effective only when --enable-rpc=true is given. Default: false\",\n          val: \"false\",\n          options: [\"true\", \"false\"]\n        },\n        \"rpc-allow-origin-all\": {\n          desc:\n            \"Add Access-Control-Allow-Origin header field with value * to the RPC response. Default: false\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"rpc-listen-all\": {\n          desc:\n            \"Listen incoming JSON-RPC/XML-RPC requests on all network interfaces. If false is given, listen only on local loopback interface. Default: false\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"rpc-secure\": {\n          desc:\n            \"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.\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"stream-piece-selector\": {\n          desc:\n            \"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\",\n          val: \"default\",\n          options: [\"default\", \"inorder\", \"geom\"]\n        },\n        \"show-console-readout\": {\n          desc: \"Show console readout. Default: true\",\n          val: !0,\n          options: [\"true\", \"false\"]\n        },\n        \"show-files\": {\n          desc:\n            \"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.\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        \"truncate-console-readout\": {\n          desc: \"Truncate console readout to fit in a single line. Default: true\",\n          val: !0,\n          options: [\"true\", \"false\"]\n        },\n        \"hash-check-only\": {\n          desc:\n            \"If true is given, after hash check using --check-integrity option, abort download whether or not download is complete. Default: false\",\n          val: !1,\n          options: [\"true\", \"false\"]\n        },\n        checksum: {\n          val: void 0,\n          desc:\n            \"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.\"\n        },\n        \"piece-length\": {\n          val: \"1M\",\n          desc:\n            \"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\"\n        },\n        \"uri-selector\": {\n          desc:\n            \"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\",\n          val: \"feedback\",\n          options: [\"inorder\", \"feedback\", \"adaptive\"]\n        }\n      })\n      .value(\"$globalSettings\", {\n        \"download-result\": {\n          desc:\n            \"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\",\n          val: \"default\",\n          options: [\"default\", \"full\"]\n        },\n        log: {\n          val: \"\",\n          desc:\n            '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.'\n        },\n        \"log-level\": {\n          desc:\n            \"Set log level to output. LEVEL is either debug, info, notice, warn or error. Default: debug.\",\n          val: \"debug\",\n          options: [\"debug\", \"info\", \"notice\", \"warn\", \"error\"]\n        },\n        \"max-concurrent-downloads\": {\n          val: 5,\n          desc:\n            \"Set maximum number of parallel downloads for every static (HTTP/FTP) URI, torrent and metalink. See also --split option. Default: 5\"\n        },\n        \"max-download-result\": {\n          val: 1e3,\n          desc:\n            \"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\"\n        },\n        \"max-overall-download-limit\": {\n          val: \"0\",\n          desc:\n            \"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.\"\n        },\n        \"max-overall-upload-limit\": {\n          val: \"0\",\n          desc:\n            \"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.\"\n        },\n        \"save-cookies\": {\n          val: \"\",\n          desc:\n            \"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.\"\n        },\n        \"save-session\": {\n          val: \"\",\n          desc:\n            \"Save error/unfinished downloads to FILE on exit. You can pass this output file to aria2c with --input-file option on restart.\"\n        },\n        \"server-stat-of\": {\n          val: \"\",\n          desc:\n            \"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.\"\n        }\n      })\n      .value(\"$globalExclude\", [\"checksum\", \"index-out\", \"out\", \"pause\", \"select-file\"])\n      .value(\"$waitingExclude\", [\n        \"dry-run\",\n        \"metalink-base-uri\",\n        \"parameterized-uri\",\n        \"pause\",\n        \"piece-length\"\n      ])\n      .value(\"$activeInclude\", [\n        \"bt-max-peers\",\n        \"bt-request-peer-speed-limit\",\n        \"bt-remove-unselected-file\",\n        \"max-download-limit\",\n        \"max-upload-limit\"\n      ]).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a);\n    t.a = o.a\n      .module(\"webui.services.settings.filters\", [])\n      .value(\"$globalsettingsexclude\", [\"checksum\", \"index-out\", \"out\", \"pause\", \"select-file\"])\n      .value(\"$waitingsettingsexclude\", [\n        \"dry-run\",\n        \"metalink-base-uri\",\n        \"parameterized-uri\",\n        \"pause\",\n        \"piece-length\"\n      ])\n      .value(\"$activesettingsfilter\", [\n        \"bt-max-peers\",\n        \"bt-request-peer-speed-limit\",\n        \"bt-remove-unselected-file\",\n        \"max-download-limit\",\n        \"max-upload-limit\"\n      ]).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a);\n    t.a = o.a.module(\"webui.services.modals\", []).factory(\"$modals\", function() {\n      var e = {};\n      return {\n        register: function(t, n) {\n          e[t] = n;\n        },\n        invoke: function(t, n) {\n          if (!e[t]) return !1;\n          var a = Array.prototype.slice.call(arguments, 1);\n          return e[t].apply({}, a);\n        }\n      };\n    }).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a);\n    t.a = o.a.module(\"webui.services.utils\", [\"webui.services.configuration\"]).factory(\"$utils\", [\n      \"$filter\",\n      \"$name\",\n      \"$titlePattern\",\n      function(e, t, n) {\n        var a = (function() {\n            var e = new Uint8Array(16),\n              t = function() {\n                for (var t, n = 0; n < 16; n++)\n                  n % 3 || (t = (4294967296 * Math.random()) | 0),\n                    (e[n] = (t >>> ((3 & n) << 3)) & 255);\n                return e;\n              };\n            return window.crypto && crypto.getRandomValues\n              ? function() {\n                  try {\n                    return crypto.getRandomValues(e), e;\n                  } catch (e) {\n                    return t();\n                  }\n                }\n              : t;\n          })(),\n          o = {\n            fmtsize: function(e) {\n              return (e = +e) <= 1024\n                ? e.toFixed(0) + \" B\"\n                : (e /= 1024) <= 1024\n                  ? e.toFixed(1) + \" KB\"\n                  : (e /= 1024) <= 1024\n                    ? e.toFixed(2) + \" MB\"\n                    : (e /= 1024).toFixed(3) + \" GB\";\n            },\n            fmtspeed: function(e) {\n              return o.fmtsize(e) + \"/s\";\n            },\n            setCookie: function(e, t) {\n              var n = new Date();\n              n.setDate(n.getDate() + 360);\n              var a = escape(JSON.stringify(t)) + \"; expires=\" + n.toUTCString();\n              document.cookie = e + \"=\" + a;\n            },\n            getCookie: function(e) {\n              for (var t = document.cookie.split(\";\"), n = 0; n < t.length; n++) {\n                var a = t[n].substr(0, t[n].indexOf(\"=\")).replace(/^\\s+|\\s+$/g, \"\"),\n                  o = t[n].substr(t[n].indexOf(\"=\") + 1);\n                if (e == a) return JSON.parse(unescape(o));\n              }\n              return null;\n            },\n            getFileName: function(e) {\n              var t = e.split(/[/\\\\]/);\n              return t[t.length - 1];\n            },\n            uuid: (function() {\n              for (var e = [], t = 0; t < 256; ++t) e.push((t + 256).toString(16).substr(1));\n              return (\n                Object.freeze(e),\n                function() {\n                  var t = a();\n                  return (\n                    (t[6] = (15 & t[6]) | 64),\n                    (t[8] = (63 & t[8]) | 128),\n                    e[t[0]] +\n                      e[t[1]] +\n                      e[t[2]] +\n                      e[t[3]] +\n                      \"-\" +\n                      e[t[4]] +\n                      e[t[5]] +\n                      \"-\" +\n                      e[t[6]] +\n                      e[t[7]] +\n                      \"-\" +\n                      e[t[8]] +\n                      e[t[9]] +\n                      \"-\" +\n                      e[t[10]] +\n                      e[t[11]] +\n                      e[t[12]] +\n                      e[t[13]] +\n                      e[t[14]] +\n                      e[t[15]]\n                  );\n                }\n              );\n            })(),\n            randStr: function() {\n              return o.uuid();\n            },\n            mergeMap: function(e, t, n) {\n              t || (t = []);\n              for (var a = 0, o = Math.min(e.length, t.length); a < o; ++a) n(e[a], t[a]);\n              for (; a < e.length; ) t.push(n(e[a++]));\n              return (t.length = e.length), t;\n            },\n            getTitle: function(e) {\n              return (\n                e || (e = {}),\n                n\n                  .replace(\"{active}\", e.numActive || \"⌛\")\n                  .replace(\"{waiting}\", e.numWaiting || \"⌛\")\n                  .replace(\"{download_speed}\", o.fmtspeed(e.downloadSpeed) || \"⌛\")\n                  .replace(\"{upload_speed}\", o.fmtspeed(e.uploadSpeed) || \"⌛\")\n                  .replace(\"{stopped}\", e.numStopped || \"⌛\")\n                  .replace(\"{name}\", t)\n              );\n            },\n            getChunksFromHex: function(e, t) {\n              var n = [],\n                a = 0,\n                o = parseInt(t);\n              if (!e) return [];\n              if (o > 1)\n                for (var i = 1 / o, r = 0, s = 0; s < e.length; s++)\n                  for (var l = parseInt(e[s], 16), c = 1; c <= 4; c++) {\n                    var d = l & (1 << (4 - c));\n                    d && 0;\n                    var u = !!d;\n                    if (\n                      (a >= 1 && n[a - 1].show == u\n                        ? (n[a - 1].ratio += i)\n                        : (n.push({ ratio: i, show: u }), a++),\n                      ++r == o)\n                    )\n                      return n;\n                  }\n              return n;\n            }\n          };\n        return o;\n      }\n    ]).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a);\n    t.a = o.a\n      .module(\"webui.filters.bytes\", [\"webui.services.utils\"])\n      .filter(\"blength\", [\n        \"$filter\",\n        \"$utils\",\n        function(e, t) {\n          return t.fmtsize;\n        }\n      ])\n      .filter(\"bspeed\", [\n        \"$filter\",\n        \"$utils\",\n        function(e, t) {\n          return t.fmtspeed;\n        }\n      ])\n      .filter(\"time\", function() {\n        function e(e) {\n          return (\"0\" + e).substr(-2);\n        }\n        return function(t) {\n          if (!(t = parseInt(t, 10)) || !isFinite(t)) return \"∞\";\n          var n = t % 60;\n          if (t < 60) return n + \"s\";\n          var a = Math.floor((t % 3600) / 60);\n          if (t < 3600) return e(a) + \":\" + e(n);\n          var o = Math.floor((t % 86400) / 3600);\n          return t < 86400\n            ? e(o) + \":\" + e(a) + \":\" + e(n)\n            : Math.floor(t / 86400) + \"::\" + e(o) + \":\" + e(a) + \":\" + e(n);\n        };\n      }).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a);\n    t.a = o.a.module(\"webui.filters.url\", [\"webui.services.utils\"]).filter(\"encodeURI\", function() {\n      return window.encodeURI;\n    }).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a);\n    t.a = o.a.module(\"webui.directives.chunkbar\", [\"webui.services.utils\"]).directive(\"chunkbar\", [\n      \"$utils\",\n      function(e) {\n        return function(t, n, a) {\n          var o = \"\",\n            i = 0,\n            r = !0,\n            s = function() {\n              r &&\n                (function(e, t, n) {\n                  if (((t = t || []), e.getContext)) {\n                    var a = e.getContext(\"2d\");\n                    (a.fillStyle = n || \"#149BDF\"), a.clearRect(0, 0, e.width, e.height);\n                    var o = 0,\n                      i = e.width,\n                      r = e.height;\n                    t.forEach(function(e) {\n                      var t = e.ratio * i;\n                      e.show && a.fillRect(o, 0, t, r), (o += t);\n                    });\n                  } else console.log(\"use chunk bar on an canvas implementation!\");\n                })(n[0], e.getChunksFromHex(o, i), a.fillStyle);\n            };\n          t.$watch(a.bitfield, function(e) {\n            (o = e), s();\n          }),\n            t.$watch(a.pieces, function(e) {\n              (i = e), s();\n            }),\n            a.draw &&\n              t.$watch(a.draw, function(e) {\n                r = e;\n              }),\n            s();\n        };\n      }\n    ]).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a);\n    t.a = o.a\n      .module(\"webui.directives.dgraph\", [\"webui.filters.bytes\", \"webui.services.deps\"])\n      .directive(\"dgraph\", [\n        \"$\",\n        \"$filter\",\n        \"$parse\",\n        function(e, t, n) {\n          var a = \"%H:%M:%S\";\n          try {\n            /16/.test(new Date(2e3, 0, 1, 16, 7, 9).toLocaleTimeString()) || (a = \"%I:%M:%S %P\");\n          } catch (e) {}\n          return function(n, i, r) {\n            var s = !1,\n              l = 180,\n              c = 0,\n              d = 0,\n              u = !1,\n              p = { label: \"DOWN\", data: [], color: \"#00ff00\", lines: { show: !0 } },\n              h = { label: \"UP\", data: [], color: \"#0000ff\", lines: { show: !0 } };\n            i.height(0.6 * i.width());\n            var f = e.plot(i, [p, h], {\n                legend: {\n                  show: void 0 == r.nolabel,\n                  backgroundOpacity: 0,\n                  margin: [10, 20],\n                  labelFormatter: function(e, n) {\n                    return n.data.length\n                      ? e + \" (\" + t(\"bspeed\")(n.data[n.data.length - 1][1]) + \")\"\n                      : e;\n                  },\n                  position: \"sw\"\n                },\n                xaxis: {\n                  show: !0,\n                  mode: \"time\",\n                  timeformat: a,\n                  ticks: +r.xticks || 10,\n                  minTickSize: [30, \"second\"]\n                },\n                yaxis: {\n                  position: \"right\",\n                  ticks: function(e) {\n                    for (\n                      var t = [0],\n                        n = +r.yticks || yticks,\n                        a = 10240 * Math.max(1, Math.ceil(e.max / (10240 * n))),\n                        o = 0;\n                      o < n;\n                      o++\n                    ) {\n                      if (a * o > e.max) break;\n                      t.push(a * o);\n                    }\n                    return t;\n                  },\n                  tickFormatter: function(e, n) {\n                    return t(\"bspeed\")(e);\n                  },\n                  min: 0\n                }\n              }),\n              m = function() {\n                var e = i.width();\n                0 != e &&\n                  (i.height(0.6 * e), f.setData([p, h]), f.resize(), f.setupGrid(), f.draw());\n              };\n            n.$watch(r.dspeed, function(e) {\n              void 0 !== e && ((u = !0), (c = parseFloat(e) || 0));\n            }),\n              n.$watch(r.uspeed, function(e) {\n                void 0 !== e && ((u = !0), (d = parseFloat(e) || 0));\n              }),\n              n.$watch(r.draw, function(e) {\n                s = e;\n              });\n            var g = setInterval(function() {\n              if (u) {\n                var e = new Date();\n                (e = Date.UTC(\n                  e.getFullYear(),\n                  e.getMonth(),\n                  e.getDate(),\n                  e.getHours(),\n                  e.getMinutes(),\n                  e.getSeconds()\n                )),\n                  p.data.length === l && p.data.shift(),\n                  p.data.push([e, c]),\n                  h.data.length === l && h.data.shift(),\n                  h.data.push([e, d]),\n                  s && m();\n              }\n            }, 1e3);\n            o.a.element(window).bind(\"resize\", m),\n              i.bind(\"$destroy\", function() {\n                clearInterval(g);\n              });\n          };\n        }\n      ]).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a);\n    t.a = o.a.module(\"webui.directives.fselect\", [\"webui.services.deps\"]).directive(\"fselect\", [\n      \"$parse\",\n      function(e) {\n        return function(t, n, a) {\n          var o = e(a.fselect || a.files).assign;\n          n.bind(\"change\", function() {\n            o(t, n[0].files);\n          }).filestyle({ placeholder: \"No file selected\" });\n        };\n      }\n    ]).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a);\n    t.a = o.a\n      .module(\"webui.directives.fileselect\", [\"webui.services.deps\"])\n      .directive(\"indeterminate\", [\n        \"$parse\",\n        function(e) {\n          return {\n            require: \"ngModel\",\n            restrict: \"A\",\n            link: function(t, n, a, o) {\n              var i = e(a.ngModel),\n                r = [],\n                s = 0,\n                l = 0,\n                c = function() {\n                  return i(t);\n                },\n                d = function(e) {\n                  n.prop(\"indeterminate\", e);\n                },\n                u = function(e) {\n                  o.$setViewValue(e), o.$render();\n                },\n                p = function(e) {\n                  return function() {\n                    r.length > 0 && e.apply(this, arguments);\n                  };\n                },\n                h = function(e) {\n                  return function() {\n                    0 === r.length && e.apply(this, arguments);\n                  };\n                },\n                f = function(e) {\n                  return function(t) {\n                    if (t.targetScope !== t.currentScope) return e.apply(this, arguments);\n                  };\n                };\n              if (\n                (a.indeterminate && e(a.indeterminate).constant && d(t.$eval(a.indeterminate)),\n                a.indeterminate && e(a.indeterminate).constant && !t.$eval(a.indeterminate))\n              )\n                o.$viewChangeListeners.push(\n                  h(function() {\n                    t.$emit(\"childSelectedChange\", c());\n                  })\n                ),\n                  t.$on(\n                    \"ParentSelectedChange\",\n                    f(\n                      h(function(e, t) {\n                        u(t);\n                      })\n                    )\n                  ),\n                  t.$emit(\"i'm child input\", c),\n                  t.$emit(\"childSelectedChange\", c());\n              else {\n                t.$on(\n                  \"i'm child input\",\n                  f(function(e, t) {\n                    r.push(t);\n                  })\n                );\n                o.$viewChangeListeners.push(\n                  p(\n                    (function(e) {\n                      return function() {\n                        if (!n.prop(\"indeterminate\")) return e.apply(this, arguments);\n                      };\n                    })(function() {\n                      t.$broadcast(\"ParentSelectedChange\", c());\n                    })\n                  )\n                ),\n                  t.$on(\n                    \"childSelectedChange\",\n                    f(\n                      p(function(e, t) {\n                        if (s + l !== r.length) {\n                          (s = 0), (l = 0);\n                          for (var n = 0; n < r.length; n++) r[n]() ? (s += 1) : (l += 1);\n                        } else t ? (s++, l--) : (s--, l++);\n                        var a = 0 === l;\n                        d(a !== s > 0), u(a);\n                      })\n                    )\n                  );\n              }\n            }\n          };\n        }\n      ]).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    t.a = function() {\n      return {\n        restrict: \"E\",\n        link: function(e, t) {\n          t.attr(\"placeholder\", function(e, t) {\n            return void 0 !== t ? t.replace(/\\\\n/g, \"\\n\") : t;\n          }).bind(\"keydown keypress\", function(t) {\n            t.ctrlKey && 13 === t.which && (t.preventDefault(), e.$close());\n          });\n        }\n      };\n    };\n  },\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a);\n    t.a = o.a.module(\"webui.ctrls.alert\", [\"webui.services.alerts\"]).controller(\"AlertCtrl\", [\n      \"$scope\",\n      \"$alerts\",\n      \"$sce\",\n      function(e, t, n) {\n        (e.pendingAlerts = []),\n          (e.removeAlert = function(e) {\n            this.pendingAlerts.splice(e, 1);\n          }),\n          t.addAlerter(function(t, a) {\n            a = a || \"warning\";\n            var o = { msg: n.trustAsHtml(t), type: a };\n            (e.pendingAlerts = _.filter(e.pendingAlerts, function(e) {\n              return !e.expired;\n            })),\n              e.pendingAlerts.push(o),\n              setTimeout(function() {\n                var t = e.pendingAlerts.indexOf(o);\n                -1 != t &&\n                  ((e.pendingAlerts[t].expired = !0),\n                  e.pendingAlerts.length > 0 && e.removeAlert(t));\n              }, \"error\" == a ? 15e3 : 5e3),\n              e.$digest();\n          });\n      }\n    ]).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a);\n    t.a = o.a\n      .module(\"webui.ctrls.download\", [\n        \"ui.bootstrap\",\n        \"webui.services.utils\",\n        \"webui.services.rpc\",\n        \"webui.services.rpc.helpers\",\n        \"webui.services.alerts\",\n        \"webui.services.settings\",\n        \"webui.services.modals\",\n        \"webui.services.configuration\",\n        \"webui.services.errors\"\n      ])\n      .controller(\"MainCtrl\", [\n        \"$scope\",\n        \"$name\",\n        \"$enable\",\n        \"$rpc\",\n        \"$rpchelpers\",\n        \"$utils\",\n        \"$alerts\",\n        \"$modals\",\n        \"$fileSettings\",\n        \"$activeInclude\",\n        \"$waitingExclude\",\n        \"$pageSize\",\n        \"$getErrorStatus\",\n        \"$rootScope\",\n        \"$filter\",\n        function(e, t, n, a, o, i, r, s, l, c, d, u, p, h, f) {\n          (e.name = t), (e.enable = n);\n          var m = /\\\\/g,\n            g = [];\n          (e.active = []),\n            (e.waiting = []),\n            (e.stopped = []),\n            (e.gstats = {}),\n            (e.hideLinkedMetadata = !0),\n            (e.propFilter = \"\"),\n            (e.pause = function(e) {\n              a.once(\"forcePause\", [e.gid]);\n            }),\n            (e.resume = function(e) {\n              a.once(\"unpause\", [e.gid]);\n            }),\n            (e.restart = function(t) {\n              a.once(\"getOption\", [t.gid], function(n) {\n                var i = n[0];\n                a.once(\"getFiles\", [t.gid], function(n) {\n                  var a = n[0],\n                    r = _.chain(a)\n                      .map(function(e) {\n                        return e.uris;\n                      })\n                      .filter(function(e) {\n                        return e && e.length;\n                      })\n                      .map(function(e) {\n                        return _.chain(e)\n                          .map(function(e) {\n                            return e.uri;\n                          })\n                          .uniq()\n                          .value();\n                      })\n                      .value();\n                  r.length > 0 &&\n                    (console.log(\"adding uris:\", r, i),\n                    e.remove(\n                      t,\n                      function() {\n                        o.addUris(r, i);\n                      },\n                      !0\n                    ));\n                });\n              });\n            }),\n            (e.canRestart = function(e) {\n              return -1 == [\"active\", \"paused\"].indexOf(e.status) && !e.bittorrent;\n            }),\n            (e.remove = function(t, n, o) {\n              setTimeout(function() {\n                if (\n                  o ||\n                  confirm(\n                    f(\"translate\")(\"Remove {{name}} and associated meta-data?\", { name: t.name })\n                  )\n                ) {\n                  var i = \"remove\";\n                  \"stopped\" == e.getType(t) && (i = \"removeDownloadResult\"),\n                    t.followedFrom &&\n                      (e.remove(t.followedFrom, function() {}, !0), (t.followedFrom = null)),\n                    a.once(i, [t.gid], n);\n                  for (var r = [e.active, e.waiting, e.stopped], s = 0; s < r.length; ++s) {\n                    var l = r[s],\n                      c = l.indexOf(t);\n                    if (!(c < 0)) return void l.splice(c, 1);\n                  }\n                }\n              }, 0);\n            }),\n            a.subscribe(\"tellActive\", [], function(t) {\n              e.$apply(function() {\n                i.mergeMap(t[0], e.active, e.getCtx);\n              });\n            }),\n            a.subscribe(\"tellWaiting\", [0, 1e3], function(t) {\n              e.$apply(function() {\n                i.mergeMap(t[0], e.waiting, e.getCtx);\n              });\n            }),\n            a.subscribe(\"tellStopped\", [0, 1e3], function(t) {\n              e.$apply(function() {\n                if (e.hideLinkedMetadata) {\n                  i.mergeMap(t[0], g, e.getCtx);\n                  var n = {};\n                  _.forEach(g, function(e) {\n                    n[e.gid] = e;\n                  }),\n                    _.forEach(e.active, function(e) {\n                      n[e.gid] = e;\n                    }),\n                    _.forEach(e.waiting, function(e) {\n                      n[e.gid] = e;\n                    }),\n                    (e.stopped = _.filter(g, function(e) {\n                      return (\n                        !(e.metadata && e.followedBy && e.followedBy in n) ||\n                        ((n[e.followedBy].followedFrom = e), !1)\n                      );\n                    }));\n                } else i.mergeMap(t[0], e.stopped, e.getCtx);\n              });\n            }),\n            (h.pageTitle = i.getTitle()),\n            a.subscribe(\"getGlobalStat\", [], function(t) {\n              e.$apply(function() {\n                (e.gstats = t[0]), (h.pageTitle = i.getTitle(e.gstats));\n              });\n            }),\n            a.once(\"getVersion\", [], function(t) {\n              e.$apply(function() {\n                e.miscellaneous = t[0];\n              });\n            }),\n            (e.totalDownloads = 0),\n            (e.downloadFilter = \"\"),\n            (e.downloadFilterCommitted = \"\"),\n            (e.onDownloadFilter = function() {\n              e.downloadFilterTimer && clearTimeout(e.downloadFilterTimer),\n                (e.downloadFilterTimer = setTimeout(function() {\n                  delete e.downloadFilterTimer,\n                    e.downloadFilterCommitted !== e.downloadFilter &&\n                      ((e.downloadFilterCommitted = e.downloadFilter), e.$digest());\n                }, 500));\n            }),\n            (e.filterDownloads = function(t) {\n              if (!e.downloadFilterCommitted) return t;\n              var n = e.downloadFilterCommitted\n                .replace(/[{}()\\[\\]\\\\^$.?]/g, \"\\\\$&\")\n                .replace(/\\*/g, \".*\")\n                .replace(/\\./g, \".\");\n              return (\n                (n = new RegExp(n, \"i\")),\n                _.filter(t, function(e) {\n                  return (\n                    !!n.test(e.name) ||\n                    _.filter(e.files, function(e) {\n                      return n.test(e.relpath);\n                    }).length\n                  );\n                })\n              );\n            }),\n            (e.clearFilter = function() {\n              e.downloadFilter = e.downloadFilterCommitted = \"\";\n            }),\n            (e.toggleStateFilters = function() {\n              (e.filterSpeed = !e.filterSpeed),\n                (e.filterActive = !e.filterActive),\n                (e.filterWaiting = !e.filterWaiting),\n                (e.filterComplete = !e.filterComplete),\n                (e.filterError = !e.filterError),\n                (e.filterPaused = !e.filterPaused),\n                (e.filterRemoved = !e.filterRemoved),\n                e.persistFilters();\n            }),\n            (e.resetFilters = function() {\n              (e.filterSpeed = e.filterActive = e.filterWaiting = e.filterComplete = e.filterError = e.filterPaused = e.filterRemoved = !0),\n                e.clearFilter(),\n                e.persistFilters();\n            }),\n            (e.persistFilters = function() {\n              var t = JSON.stringify({\n                s: e.filterSpeed,\n                a: e.filterActive,\n                w: e.filterWaiting,\n                c: e.filterComplete,\n                e: e.filterError,\n                p: e.filterPaused,\n                r: e.filterRemoved\n              });\n              i.setCookie(\"aria2filters\", t);\n            }),\n            (e.loadFilters = function() {\n              var t = JSON.parse(i.getCookie(\"aria2filters\"));\n              t\n                ? ((e.filterSpeed = !!t.s),\n                  (e.filterActive = !!t.a),\n                  (e.filterWaiting = !!t.w),\n                  (e.filterComplete = !!t.c),\n                  (e.filterError = !!t.e),\n                  (e.filterPaused = !!t.p),\n                  (e.filterRemoved = !!t.r))\n                : e.resetFilters();\n            }),\n            e.loadFilters(),\n            (e.toggleCollapsed = function(t) {\n              if (!t.collapsed)\n                return (\n                  (t.animCollapsed = !0),\n                  void setTimeout(function() {\n                    e.$apply(function() {\n                      t.collapsed = !0;\n                    });\n                  }, 500)\n                );\n              (t.collapsed = !1),\n                setTimeout(function() {\n                  e.$apply(function() {\n                    t.animCollapsed = !1;\n                  });\n                }, 0);\n            }),\n            (e.pageSize = u),\n            (e.currentPage = 1),\n            (e.totalAria2Downloads = function() {\n              return e.active.length + e.waiting.length + e.stopped.length;\n            }),\n            (e.getErrorStatus = function(e) {\n              return p(+e);\n            }),\n            (e.getDownloads = function() {\n              var t = [];\n              e.filterActive\n                ? e.filterSpeed\n                  ? t.push(e.active)\n                  : t.push(\n                      _.filter(e.active, function(e) {\n                        return !+e.uploadSpeed && !+e.downloadSpeed;\n                      })\n                    )\n                : e.filterSpeed &&\n                  t.push(\n                    _.filter(e.active, function(e) {\n                      return +e.uploadSpeed || +e.downloadSpeed;\n                    })\n                  ),\n                e.filterWaiting &&\n                  t.push(\n                    _.filter(e.waiting, function(e) {\n                      return \"waiting\" == e.status;\n                    })\n                  ),\n                e.filterPaused &&\n                  t.push(\n                    _.filter(e.waiting, function(e) {\n                      return \"paused\" == e.status;\n                    })\n                  ),\n                e.filterError &&\n                  t.push(\n                    _.filter(e.stopped, function(e) {\n                      return \"error\" == e.status;\n                    })\n                  ),\n                e.filterComplete &&\n                  t.push(\n                    _.filter(e.stopped, function(e) {\n                      return \"complete\" == e.status;\n                    })\n                  ),\n                e.filterRemoved &&\n                  t.push(\n                    _.filter(e.stopped, function(e) {\n                      return \"removed\" == e.status;\n                    })\n                  );\n              var n = t\n                .map(function(e) {\n                  return _.sortBy(e, function(e) {\n                    return -e.completedLength / e.totalLength;\n                  });\n                })\n                .reduce(function(e, t) {\n                  return e.concat(t);\n                }, []);\n              return (\n                (n = e.filterDownloads(n)),\n                (e.totalDownloads = n.length),\n                (n = n.slice((e.currentPage - 1) * e.pageSize)).splice(e.pageSize),\n                n\n              );\n            }),\n            (e.hasDirectURL = function() {\n              return \"\" != a.getDirectURL();\n            }),\n            (e.getDirectURL = function() {\n              return a.getDirectURL();\n            }),\n            (e.getCtx = function(e, t) {\n              var n;\n              t\n                ? (t.gid !== e.gid && (t.files = []),\n                  (t.dir = e.dir),\n                  (t.status = e.status),\n                  e.verifiedLength && (t.status = \"verifying\"),\n                  e.verifyIntegrityPending && (t.status = \"verifyPending\"),\n                  (t.errorCode = e.errorCode),\n                  (t.gid = e.gid),\n                  (t.followedBy =\n                    e.followedBy && 1 == e.followedBy.length ? e.followedBy[0] : null),\n                  (t.followedFrom = null),\n                  (t.numPieces = e.numPieces),\n                  (t.connections = e.connections),\n                  void 0 === e.numSeeders\n                    ? (t.numSeeders = \"\")\n                    : ((t.connectionsTitle = \"Connections (Seeders)\"),\n                      (t.numSeeders = \" (\" + e.numSeeders + \")\")),\n                  (t.bitfield = e.bitfield),\n                  t.totalLength !== e.totalLength &&\n                    ((t.totalLength = e.totalLength),\n                    (t.fmtTotalLength = i.fmtsize(e.totalLength))),\n                  t.completedLength !== e.completedLength &&\n                    ((t.completedLength = e.completedLength),\n                    (t.fmtCompletedLength = i.fmtsize(e.completedLength))),\n                  e.verifiedLength\n                    ? t.verifiedLength !== e.verifiedLength && (t.verifiedLength = e.verifiedLength)\n                    : delete t.verifiedLength,\n                  e.verifyIntegrityPending\n                    ? t.verifyIntegrityPending !== e.verifyIntegrityPending &&\n                      (t.verifyIntegrityPending = e.verifyIntegrityPending)\n                    : delete t.verifyIntegrityPending,\n                  t.uploadLength !== e.uploadLength &&\n                    ((t.uploadLength = e.uploadLength),\n                    (t.fmtUploadLength = i.fmtsize(e.uploadLength))),\n                  t.pieceLength !== e.pieceLength &&\n                    ((t.pieceLength = e.pieceLength),\n                    (t.fmtPieceLength = i.fmtsize(e.pieceLength))),\n                  t.downloadSpeed !== e.downloadSpeed &&\n                    ((t.downloadSpeed = e.downloadSpeed),\n                    (t.fmtDownloadSpeed = i.fmtspeed(e.downloadSpeed))),\n                  t.uploadSpeed !== e.uploadSpeed &&\n                    ((t.uploadSpeed = e.uploadSpeed),\n                    (t.fmtUploadSpeed = i.fmtspeed(e.uploadSpeed))))\n                : ((t = {\n                    dir: e.dir,\n                    status: e.status,\n                    gid: e.gid,\n                    followedBy: e.followedBy && 1 == e.followedBy.length ? e.followedBy[0] : null,\n                    followedFrom: null,\n                    numPieces: e.numPieces,\n                    connections: e.connections,\n                    connectionsTitle: \"Connections\",\n                    numSeeders: e.numSeeders,\n                    bitfield: e.bitfield,\n                    errorCode: e.errorCode,\n                    totalLength: e.totalLength,\n                    fmtTotalLength: i.fmtsize(e.totalLength),\n                    completedLength: e.completedLength,\n                    fmtCompletedLength: i.fmtsize(e.completedLength),\n                    uploadLength: e.uploadLength,\n                    fmtUploadLength: i.fmtsize(e.uploadLength),\n                    pieceLength: e.pieceLength,\n                    fmtPieceLength: i.fmtsize(e.pieceLength),\n                    downloadSpeed: e.downloadSpeed,\n                    fmtDownloadSpeed: i.fmtspeed(e.downloadSpeed),\n                    uploadSpeed: e.uploadSpeed,\n                    fmtUploadSpeed: i.fmtspeed(e.uploadSpeed),\n                    collapsed: !0,\n                    animCollapsed: !0,\n                    files: []\n                  }),\n                  e.verifiedLength &&\n                    ((t.verifiedLength = e.verifiedLength), (t.status = \"verifying\")),\n                  e.verifyIntegrityPending &&\n                    ((t.verifyIntegrityPending = e.verifyIntegrityPending),\n                    (t.status = \"verifyPending\")));\n              var a,\n                o = e.files;\n              if (o) {\n                for (var r = t.files, s = 0; s < o.length; ++s) {\n                  var l = r[s] || (r[s] = {}),\n                    c = o[s];\n                  c.path !== l.path &&\n                    ((l.index = +c.index),\n                    (l.path = c.path),\n                    (l.length = c.length),\n                    (l.fmtLength = i.fmtsize(c.length)),\n                    (l.relpath = c.path.replace(m, \"/\")),\n                    l.relpath\n                      ? l.relpath.startsWith(\"[\") ||\n                        (l.relpath = l.relpath.substr(t.dir.length + 1))\n                      : (l.relpath = (c.uris && c.uris[0] && c.uris[0].uri) || \"Unknown\")),\n                    (l.selected = \"true\" === c.selected);\n                }\n                (r.length = o.length), r.length && (n = r[0].relpath);\n              } else delete t.files;\n              return (\n                e.bittorrent\n                  ? ((a = e.bittorrent.info && e.bittorrent.info.name), (t.bittorrent = !0))\n                  : delete t.bittorrent,\n                (t.name = a || n || \"Unknown\"),\n                (t.metadata = t.name.startsWith(\"[METADATA]\")),\n                t.metadata && (t.name = t.name.substr(10)),\n                t\n              );\n            }),\n            (e.hasStatus = function e(t, n) {\n              return _.isArray(n)\n                ? 0 != n.length && (e(t, n[0]) || e(t, n.slice(1)))\n                : t.status == n;\n            }),\n            (e.getEta = function(e) {\n              return (e.totalLength - e.completedLength) / e.downloadSpeed;\n            }),\n            (e.getProgressClass = function(e) {\n              switch (e.status) {\n                case \"paused\":\n                  return \"progress-bar-info\";\n                case \"error\":\n                  return \"progress-bar-danger\";\n                case \"removed\":\n                  return \"progress-bar-warning\";\n                case \"active\":\n                  return \"active\";\n                case \"verifying\":\n                  return \"progress-bar-warning\";\n                case \"complete\":\n                  return \"progress-bar-success\";\n                default:\n                  return \"\";\n              }\n            }),\n            (e.getProgress = function(e) {\n              var t = 0;\n              return (\n                (t = (t = e.verifiedLength\n                  ? (e.verifiedLength / e.totalLength) * 100 || 0\n                  : (e.completedLength / e.totalLength) * 100 || 0).toFixed(2)) || (t = 0),\n                t\n              );\n            }),\n            (e.getRatio = function(e) {\n              var t = 0;\n              return (t = (t = e.uploadLength / e.completedLength || 0).toFixed(2)) || (t = 0), t;\n            }),\n            (e.getType = function(e) {\n              var t = e.status;\n              return (\n                \"paused\" == t && (t = \"waiting\"),\n                -1 != [\"error\", \"removed\", \"complete\"].indexOf(t) && (t = \"stopped\"),\n                t\n              );\n            }),\n            (e.selectFiles = function(e) {\n              console.log(\"got back files for the torrent ...\"),\n                s.invoke(\"selectFiles\", e.files, function(t) {\n                  var n = \"\";\n                  _.forEach(t, function(e) {\n                    e.selected && (n += \",\" + e.index);\n                  }),\n                    (n = n.slice(1)),\n                    a.once(\"changeOption\", [e.gid, { \"select-file\": n }], function(e) {\n                      console.log(\"changed indexes to:\", n, e);\n                    });\n                });\n            }),\n            (e.showSettings = function(t) {\n              var n = e.getType(t),\n                o = {};\n              return (\n                a.once(\"getOption\", [t.gid], function(e) {\n                  var i = e[0],\n                    r = _.cloneDeep(l);\n                  for (var u in r)\n                    (\"active\" == n && -1 == c.indexOf(u)) ||\n                      (\"waiting\" == n && -1 != d.indexOf(u)) ||\n                      ((o[u] = r[u]), (o[u].val = i[u] || o[u].val));\n                  s.invoke(\"settings\", o, t.name + \" settings\", \"Change\", function(e) {\n                    var n = {};\n                    for (var o in e) n[o] = e[o].val;\n                    a.once(\"changeOption\", [t.gid, n]);\n                  });\n                }),\n                !1\n              );\n            }),\n            (e.moveDown = function(e) {\n              a.once(\"changePosition\", [e.gid, 1, \"POS_CUR\"]);\n            }),\n            (e.moveUp = function(e) {\n              a.once(\"changePosition\", [e.gid, -1, \"POS_CUR\"]);\n            });\n        }\n      ])\n      .filter(\"objFilter\", function() {\n        return function(e, t) {\n          e = e || {};\n          var n = {};\n          for (var a in e) a.startsWith(t) && (n[a] = e[a]);\n          return n;\n        };\n      }).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a),\n      i = function(e, t) {\n        var n = 0,\n          a = [],\n          o = function(e) {\n            var o = e.target.result;\n            a.push(o.split(\",\")[1]), --n || t(a);\n          };\n        _.each(e, function(e) {\n          n++, console.log(\"starting file reader\");\n          var a = new FileReader();\n          (a.onload = o),\n            (a.onerror = function(e) {\n              console.log(\"got back error\", e), t([]);\n            }),\n            a.readAsDataURL(e);\n        });\n      };\n    t.a = o.a\n      .module(\"webui.ctrls.modal\", [\n        \"ui.bootstrap\",\n        \"webui.services.deps\",\n        \"webui.services.modals\",\n        \"webui.services.rpc\",\n        \"webui.services.configuration\"\n      ])\n      .controller(\"ModalCtrl\", [\n        \"$_\",\n        \"$scope\",\n        \"$modal\",\n        \"$modals\",\n        \"$rpc\",\n        \"$fileSettings\",\n        \"$downloadProps\",\n        function(e, t, n, a, o, r, s) {\n          (t.getUris = {\n            open: function(a) {\n              var o = this;\n              (this.uris = \"\"),\n                (this.downloadSettingsCollapsed = !0),\n                (this.advancedSettingsCollapsed = !0),\n                (this.settings = {}),\n                (this.fsettings = e.cloneDeep(r)),\n                (this.cb = a),\n                e.forEach(s, function(e) {\n                  (o.settings[e] = o.fsettings[e]), delete o.fsettings[e];\n                }),\n                (this.inst = n.open({\n                  templateUrl: \"getUris.html\",\n                  scope: t,\n                  windowClass: \"modal-large\"\n                })),\n                this.inst.result.then(\n                  function() {\n                    if ((delete o.inst, o.cb)) {\n                      var e = {};\n                      for (var t in o.settings)\n                        r[t].val != o.settings[t].val && (e[t] = o.settings[t].val);\n                      for (var t in o.fsettings)\n                        r[t].val != o.fsettings[t].val && (e[t] = o.fsettings[t].val);\n                      console.log(\"sending settings:\", e), o.cb(o.parse(), e);\n                    }\n                  },\n                  function() {\n                    delete o.inst;\n                  }\n                );\n            },\n            parse: function() {\n              return e\n                .chain(this.uris.trim().split(/\\r?\\n/g))\n                .map(function(t) {\n                  return e(t)\n                    .replace(/[\"'][^\"']*[\"']/g, function(e) {\n                      return e.replace(/%/g, \"%25\").replace(/ /g, \"%20\");\n                    })\n                    .trim()\n                    .split(/\\s+/g)\n                    .map(function(e) {\n                      return e\n                        .replace(/%20/g, \" \")\n                        .replace(/%25/g, \"%\")\n                        .replace(/[\"']/g, \"\");\n                    });\n                })\n                .filter(function(e) {\n                  return e.length;\n                })\n                .value();\n            }\n          }),\n            (t.settings = {\n              open: function(e, a, o, i) {\n                var r = this;\n                (this.settings = e),\n                  (this.title = a),\n                  (this.actionText = o),\n                  (this.inst = n.open({\n                    templateUrl: \"settings.html\",\n                    scope: t,\n                    windowClass: \"modal-large\"\n                  })),\n                  this.inst.result.then(\n                    function() {\n                      delete r.inst, i && i(r.settings);\n                    },\n                    function() {\n                      delete r.inst;\n                    }\n                  );\n              }\n            }),\n            (t.selectFiles = {\n              open: function(a, o) {\n                var i = this;\n                this.files = e.cloneDeep(a);\n                (this.groupedFiles = (function(e) {\n                  function t() {\n                    (this.dirs = {}), (this.files = []), (this.show = !1), (this.selected = !0);\n                  }\n                  e.sort(function(e, t) {\n                    return e.relpath < t.relpath ? -1 : 1;\n                  });\n                  for (var n, a = new t(), o = 0; o < e.length; o++) {\n                    n = a;\n                    for (var i = e[o].relpath.split(\"/\"), r = 0; r < i.length - 1; r++)\n                      n.dirs[i[r]] || (n.dirs[i[r]] = new t()), (n = n.dirs[i[r]]);\n                    n.files.push(e[o]);\n                  }\n                  return a;\n                })(this.files)),\n                  (this.inst = n.open({\n                    templateUrl: \"selectFiles.html\",\n                    scope: t,\n                    windowClass: \"modal-large\"\n                  })),\n                  this.inst.result.then(\n                    function() {\n                      delete i.inst, o && o(i.files);\n                    },\n                    function() {\n                      delete i.inst;\n                    }\n                  );\n              }\n            }),\n            (t.connection = {\n              open: function(e, a) {\n                var i = this;\n                (this.conf = o.getConfiguration()),\n                  (this.inst = n.open({\n                    templateUrl: \"connection.html\",\n                    scope: t,\n                    windowClass: \"modal-large\"\n                  })),\n                  this.inst.result.then(\n                    function() {\n                      delete i.inst, a && a(i.conf);\n                    },\n                    function() {\n                      delete i.inst;\n                    }\n                  );\n              }\n            }),\n            e.each([\"getTorrents\", \"getMetalinks\"], function(a) {\n              t[a] = {\n                open: function(o) {\n                  var l = this;\n                  (this.files = []),\n                    (this.collapsed = !0),\n                    (this.settings = {}),\n                    (this.fsettings = e.cloneDeep(r)),\n                    e.forEach(s, function(e) {\n                      (l.settings[e] = l.fsettings[e]), delete l.fsettings[e];\n                    }),\n                    (this.inst = n.open({\n                      templateUrl: a + \".html\",\n                      scope: t,\n                      windowClass: \"modal-large\"\n                    })),\n                    this.inst.result.then(\n                      function() {\n                        delete l.inst,\n                          o &&\n                            i(l.files, function(e) {\n                              var t = {};\n                              for (var n in l.settings)\n                                r[n].val != l.settings[n].val && (t[n] = l.settings[n].val);\n                              for (var n in l.fsettings)\n                                r[n].val != l.fsettings[n].val && (t[n] = l.fsettings[n].val);\n                              console.log(\"sending settings:\", t), o(e, t);\n                            });\n                      },\n                      function() {\n                        delete l.inst;\n                      }\n                    );\n                }\n              };\n            }),\n            e.each([\"about\", \"server_info\"], function(e) {\n              t[e] = {\n                open: function() {\n                  var a = this;\n                  (this.inst = n.open({ templateUrl: e + \".html\", scope: t })),\n                    this.inst.result.then(\n                      function() {\n                        delete a.inst;\n                      },\n                      function() {\n                        delete a.inst;\n                      }\n                    );\n                }\n              };\n            }),\n            o.once(\"getVersion\", [], function(e) {\n              t.miscellaneous = e[0];\n            }),\n            e.each(\n              [\n                \"getUris\",\n                \"getTorrents\",\n                \"getMetalinks\",\n                \"selectFiles\",\n                \"settings\",\n                \"connection\",\n                \"server_info\",\n                \"about\"\n              ],\n              function(e) {\n                a.register(e, function() {\n                  if (!t[e].inst) {\n                    var n = Array.prototype.slice.call(arguments, 0);\n                    t[e].open.apply(t[e], n);\n                  }\n                });\n              }\n            );\n        }\n      ]).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a);\n    t.a = o.a\n      .module(\"webui.ctrls.nav\", [\n        \"webui.services.configuration\",\n        \"webui.services.modals\",\n        \"webui.services.rpc\",\n        \"webui.services.rpc.helpers\",\n        \"webui.services.settings\",\n        \"webui.services.utils\"\n      ])\n      .controller(\"NavCtrl\", [\n        \"$scope\",\n        \"$modals\",\n        \"$rpc\",\n        \"$rpchelpers\",\n        \"$fileSettings\",\n        \"$globalSettings\",\n        \"$globalExclude\",\n        \"$utils\",\n        \"$translate\",\n        \"$filter\",\n        function(e, t, n, a, o, i, r, s, l, c) {\n          (e.isFeatureEnabled = function(e) {\n            return a.isFeatureEnabled(e);\n          }),\n            (e.collapsed = !0),\n            (e.onDownloadFilter = function() {\n              (e.$parent.downloadFilter = e.downloadFilter), e.$parent.onDownloadFilter();\n            }),\n            (e.forcePauseAll = function() {\n              n.once(\"forcePauseAll\", []);\n            }),\n            (e.purgeDownloadResult = function() {\n              n.once(\"purgeDownloadResult\", []);\n            }),\n            (e.unpauseAll = function() {\n              n.once(\"unpauseAll\", []);\n            }),\n            (e.addUris = function() {\n              t.invoke(\"getUris\", _.bind(a.addUris, a));\n            }),\n            (e.addMetalinks = function() {\n              t.invoke(\"getMetalinks\", _.bind(a.addMetalinks, a));\n            }),\n            (e.addTorrents = function() {\n              t.invoke(\"getTorrents\", _.bind(a.addTorrents, a));\n            }),\n            (e.changeCSettings = function() {\n              t.invoke(\"connection\", n.getConfiguration(), _.bind(n.configure, n));\n            }),\n            (e.changeGSettings = function() {\n              n.once(\"getGlobalOption\", [], function(e) {\n                var a = s.getCookie(\"aria2props\");\n                (a && a.indexOf) || (a = []);\n                var l = e[0],\n                  d = {};\n                for (var u in (_.forEach([o, i], function(e) {\n                  for (var t in e)\n                    -1 == r.indexOf(t) &&\n                      ((d[t] = _.cloneDeep(e[t])), (d[t].starred = -1 != a.indexOf(t)));\n                }),\n                l))\n                  u in r ||\n                    (u in d\n                      ? (d[u].val = l[u])\n                      : (d[u] = { name: u, val: l[u], desc: \"\", starred: -1 != a.indexOf(u) }));\n                t.invoke(\n                  \"settings\",\n                  _.cloneDeep(d),\n                  c(\"translate\")(\"Global Settings\"),\n                  c(\"translate\")(\"Save\"),\n                  function(e) {\n                    var t = {},\n                      a = [];\n                    for (var o in e)\n                      d[o].val != e[o].val && (t[o] = e[o].val), e[o].starred && a.push(o);\n                    console.log(\"saving aria2 settings:\", t),\n                      console.log(\"saving aria2 starred:\", a),\n                      n.once(\"changeGlobalOption\", [t]),\n                      s.setCookie(\"aria2props\", a);\n                  }\n                );\n              });\n            }),\n            (e.showServerInfo = function() {\n              t.invoke(\"server_info\");\n            }),\n            (e.showAbout = function() {\n              t.invoke(\"about\");\n            }),\n            (e.changeLanguage = function(e) {\n              l.use(e);\n            }),\n            (e.shutDownServer = function() {\n              n.once(\"shutdown\", []);\n            });\n        }\n      ]).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    var a = n(0),\n      o = n.n(a);\n    t.a = o.a\n      .module(\"webui.ctrls.props\", [\n        \"webui.services.utils\",\n        \"webui.services.settings\",\n        \"webui.services.deps\",\n        \"webui.services.rpc\",\n        \"webui.services.configuration\"\n      ])\n      .controller(\"StarredPropsCtrl\", [\n        \"$scope\",\n        \"$_\",\n        \"$utils\",\n        \"$rpc\",\n        \"$globalSettings\",\n        \"$fileSettings\",\n        \"$starredProps\",\n        function(e, t, n, a, o, i, r) {\n          (e._props = []),\n            (e.dirty = !0),\n            (e.properties = []),\n            (e.getProps = function() {\n              var e = n.getCookie(\"aria2props\");\n              return (e && e.indexOf) || (e = r), e;\n            }),\n            (e.enabled = function() {\n              for (var t = 0; t < e.properties.length; t++)\n                if (e.properties[t]._val != e.properties[t].val) return !0;\n              return !1;\n            }),\n            (e.save = function() {\n              for (var t = {}, n = !1, o = 0; o < e.properties.length; o++)\n                e.properties[o]._val != e.properties[o].val &&\n                  ((t[e.properties[o].name] = e.properties[o].val), (n = !0));\n              n && a.once(\"changeGlobalOption\", [t]);\n            }),\n            a.subscribe(\"getGlobalOption\", [], function(t) {\n              for (var a = t[0], r = e.getProps(), s = [], l = 0; l < r.length; l++) {\n                var c = {};\n                r[l] in o\n                  ? ((c = o[r[l]]), r[l] in a && (c.val = a[r[l]]), (c.name = r[l]), s.push(c))\n                  : r[l] in i\n                    ? ((c = i[r[l]]), r[l] in a && (c.val = a[r[l]]), (c.name = r[l]), s.push(c))\n                    : r[l] in a && s.push({ name: r[l], val: a[r[l]] });\n              }\n              n.mergeMap(s, e.properties, function(e, t) {\n                return (\n                  ((t = t || {}).name = e.name),\n                  (t.options = e.options),\n                  (t.multiline = e.multiline),\n                  t._val == t.val || t.val == e.val\n                    ? ((t._val = e.val), (t.val = e.val))\n                    : (t._val = e.val),\n                  (t.desc = e.desc),\n                  t\n                );\n              });\n            });\n        }\n      ]).name;\n  },\n  function(e, t, n) {\n    \"use strict\";\n    n.r(t),\n      function(e) {\n        var t = n(0),\n          a = n.n(t),\n          o = (n(31), n(36), n(2)),\n          i = n(3),\n          r = n(4),\n          s = n(5),\n          l = n(7),\n          c = n(8),\n          d = n(9),\n          u = n(10),\n          p = n(11),\n          h = n(12),\n          f = n(13),\n          m = n(14),\n          g = n(15),\n          v = n(16),\n          b = n(17),\n          w = n(18),\n          y = n(19),\n          k = n(20),\n          S = n(21),\n          T = n(22),\n          C = n(23),\n          P = n(24),\n          A = n(25),\n          x = n(26),\n          R = n(27),\n          D = n(28);\n        n(32),\n          n(33),\n          n(34),\n          n(35),\n          n(40),\n          n(41),\n          n(42),\n          n(43),\n          n(44),\n          n(45),\n          n(46),\n          n(47),\n          n(48),\n          n(49),\n          n(50),\n          n(51),\n          n(52),\n          n(53),\n          n(54),\n          n(55);\n        var $ = a.a.module(\"webui\", [\n          v.a,\n          s.a,\n          l.a,\n          i.a,\n          r.a,\n          c.a,\n          d.a,\n          u.a,\n          p.a,\n          h.a,\n          g.a,\n          o.a,\n          f.a,\n          m.a,\n          b.a,\n          w.a,\n          y.a,\n          k.a,\n          S.a,\n          T.a,\n          P.a,\n          A.a,\n          x.a,\n          R.a,\n          D.a,\n          \"ui.bootstrap\",\n          \"pascalprecht.translate\"\n        ]);\n        function M(e, t) {\n          for (var n in t) t.hasOwnProperty(n) && ((e[n] && e[n].length) || (e[n] = t[n]));\n          return e;\n        }\n        $.config([\n          \"$translateProvider\",\n          \"$locationProvider\",\n          function(e, t) {\n            e\n              .translations(\"en_US\", translations.en_US)\n              .translations(\"nl_NL\", M(translations.nl_NL, translations.en_US))\n              .translations(\"th_TH\", M(translations.th_TH, translations.en_US))\n              .translations(\"zh_CN\", M(translations.zh_CN, translations.en_US))\n              .translations(\"zh_TW\", M(translations.zh_TW, translations.en_US))\n              .translations(\"pl_PL\", M(translations.pl_PL, translations.en_US))\n              .translations(\"fr_FR\", M(translations.fr_FR, translations.en_US))\n              .translations(\"de_DE\", M(translations.de_DE, translations.en_US))\n              .translations(\"es_ES\", M(translations.es_ES, translations.en_US))\n              .translations(\"ru_RU\", M(translations.ru_RU, translations.en_US))\n              .translations(\"it_IT\", M(translations.it_IT, translations.en_US))\n              .translations(\"tr_TR\", M(translations.tr_TR, translations.en_US))\n              .translations(\"cs_CZ\", M(translations.cs_CZ, translations.en_US))\n              .translations(\"fa_IR\", M(translations.fa_IR, translations.en_US))\n              .translations(\"id_ID\", M(translations.id_ID, translations.en_US))\n              .translations(\"pt_BR\", M(translations.pt_BR, translations.en_US))\n              .useSanitizeValueStrategy(\"escapeParameters\")\n              .determinePreferredLanguage(),\n              t.html5Mode({ enabled: !0, requireBase: !1 });\n          }\n        ]),\n          $.directive(\"textarea\", C.a),\n          \"serviceWorker\" in navigator &&\n            \"https:\" === location.protocol &&\n            window.addEventListener(\"load\", () => {\n              navigator.serviceWorker\n                .register(\"service-worker.js\")\n                .then(e => {\n                  console.log(\"SW registered: \", e);\n                })\n                .catch(e => {\n                  console.log(\"SW registration failed: \", e);\n                });\n            }),\n          e(function() {\n            String.prototype.startsWith ||\n              Object.defineProperty(String.prototype, \"startsWith\", {\n                enumerable: !1,\n                configurable: !1,\n                writable: !1,\n                value: function(e, t) {\n                  return (t = t || 0), this.indexOf(e, t) === t;\n                }\n              }),\n              a.a.bootstrap(document, [\"webui\"]);\n          });\n      }.call(this, n(1));\n  },\n  ,\n  ,\n  function(e, t) {\n    angular.module(\"ui.bootstrap\", [\n      \"ui.bootstrap.tpls\",\n      \"ui.bootstrap.collapse\",\n      \"ui.bootstrap.accordion\",\n      \"ui.bootstrap.alert\",\n      \"ui.bootstrap.bindHtml\",\n      \"ui.bootstrap.buttons\",\n      \"ui.bootstrap.carousel\",\n      \"ui.bootstrap.dateparser\",\n      \"ui.bootstrap.position\",\n      \"ui.bootstrap.datepicker\",\n      \"ui.bootstrap.dropdown\",\n      \"ui.bootstrap.modal\",\n      \"ui.bootstrap.pagination\",\n      \"ui.bootstrap.tooltip\",\n      \"ui.bootstrap.popover\",\n      \"ui.bootstrap.progressbar\",\n      \"ui.bootstrap.rating\",\n      \"ui.bootstrap.tabs\",\n      \"ui.bootstrap.timepicker\",\n      \"ui.bootstrap.transition\",\n      \"ui.bootstrap.typeahead\"\n    ]),\n      angular.module(\"ui.bootstrap.tpls\", [\n        \"template/accordion/accordion-group.html\",\n        \"template/accordion/accordion.html\",\n        \"template/alert/alert.html\",\n        \"template/carousel/carousel.html\",\n        \"template/carousel/slide.html\",\n        \"template/datepicker/datepicker.html\",\n        \"template/datepicker/day.html\",\n        \"template/datepicker/month.html\",\n        \"template/datepicker/popup.html\",\n        \"template/datepicker/year.html\",\n        \"template/modal/backdrop.html\",\n        \"template/modal/window.html\",\n        \"template/pagination/pager.html\",\n        \"template/pagination/pagination.html\",\n        \"template/tooltip/tooltip-html-popup.html\",\n        \"template/tooltip/tooltip-html-unsafe-popup.html\",\n        \"template/tooltip/tooltip-popup.html\",\n        \"template/tooltip/tooltip-template-popup.html\",\n        \"template/popover/popover-html.html\",\n        \"template/popover/popover-template.html\",\n        \"template/popover/popover.html\",\n        \"template/progressbar/bar.html\",\n        \"template/progressbar/progress.html\",\n        \"template/progressbar/progressbar.html\",\n        \"template/rating/rating.html\",\n        \"template/tabs/tab.html\",\n        \"template/tabs/tabset.html\",\n        \"template/timepicker/timepicker.html\",\n        \"template/typeahead/typeahead-match.html\",\n        \"template/typeahead/typeahead-popup.html\"\n      ]),\n      angular.module(\"ui.bootstrap.collapse\", []).directive(\"collapse\", [\n        \"$animate\",\n        function(e) {\n          return {\n            link: function(t, n, a) {\n              function o() {\n                n\n                  .removeClass(\"collapse\")\n                  .addClass(\"collapsing\")\n                  .attr(\"aria-expanded\", !0)\n                  .attr(\"aria-hidden\", !1),\n                  e.addClass(n, \"in\", { to: { height: n[0].scrollHeight + \"px\" } }).then(i);\n              }\n              function i() {\n                n.removeClass(\"collapsing\"), n.css({ height: \"auto\" });\n              }\n              function r() {\n                return n.hasClass(\"collapse\") || n.hasClass(\"in\")\n                  ? (n\n                      .css({ height: n[0].scrollHeight + \"px\" })\n                      .removeClass(\"collapse\")\n                      .addClass(\"collapsing\")\n                      .attr(\"aria-expanded\", !1)\n                      .attr(\"aria-hidden\", !0),\n                    void e.removeClass(n, \"in\", { to: { height: \"0\" } }).then(s))\n                  : s();\n              }\n              function s() {\n                n.css({ height: \"0\" }), n.removeClass(\"collapsing\"), n.addClass(\"collapse\");\n              }\n              t.$watch(a.collapse, function(e) {\n                e ? r() : o();\n              });\n            }\n          };\n        }\n      ]),\n      angular\n        .module(\"ui.bootstrap.accordion\", [\"ui.bootstrap.collapse\"])\n        .constant(\"accordionConfig\", { closeOthers: !0 })\n        .controller(\"AccordionController\", [\n          \"$scope\",\n          \"$attrs\",\n          \"accordionConfig\",\n          function(e, t, n) {\n            (this.groups = []),\n              (this.closeOthers = function(a) {\n                (angular.isDefined(t.closeOthers) ? e.$eval(t.closeOthers) : n.closeOthers) &&\n                  angular.forEach(this.groups, function(e) {\n                    e !== a && (e.isOpen = !1);\n                  });\n              }),\n              (this.addGroup = function(e) {\n                var t = this;\n                this.groups.push(e),\n                  e.$on(\"$destroy\", function(n) {\n                    t.removeGroup(e);\n                  });\n              }),\n              (this.removeGroup = function(e) {\n                var t = this.groups.indexOf(e);\n                -1 !== t && this.groups.splice(t, 1);\n              });\n          }\n        ])\n        .directive(\"accordion\", function() {\n          return {\n            restrict: \"EA\",\n            controller: \"AccordionController\",\n            controllerAs: \"accordion\",\n            transclude: !0,\n            replace: !1,\n            templateUrl: function(e, t) {\n              return t.templateUrl || \"template/accordion/accordion.html\";\n            }\n          };\n        })\n        .directive(\"accordionGroup\", function() {\n          return {\n            require: \"^accordion\",\n            restrict: \"EA\",\n            transclude: !0,\n            replace: !0,\n            templateUrl: function(e, t) {\n              return t.templateUrl || \"template/accordion/accordion-group.html\";\n            },\n            scope: { heading: \"@\", isOpen: \"=?\", isDisabled: \"=?\" },\n            controller: function() {\n              this.setHeading = function(e) {\n                this.heading = e;\n              };\n            },\n            link: function(e, t, n, a) {\n              a.addGroup(e),\n                (e.openClass = n.openClass || \"panel-open\"),\n                (e.panelClass = n.panelClass),\n                e.$watch(\"isOpen\", function(n) {\n                  t.toggleClass(e.openClass, n), n && a.closeOthers(e);\n                }),\n                (e.toggleOpen = function(t) {\n                  e.isDisabled || (t && 32 !== t.which) || (e.isOpen = !e.isOpen);\n                });\n            }\n          };\n        })\n        .directive(\"accordionHeading\", function() {\n          return {\n            restrict: \"EA\",\n            transclude: !0,\n            template: \"\",\n            replace: !0,\n            require: \"^accordionGroup\",\n            link: function(e, t, n, a, o) {\n              a.setHeading(o(e, angular.noop));\n            }\n          };\n        })\n        .directive(\"accordionTransclude\", function() {\n          return {\n            require: \"^accordionGroup\",\n            link: function(e, t, n, a) {\n              e.$watch(\n                function() {\n                  return a[n.accordionTransclude];\n                },\n                function(e) {\n                  e && (t.find(\"span\").html(\"\"), t.find(\"span\").append(e));\n                }\n              );\n            }\n          };\n        }),\n      angular\n        .module(\"ui.bootstrap.alert\", [])\n        .controller(\"AlertController\", [\n          \"$scope\",\n          \"$attrs\",\n          function(e, t) {\n            (e.closeable = !!t.close), (this.close = e.close);\n          }\n        ])\n        .directive(\"alert\", function() {\n          return {\n            controller: \"AlertController\",\n            controllerAs: \"alert\",\n            templateUrl: function(e, t) {\n              return t.templateUrl || \"template/alert/alert.html\";\n            },\n            transclude: !0,\n            replace: !0,\n            scope: { type: \"@\", close: \"&\" }\n          };\n        })\n        .directive(\"dismissOnTimeout\", [\n          \"$timeout\",\n          function(e) {\n            return {\n              require: \"alert\",\n              link: function(t, n, a, o) {\n                e(function() {\n                  o.close();\n                }, parseInt(a.dismissOnTimeout, 10));\n              }\n            };\n          }\n        ]),\n      angular\n        .module(\"ui.bootstrap.bindHtml\", [])\n        .value(\"$bindHtmlUnsafeSuppressDeprecated\", !1)\n        .directive(\"bindHtmlUnsafe\", [\n          \"$log\",\n          \"$bindHtmlUnsafeSuppressDeprecated\",\n          function(e, t) {\n            return function(n, a, o) {\n              t || e.warn(\"bindHtmlUnsafe is now deprecated. Use ngBindHtml instead\"),\n                a.addClass(\"ng-binding\").data(\"$binding\", o.bindHtmlUnsafe),\n                n.$watch(o.bindHtmlUnsafe, function(e) {\n                  a.html(e || \"\");\n                });\n            };\n          }\n        ]),\n      angular\n        .module(\"ui.bootstrap.buttons\", [])\n        .constant(\"buttonConfig\", { activeClass: \"active\", toggleEvent: \"click\" })\n        .controller(\"ButtonsController\", [\n          \"buttonConfig\",\n          function(e) {\n            (this.activeClass = e.activeClass || \"active\"),\n              (this.toggleEvent = e.toggleEvent || \"click\");\n          }\n        ])\n        .directive(\"btnRadio\", function() {\n          return {\n            require: [\"btnRadio\", \"ngModel\"],\n            controller: \"ButtonsController\",\n            controllerAs: \"buttons\",\n            link: function(e, t, n, a) {\n              var o = a[0],\n                i = a[1];\n              t.find(\"input\").css({ display: \"none\" }),\n                (i.$render = function() {\n                  t.toggleClass(o.activeClass, angular.equals(i.$modelValue, e.$eval(n.btnRadio)));\n                }),\n                t.bind(o.toggleEvent, function() {\n                  if (!n.disabled) {\n                    var a = t.hasClass(o.activeClass);\n                    (!a || angular.isDefined(n.uncheckable)) &&\n                      e.$apply(function() {\n                        i.$setViewValue(a ? null : e.$eval(n.btnRadio)), i.$render();\n                      });\n                  }\n                });\n            }\n          };\n        })\n        .directive(\"btnCheckbox\", [\n          \"$document\",\n          function(e) {\n            return {\n              require: [\"btnCheckbox\", \"ngModel\"],\n              controller: \"ButtonsController\",\n              controllerAs: \"button\",\n              link: function(t, n, a, o) {\n                function i() {\n                  return s(a.btnCheckboxTrue, !0);\n                }\n                function r() {\n                  return s(a.btnCheckboxFalse, !1);\n                }\n                function s(e, n) {\n                  var a = t.$eval(e);\n                  return angular.isDefined(a) ? a : n;\n                }\n                var l = o[0],\n                  c = o[1];\n                n.find(\"input\").css({ display: \"none\" }),\n                  (c.$render = function() {\n                    n.toggleClass(l.activeClass, angular.equals(c.$modelValue, i()));\n                  }),\n                  n.bind(l.toggleEvent, function() {\n                    a.disabled ||\n                      t.$apply(function() {\n                        c.$setViewValue(n.hasClass(l.activeClass) ? r() : i()), c.$render();\n                      });\n                  }),\n                  n.on(\"keypress\", function(o) {\n                    a.disabled ||\n                      32 !== o.which ||\n                      e[0].activeElement !== n[0] ||\n                      t.$apply(function() {\n                        c.$setViewValue(n.hasClass(l.activeClass) ? r() : i()), c.$render();\n                      });\n                  });\n              }\n            };\n          }\n        ]),\n      angular\n        .module(\"ui.bootstrap.carousel\", [])\n        .controller(\"CarouselController\", [\n          \"$scope\",\n          \"$element\",\n          \"$interval\",\n          \"$animate\",\n          function(e, t, n, a) {\n            function o(t, n, o) {\n              g ||\n                (angular.extend(t, { direction: o, active: !0 }),\n                angular.extend(u.currentSlide || {}, { direction: o, active: !1 }),\n                a.enabled() &&\n                  !e.noTransition &&\n                  !e.$currentTransition &&\n                  t.$element &&\n                  u.slides.length > 1 &&\n                  (t.$element.data(f, t.direction),\n                  u.currentSlide &&\n                    u.currentSlide.$element &&\n                    u.currentSlide.$element.data(f, t.direction),\n                  (e.$currentTransition = !0),\n                  h\n                    ? a.on(\"addClass\", t.$element, function(t, n) {\n                        \"close\" === n && ((e.$currentTransition = null), a.off(\"addClass\", t));\n                      })\n                    : t.$element.one(\"$animate:close\", function() {\n                        e.$currentTransition = null;\n                      })),\n                (u.currentSlide = t),\n                (m = n),\n                r());\n            }\n            function i(e) {\n              if (angular.isUndefined(p[e].index)) return p[e];\n              var t;\n              for (p.length, t = 0; t < p.length; ++t) if (p[t].index == e) return p[t];\n            }\n            function r() {\n              s();\n              var t = +e.interval;\n              !isNaN(t) && t > 0 && (c = n(l, t));\n            }\n            function s() {\n              c && (n.cancel(c), (c = null));\n            }\n            function l() {\n              var t = +e.interval;\n              d && !isNaN(t) && t > 0 && p.length ? e.next() : e.pause();\n            }\n            var c,\n              d,\n              u = this,\n              p = (u.slides = e.slides = []),\n              h = angular.version.minor >= 4,\n              f = \"uib-slideDirection\",\n              m = -1;\n            u.currentSlide = null;\n            var g = !1;\n            (u.select = e.select = function(t, n) {\n              var a = e.indexOfSlide(t);\n              void 0 === n && (n = a > u.getCurrentIndex() ? \"next\" : \"prev\"),\n                t && t !== u.currentSlide && !e.$currentTransition && o(t, a, n);\n            }),\n              e.$on(\"$destroy\", function() {\n                g = !0;\n              }),\n              (u.getCurrentIndex = function() {\n                return u.currentSlide && angular.isDefined(u.currentSlide.index)\n                  ? +u.currentSlide.index\n                  : m;\n              }),\n              (e.indexOfSlide = function(e) {\n                return angular.isDefined(e.index) ? +e.index : p.indexOf(e);\n              }),\n              (e.next = function() {\n                var t = (u.getCurrentIndex() + 1) % p.length;\n                return 0 === t && e.noWrap() ? void e.pause() : u.select(i(t), \"next\");\n              }),\n              (e.prev = function() {\n                var t = u.getCurrentIndex() - 1 < 0 ? p.length - 1 : u.getCurrentIndex() - 1;\n                return e.noWrap() && t === p.length - 1 ? void e.pause() : u.select(i(t), \"prev\");\n              }),\n              (e.isActive = function(e) {\n                return u.currentSlide === e;\n              }),\n              e.$watch(\"interval\", r),\n              e.$on(\"$destroy\", s),\n              (e.play = function() {\n                d || ((d = !0), r());\n              }),\n              (e.pause = function() {\n                e.noPause || ((d = !1), s());\n              }),\n              (u.addSlide = function(t, n) {\n                (t.$element = n),\n                  p.push(t),\n                  1 === p.length || t.active\n                    ? (u.select(p[p.length - 1]), 1 == p.length && e.play())\n                    : (t.active = !1);\n              }),\n              (u.removeSlide = function(e) {\n                angular.isDefined(e.index) &&\n                  p.sort(function(e, t) {\n                    return +e.index > +t.index;\n                  });\n                var t = p.indexOf(e);\n                p.splice(t, 1),\n                  p.length > 0 && e.active\n                    ? t >= p.length\n                      ? u.select(p[t - 1])\n                      : u.select(p[t])\n                    : m > t && m--,\n                  0 === p.length && (u.currentSlide = null);\n              }),\n              e.$watch(\"noTransition\", function(e) {\n                t.data(\"uib-noTransition\", e);\n              });\n          }\n        ])\n        .directive(\"carousel\", [\n          function() {\n            return {\n              restrict: \"EA\",\n              transclude: !0,\n              replace: !0,\n              controller: \"CarouselController\",\n              controllerAs: \"carousel\",\n              require: \"carousel\",\n              templateUrl: function(e, t) {\n                return t.templateUrl || \"template/carousel/carousel.html\";\n              },\n              scope: { interval: \"=\", noTransition: \"=\", noPause: \"=\", noWrap: \"&\" }\n            };\n          }\n        ])\n        .directive(\"slide\", function() {\n          return {\n            require: \"^carousel\",\n            restrict: \"EA\",\n            transclude: !0,\n            replace: !0,\n            templateUrl: function(e, t) {\n              return t.templateUrl || \"template/carousel/slide.html\";\n            },\n            scope: { active: \"=?\", actual: \"=?\", index: \"=?\" },\n            link: function(e, t, n, a) {\n              a.addSlide(e, t),\n                e.$on(\"$destroy\", function() {\n                  a.removeSlide(e);\n                }),\n                e.$watch(\"active\", function(t) {\n                  t && a.select(e);\n                });\n            }\n          };\n        })\n        .animation(\".item\", [\n          \"$injector\",\n          \"$animate\",\n          function(e, t) {\n            function n(e, t, n) {\n              e.removeClass(t), n && n();\n            }\n            var a = \"uib-noTransition\",\n              o = \"uib-slideDirection\",\n              i = null;\n            return (\n              e.has(\"$animateCss\") && (i = e.get(\"$animateCss\")),\n              {\n                beforeAddClass: function(e, r, s) {\n                  if (\"active\" == r && e.parent() && !e.parent().data(a)) {\n                    var l = !1,\n                      c = e.data(o),\n                      d = \"next\" == c ? \"left\" : \"right\",\n                      u = n.bind(this, e, d + \" \" + c, s);\n                    return (\n                      e.addClass(c),\n                      i\n                        ? i(e, { addClass: d })\n                            .start()\n                            .done(u)\n                        : t.addClass(e, d).then(function() {\n                            l || u(), s();\n                          }),\n                      function() {\n                        l = !0;\n                      }\n                    );\n                  }\n                  s();\n                },\n                beforeRemoveClass: function(e, r, s) {\n                  if (\"active\" === r && e.parent() && !e.parent().data(a)) {\n                    var l = !1,\n                      c = \"next\" == e.data(o) ? \"left\" : \"right\",\n                      d = n.bind(this, e, c, s);\n                    return (\n                      i\n                        ? i(e, { addClass: c })\n                            .start()\n                            .done(d)\n                        : t.addClass(e, c).then(function() {\n                            l || d(), s();\n                          }),\n                      function() {\n                        l = !0;\n                      }\n                    );\n                  }\n                  s();\n                }\n              }\n            );\n          }\n        ]),\n      angular.module(\"ui.bootstrap.dateparser\", []).service(\"dateParser\", [\n        \"$log\",\n        \"$locale\",\n        \"orderByFilter\",\n        function(e, t, n) {\n          function a(e) {\n            var t = [],\n              a = e.split(\"\");\n            return (\n              angular.forEach(i, function(n, o) {\n                var i = e.indexOf(o);\n                if (i > -1) {\n                  (e = e.split(\"\")), (a[i] = \"(\" + n.regex + \")\"), (e[i] = \"$\");\n                  for (var r = i + 1, s = i + o.length; s > r; r++) (a[r] = \"\"), (e[r] = \"$\");\n                  (e = e.join(\"\")), t.push({ index: i, apply: n.apply });\n                }\n              }),\n              { regex: new RegExp(\"^\" + a.join(\"\") + \"$\"), map: n(t, \"index\") }\n            );\n          }\n          var o = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n          this.parsers = {};\n          var i = {\n            yyyy: {\n              regex: \"\\\\d{4}\",\n              apply: function(e) {\n                this.year = +e;\n              }\n            },\n            yy: {\n              regex: \"\\\\d{2}\",\n              apply: function(e) {\n                this.year = +e + 2e3;\n              }\n            },\n            y: {\n              regex: \"\\\\d{1,4}\",\n              apply: function(e) {\n                this.year = +e;\n              }\n            },\n            MMMM: {\n              regex: t.DATETIME_FORMATS.MONTH.join(\"|\"),\n              apply: function(e) {\n                this.month = t.DATETIME_FORMATS.MONTH.indexOf(e);\n              }\n            },\n            MMM: {\n              regex: t.DATETIME_FORMATS.SHORTMONTH.join(\"|\"),\n              apply: function(e) {\n                this.month = t.DATETIME_FORMATS.SHORTMONTH.indexOf(e);\n              }\n            },\n            MM: {\n              regex: \"0[1-9]|1[0-2]\",\n              apply: function(e) {\n                this.month = e - 1;\n              }\n            },\n            M: {\n              regex: \"[1-9]|1[0-2]\",\n              apply: function(e) {\n                this.month = e - 1;\n              }\n            },\n            dd: {\n              regex: \"[0-2][0-9]{1}|3[0-1]{1}\",\n              apply: function(e) {\n                this.date = +e;\n              }\n            },\n            d: {\n              regex: \"[1-2]?[0-9]{1}|3[0-1]{1}\",\n              apply: function(e) {\n                this.date = +e;\n              }\n            },\n            EEEE: { regex: t.DATETIME_FORMATS.DAY.join(\"|\") },\n            EEE: { regex: t.DATETIME_FORMATS.SHORTDAY.join(\"|\") },\n            HH: {\n              regex: \"(?:0|1)[0-9]|2[0-3]\",\n              apply: function(e) {\n                this.hours = +e;\n              }\n            },\n            hh: {\n              regex: \"0[0-9]|1[0-2]\",\n              apply: function(e) {\n                this.hours = +e;\n              }\n            },\n            H: {\n              regex: \"1?[0-9]|2[0-3]\",\n              apply: function(e) {\n                this.hours = +e;\n              }\n            },\n            h: {\n              regex: \"[0-9]|1[0-2]\",\n              apply: function(e) {\n                this.hours = +e;\n              }\n            },\n            mm: {\n              regex: \"[0-5][0-9]\",\n              apply: function(e) {\n                this.minutes = +e;\n              }\n            },\n            m: {\n              regex: \"[0-9]|[1-5][0-9]\",\n              apply: function(e) {\n                this.minutes = +e;\n              }\n            },\n            sss: {\n              regex: \"[0-9][0-9][0-9]\",\n              apply: function(e) {\n                this.milliseconds = +e;\n              }\n            },\n            ss: {\n              regex: \"[0-5][0-9]\",\n              apply: function(e) {\n                this.seconds = +e;\n              }\n            },\n            s: {\n              regex: \"[0-9]|[1-5][0-9]\",\n              apply: function(e) {\n                this.seconds = +e;\n              }\n            },\n            a: {\n              regex: t.DATETIME_FORMATS.AMPMS.join(\"|\"),\n              apply: function(e) {\n                12 === this.hours && (this.hours = 0), \"PM\" === e && (this.hours += 12);\n              }\n            }\n          };\n          this.parse = function(n, i, r) {\n            if (!angular.isString(n) || !i) return n;\n            (i = (i = t.DATETIME_FORMATS[i] || i).replace(o, \"\\\\$&\")),\n              this.parsers[i] || (this.parsers[i] = a(i));\n            var s = this.parsers[i],\n              l = s.regex,\n              c = s.map,\n              d = n.match(l);\n            if (d && d.length) {\n              var u, p;\n              angular.isDate(r) && !isNaN(r.getTime())\n                ? (u = {\n                    year: r.getFullYear(),\n                    month: r.getMonth(),\n                    date: r.getDate(),\n                    hours: r.getHours(),\n                    minutes: r.getMinutes(),\n                    seconds: r.getSeconds(),\n                    milliseconds: r.getMilliseconds()\n                  })\n                : (r && e.warn(\"dateparser:\", \"baseDate is not a valid date\"),\n                  (u = {\n                    year: 1900,\n                    month: 0,\n                    date: 1,\n                    hours: 0,\n                    minutes: 0,\n                    seconds: 0,\n                    milliseconds: 0\n                  }));\n              for (var h = 1, f = d.length; f > h; h++) {\n                var m = c[h - 1];\n                m.apply && m.apply.call(u, d[h]);\n              }\n              return (\n                (function(e, t, n) {\n                  return (\n                    !(1 > n) &&\n                    (1 === t && n > 28\n                      ? 29 === n && ((e % 4 == 0 && e % 100 != 0) || e % 400 == 0)\n                      : (3 !== t && 5 !== t && 8 !== t && 10 !== t) || 31 > n)\n                  );\n                })(u.year, u.month, u.date) &&\n                  (p = new Date(\n                    u.year,\n                    u.month,\n                    u.date,\n                    u.hours,\n                    u.minutes,\n                    u.seconds,\n                    u.milliseconds || 0\n                  )),\n                p\n              );\n            }\n          };\n        }\n      ]),\n      angular.module(\"ui.bootstrap.position\", []).factory(\"$position\", [\n        \"$document\",\n        \"$window\",\n        function(e, t) {\n          function n(e) {\n            return (\n              \"static\" ===\n              ((function(e, n) {\n                return e.currentStyle\n                  ? e.currentStyle[n]\n                  : t.getComputedStyle\n                    ? t.getComputedStyle(e)[n]\n                    : e.style[n];\n              })(e, \"position\") || \"static\")\n            );\n          }\n          var a = function(t) {\n            for (var a = e[0], o = t.offsetParent || a; o && o !== a && n(o); ) o = o.offsetParent;\n            return o || a;\n          };\n          return {\n            position: function(t) {\n              var n = this.offset(t),\n                o = { top: 0, left: 0 },\n                i = a(t[0]);\n              i != e[0] &&\n                (((o = this.offset(angular.element(i))).top += i.clientTop - i.scrollTop),\n                (o.left += i.clientLeft - i.scrollLeft));\n              var r = t[0].getBoundingClientRect();\n              return {\n                width: r.width || t.prop(\"offsetWidth\"),\n                height: r.height || t.prop(\"offsetHeight\"),\n                top: n.top - o.top,\n                left: n.left - o.left\n              };\n            },\n            offset: function(n) {\n              var a = n[0].getBoundingClientRect();\n              return {\n                width: a.width || n.prop(\"offsetWidth\"),\n                height: a.height || n.prop(\"offsetHeight\"),\n                top: a.top + (t.pageYOffset || e[0].documentElement.scrollTop),\n                left: a.left + (t.pageXOffset || e[0].documentElement.scrollLeft)\n              };\n            },\n            positionElements: function(e, t, n, a) {\n              var o,\n                i,\n                r,\n                s,\n                l = n.split(\"-\"),\n                c = l[0],\n                d = l[1] || \"center\";\n              (o = a ? this.offset(e) : this.position(e)),\n                (i = t.prop(\"offsetWidth\")),\n                (r = t.prop(\"offsetHeight\"));\n              var u = {\n                  center: function() {\n                    return o.left + o.width / 2 - i / 2;\n                  },\n                  left: function() {\n                    return o.left;\n                  },\n                  right: function() {\n                    return o.left + o.width;\n                  }\n                },\n                p = {\n                  center: function() {\n                    return o.top + o.height / 2 - r / 2;\n                  },\n                  top: function() {\n                    return o.top;\n                  },\n                  bottom: function() {\n                    return o.top + o.height;\n                  }\n                };\n              switch (c) {\n                case \"right\":\n                  s = { top: p[d](), left: u[c]() };\n                  break;\n                case \"left\":\n                  s = { top: p[d](), left: o.left - i };\n                  break;\n                case \"bottom\":\n                  s = { top: p[c](), left: u[d]() };\n                  break;\n                default:\n                  s = { top: o.top - r, left: u[d]() };\n              }\n              return s;\n            }\n          };\n        }\n      ]),\n      angular\n        .module(\"ui.bootstrap.datepicker\", [\"ui.bootstrap.dateparser\", \"ui.bootstrap.position\"])\n        .value(\"$datepickerSuppressError\", !1)\n        .constant(\"datepickerConfig\", {\n          formatDay: \"dd\",\n          formatMonth: \"MMMM\",\n          formatYear: \"yyyy\",\n          formatDayHeader: \"EEE\",\n          formatDayTitle: \"MMMM yyyy\",\n          formatMonthTitle: \"yyyy\",\n          datepickerMode: \"day\",\n          minMode: \"day\",\n          maxMode: \"year\",\n          showWeeks: !0,\n          startingDay: 0,\n          yearRange: 20,\n          minDate: null,\n          maxDate: null,\n          shortcutPropagation: !1\n        })\n        .controller(\"DatepickerController\", [\n          \"$scope\",\n          \"$attrs\",\n          \"$parse\",\n          \"$interpolate\",\n          \"$log\",\n          \"dateFilter\",\n          \"datepickerConfig\",\n          \"$datepickerSuppressError\",\n          function(e, t, n, a, o, i, r, s) {\n            var l = this,\n              c = { $setViewValue: angular.noop };\n            (this.modes = [\"day\", \"month\", \"year\"]),\n              angular.forEach(\n                [\n                  \"formatDay\",\n                  \"formatMonth\",\n                  \"formatYear\",\n                  \"formatDayHeader\",\n                  \"formatDayTitle\",\n                  \"formatMonthTitle\",\n                  \"showWeeks\",\n                  \"startingDay\",\n                  \"yearRange\",\n                  \"shortcutPropagation\"\n                ],\n                function(n, o) {\n                  l[n] = angular.isDefined(t[n])\n                    ? 6 > o\n                      ? a(t[n])(e.$parent)\n                      : e.$parent.$eval(t[n])\n                    : r[n];\n                }\n              ),\n              angular.forEach([\"minDate\", \"maxDate\"], function(a) {\n                t[a]\n                  ? e.$parent.$watch(n(t[a]), function(e) {\n                      (l[a] = e ? new Date(e) : null), l.refreshView();\n                    })\n                  : (l[a] = r[a] ? new Date(r[a]) : null);\n              }),\n              angular.forEach([\"minMode\", \"maxMode\"], function(a) {\n                t[a]\n                  ? e.$parent.$watch(n(t[a]), function(n) {\n                      (l[a] = angular.isDefined(n) ? n : t[a]),\n                        (e[a] = l[a]),\n                        ((\"minMode\" == a &&\n                          l.modes.indexOf(e.datepickerMode) < l.modes.indexOf(l[a])) ||\n                          (\"maxMode\" == a &&\n                            l.modes.indexOf(e.datepickerMode) > l.modes.indexOf(l[a]))) &&\n                          (e.datepickerMode = l[a]);\n                    })\n                  : ((l[a] = r[a] || null), (e[a] = l[a]));\n              }),\n              (e.datepickerMode = e.datepickerMode || r.datepickerMode),\n              (e.uniqueId = \"datepicker-\" + e.$id + \"-\" + Math.floor(1e4 * Math.random())),\n              angular.isDefined(t.initDate)\n                ? ((this.activeDate = e.$parent.$eval(t.initDate) || new Date()),\n                  e.$parent.$watch(t.initDate, function(e) {\n                    e &&\n                      (c.$isEmpty(c.$modelValue) || c.$invalid) &&\n                      ((l.activeDate = e), l.refreshView());\n                  }))\n                : (this.activeDate = new Date()),\n              (e.isActive = function(t) {\n                return 0 === l.compare(t.date, l.activeDate) && ((e.activeDateId = t.uid), !0);\n              }),\n              (this.init = function(e) {\n                (c = e).$render = function() {\n                  l.render();\n                };\n              }),\n              (this.render = function() {\n                if (c.$viewValue) {\n                  var e = new Date(c.$viewValue);\n                  !isNaN(e)\n                    ? (this.activeDate = e)\n                    : s ||\n                      o.error(\n                        'Datepicker directive: \"ng-model\" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.'\n                      );\n                }\n                this.refreshView();\n              }),\n              (this.refreshView = function() {\n                if (this.element) {\n                  this._refreshView();\n                  var e = c.$viewValue ? new Date(c.$viewValue) : null;\n                  c.$setValidity(\"dateDisabled\", !e || (this.element && !this.isDisabled(e)));\n                }\n              }),\n              (this.createDateObject = function(e, t) {\n                var n = c.$viewValue ? new Date(c.$viewValue) : null;\n                return {\n                  date: e,\n                  label: i(e, t),\n                  selected: n && 0 === this.compare(e, n),\n                  disabled: this.isDisabled(e),\n                  current: 0 === this.compare(e, new Date()),\n                  customClass: this.customClass(e)\n                };\n              }),\n              (this.isDisabled = function(n) {\n                return (\n                  (this.minDate && this.compare(n, this.minDate) < 0) ||\n                  (this.maxDate && this.compare(n, this.maxDate) > 0) ||\n                  (t.dateDisabled && e.dateDisabled({ date: n, mode: e.datepickerMode }))\n                );\n              }),\n              (this.customClass = function(t) {\n                return e.customClass({ date: t, mode: e.datepickerMode });\n              }),\n              (this.split = function(e, t) {\n                for (var n = []; e.length > 0; ) n.push(e.splice(0, t));\n                return n;\n              }),\n              (this.fixTimeZone = function(e) {\n                var t = e.getHours();\n                e.setHours(23 === t ? t + 2 : 0);\n              }),\n              (e.select = function(t) {\n                if (e.datepickerMode === l.minMode) {\n                  var n = c.$viewValue ? new Date(c.$viewValue) : new Date(0, 0, 0, 0, 0, 0, 0);\n                  n.setFullYear(t.getFullYear(), t.getMonth(), t.getDate()),\n                    c.$setViewValue(n),\n                    c.$render();\n                } else\n                  (l.activeDate = t),\n                    (e.datepickerMode = l.modes[l.modes.indexOf(e.datepickerMode) - 1]);\n              }),\n              (e.move = function(e) {\n                var t = l.activeDate.getFullYear() + e * (l.step.years || 0),\n                  n = l.activeDate.getMonth() + e * (l.step.months || 0);\n                l.activeDate.setFullYear(t, n, 1), l.refreshView();\n              }),\n              (e.toggleMode = function(t) {\n                (t = t || 1),\n                  (e.datepickerMode === l.maxMode && 1 === t) ||\n                    (e.datepickerMode === l.minMode && -1 === t) ||\n                    (e.datepickerMode = l.modes[l.modes.indexOf(e.datepickerMode) + t]);\n              }),\n              (e.keys = {\n                13: \"enter\",\n                32: \"space\",\n                33: \"pageup\",\n                34: \"pagedown\",\n                35: \"end\",\n                36: \"home\",\n                37: \"left\",\n                38: \"up\",\n                39: \"right\",\n                40: \"down\"\n              });\n            var d = function() {\n              l.element[0].focus();\n            };\n            e.$on(\"datepicker.focus\", d),\n              (e.keydown = function(t) {\n                var n = e.keys[t.which];\n                if (n && !t.shiftKey && !t.altKey)\n                  if (\n                    (t.preventDefault(),\n                    l.shortcutPropagation || t.stopPropagation(),\n                    \"enter\" === n || \"space\" === n)\n                  ) {\n                    if (l.isDisabled(l.activeDate)) return;\n                    e.select(l.activeDate), d();\n                  } else\n                    !t.ctrlKey || (\"up\" !== n && \"down\" !== n)\n                      ? (l.handleKeyDown(n, t), l.refreshView())\n                      : (e.toggleMode(\"up\" === n ? 1 : -1), d());\n              });\n          }\n        ])\n        .directive(\"datepicker\", function() {\n          return {\n            restrict: \"EA\",\n            replace: !0,\n            templateUrl: function(e, t) {\n              return t.templateUrl || \"template/datepicker/datepicker.html\";\n            },\n            scope: {\n              datepickerMode: \"=?\",\n              dateDisabled: \"&\",\n              customClass: \"&\",\n              shortcutPropagation: \"&?\"\n            },\n            require: [\"datepicker\", \"^ngModel\"],\n            controller: \"DatepickerController\",\n            controllerAs: \"datepicker\",\n            link: function(e, t, n, a) {\n              var o = a[0],\n                i = a[1];\n              o.init(i);\n            }\n          };\n        })\n        .directive(\"daypicker\", [\n          \"dateFilter\",\n          function(e) {\n            return {\n              restrict: \"EA\",\n              replace: !0,\n              templateUrl: \"template/datepicker/day.html\",\n              require: \"^datepicker\",\n              link: function(t, n, a, o) {\n                function i(e, t) {\n                  return 1 !== t || e % 4 != 0 || (e % 100 == 0 && e % 400 != 0) ? s[t] : 29;\n                }\n                function r(e) {\n                  var t = new Date(e);\n                  t.setDate(t.getDate() + 4 - (t.getDay() || 7));\n                  var n = t.getTime();\n                  return (\n                    t.setMonth(0), t.setDate(1), Math.floor(Math.round((n - t) / 864e5) / 7) + 1\n                  );\n                }\n                (t.showWeeks = o.showWeeks), (o.step = { months: 1 }), (o.element = n);\n                var s = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n                (o._refreshView = function() {\n                  var n = o.activeDate.getFullYear(),\n                    a = o.activeDate.getMonth(),\n                    i = new Date(n, a, 1),\n                    s = o.startingDay - i.getDay(),\n                    l = s > 0 ? 7 - s : -s,\n                    c = new Date(i);\n                  l > 0 && c.setDate(1 - l);\n                  for (\n                    var d = (function(e, t) {\n                        for (var n, a = new Array(t), i = new Date(e), r = 0; t > r; )\n                          (n = new Date(i)),\n                            o.fixTimeZone(n),\n                            (a[r++] = n),\n                            i.setDate(i.getDate() + 1);\n                        return a;\n                      })(c, 42),\n                      u = 0;\n                    42 > u;\n                    u++\n                  )\n                    d[u] = angular.extend(o.createDateObject(d[u], o.formatDay), {\n                      secondary: d[u].getMonth() !== a,\n                      uid: t.uniqueId + \"-\" + u\n                    });\n                  t.labels = new Array(7);\n                  for (var p = 0; 7 > p; p++)\n                    t.labels[p] = {\n                      abbr: e(d[p].date, o.formatDayHeader),\n                      full: e(d[p].date, \"EEEE\")\n                    };\n                  if (\n                    ((t.title = e(o.activeDate, o.formatDayTitle)),\n                    (t.rows = o.split(d, 7)),\n                    t.showWeeks)\n                  ) {\n                    t.weekNumbers = [];\n                    for (var h = (11 - o.startingDay) % 7, f = t.rows.length, m = 0; f > m; m++)\n                      t.weekNumbers.push(r(t.rows[m][h].date));\n                  }\n                }),\n                  (o.compare = function(e, t) {\n                    return (\n                      new Date(e.getFullYear(), e.getMonth(), e.getDate()) -\n                      new Date(t.getFullYear(), t.getMonth(), t.getDate())\n                    );\n                  }),\n                  (o.handleKeyDown = function(e, t) {\n                    var n = o.activeDate.getDate();\n                    if (\"left\" === e) n -= 1;\n                    else if (\"up\" === e) n -= 7;\n                    else if (\"right\" === e) n += 1;\n                    else if (\"down\" === e) n += 7;\n                    else if (\"pageup\" === e || \"pagedown\" === e) {\n                      var a = o.activeDate.getMonth() + (\"pageup\" === e ? -1 : 1);\n                      o.activeDate.setMonth(a, 1),\n                        (n = Math.min(i(o.activeDate.getFullYear(), o.activeDate.getMonth()), n));\n                    } else\n                      \"home\" === e\n                        ? (n = 1)\n                        : \"end\" === e &&\n                          (n = i(o.activeDate.getFullYear(), o.activeDate.getMonth()));\n                    o.activeDate.setDate(n);\n                  }),\n                  o.refreshView();\n              }\n            };\n          }\n        ])\n        .directive(\"monthpicker\", [\n          \"dateFilter\",\n          function(e) {\n            return {\n              restrict: \"EA\",\n              replace: !0,\n              templateUrl: \"template/datepicker/month.html\",\n              require: \"^datepicker\",\n              link: function(t, n, a, o) {\n                (o.step = { years: 1 }),\n                  (o.element = n),\n                  (o._refreshView = function() {\n                    for (\n                      var n, a = new Array(12), i = o.activeDate.getFullYear(), r = 0;\n                      12 > r;\n                      r++\n                    )\n                      (n = new Date(i, r, 1)),\n                        o.fixTimeZone(n),\n                        (a[r] = angular.extend(o.createDateObject(n, o.formatMonth), {\n                          uid: t.uniqueId + \"-\" + r\n                        }));\n                    (t.title = e(o.activeDate, o.formatMonthTitle)), (t.rows = o.split(a, 3));\n                  }),\n                  (o.compare = function(e, t) {\n                    return (\n                      new Date(e.getFullYear(), e.getMonth()) -\n                      new Date(t.getFullYear(), t.getMonth())\n                    );\n                  }),\n                  (o.handleKeyDown = function(e, t) {\n                    var n = o.activeDate.getMonth();\n                    if (\"left\" === e) n -= 1;\n                    else if (\"up\" === e) n -= 3;\n                    else if (\"right\" === e) n += 1;\n                    else if (\"down\" === e) n += 3;\n                    else if (\"pageup\" === e || \"pagedown\" === e) {\n                      var a = o.activeDate.getFullYear() + (\"pageup\" === e ? -1 : 1);\n                      o.activeDate.setFullYear(a);\n                    } else \"home\" === e ? (n = 0) : \"end\" === e && (n = 11);\n                    o.activeDate.setMonth(n);\n                  }),\n                  o.refreshView();\n              }\n            };\n          }\n        ])\n        .directive(\"yearpicker\", [\n          \"dateFilter\",\n          function(e) {\n            return {\n              restrict: \"EA\",\n              replace: !0,\n              templateUrl: \"template/datepicker/year.html\",\n              require: \"^datepicker\",\n              link: function(e, t, n, a) {\n                function o(e) {\n                  return parseInt((e - 1) / i, 10) * i + 1;\n                }\n                var i = a.yearRange;\n                (a.step = { years: i }),\n                  (a.element = t),\n                  (a._refreshView = function() {\n                    for (\n                      var t, n = new Array(i), r = 0, s = o(a.activeDate.getFullYear());\n                      i > r;\n                      r++\n                    )\n                      (t = new Date(s + r, 0, 1)),\n                        a.fixTimeZone(t),\n                        (n[r] = angular.extend(a.createDateObject(t, a.formatYear), {\n                          uid: e.uniqueId + \"-\" + r\n                        }));\n                    (e.title = [n[0].label, n[i - 1].label].join(\" - \")), (e.rows = a.split(n, 5));\n                  }),\n                  (a.compare = function(e, t) {\n                    return e.getFullYear() - t.getFullYear();\n                  }),\n                  (a.handleKeyDown = function(e, t) {\n                    var n = a.activeDate.getFullYear();\n                    \"left\" === e\n                      ? (n -= 1)\n                      : \"up\" === e\n                        ? (n -= 5)\n                        : \"right\" === e\n                          ? (n += 1)\n                          : \"down\" === e\n                            ? (n += 5)\n                            : \"pageup\" === e || \"pagedown\" === e\n                              ? (n += (\"pageup\" === e ? -1 : 1) * a.step.years)\n                              : \"home\" === e\n                                ? (n = o(a.activeDate.getFullYear()))\n                                : \"end\" === e && (n = o(a.activeDate.getFullYear()) + i - 1),\n                      a.activeDate.setFullYear(n);\n                  }),\n                  a.refreshView();\n              }\n            };\n          }\n        ])\n        .constant(\"datepickerPopupConfig\", {\n          datepickerPopup: \"yyyy-MM-dd\",\n          datepickerPopupTemplateUrl: \"template/datepicker/popup.html\",\n          datepickerTemplateUrl: \"template/datepicker/datepicker.html\",\n          html5Types: {\n            date: \"yyyy-MM-dd\",\n            \"datetime-local\": \"yyyy-MM-ddTHH:mm:ss.sss\",\n            month: \"yyyy-MM\"\n          },\n          currentText: \"Today\",\n          clearText: \"Clear\",\n          closeText: \"Done\",\n          closeOnDateSelection: !0,\n          appendToBody: !1,\n          showButtonBar: !0,\n          onOpenFocus: !0\n        })\n        .directive(\"datepickerPopup\", [\n          \"$compile\",\n          \"$parse\",\n          \"$document\",\n          \"$rootScope\",\n          \"$position\",\n          \"dateFilter\",\n          \"dateParser\",\n          \"datepickerPopupConfig\",\n          \"$timeout\",\n          function(e, t, n, a, o, i, r, s, l) {\n            return {\n              restrict: \"EA\",\n              require: \"ngModel\",\n              scope: {\n                isOpen: \"=?\",\n                currentText: \"@\",\n                clearText: \"@\",\n                closeText: \"@\",\n                dateDisabled: \"&\",\n                customClass: \"&\"\n              },\n              link: function(c, d, u, p) {\n                function h(e) {\n                  return e.replace(/([A-Z])/g, function(e) {\n                    return \"-\" + e.toLowerCase();\n                  });\n                }\n                var f,\n                  m = angular.isDefined(u.closeOnDateSelection)\n                    ? c.$parent.$eval(u.closeOnDateSelection)\n                    : s.closeOnDateSelection,\n                  g = angular.isDefined(u.datepickerAppendToBody)\n                    ? c.$parent.$eval(u.datepickerAppendToBody)\n                    : s.appendToBody,\n                  v = angular.isDefined(u.onOpenFocus)\n                    ? c.$parent.$eval(u.onOpenFocus)\n                    : s.onOpenFocus,\n                  b = angular.isDefined(u.datepickerPopupTemplateUrl)\n                    ? u.datepickerPopupTemplateUrl\n                    : s.datepickerPopupTemplateUrl,\n                  w = angular.isDefined(u.datepickerTemplateUrl)\n                    ? u.datepickerTemplateUrl\n                    : s.datepickerTemplateUrl,\n                  y = {};\n                (c.showButtonBar = angular.isDefined(u.showButtonBar)\n                  ? c.$parent.$eval(u.showButtonBar)\n                  : s.showButtonBar),\n                  (c.getText = function(e) {\n                    return c[e + \"Text\"] || s[e + \"Text\"];\n                  }),\n                  (c.isDisabled = function(e) {\n                    return (\n                      \"today\" === e && (e = new Date()),\n                      (c.watchData.minDate && c.compare(e, y.minDate) < 0) ||\n                        (c.watchData.maxDate && c.compare(e, y.maxDate) > 0)\n                    );\n                  }),\n                  (c.compare = function(e, t) {\n                    return (\n                      new Date(e.getFullYear(), e.getMonth(), e.getDate()) -\n                      new Date(t.getFullYear(), t.getMonth(), t.getDate())\n                    );\n                  });\n                var k = !1;\n                if (\n                  (s.html5Types[u.type]\n                    ? ((f = s.html5Types[u.type]), (k = !0))\n                    : ((f = u.datepickerPopup || s.datepickerPopup),\n                      u.$observe(\"datepickerPopup\", function(e, t) {\n                        var n = e || s.datepickerPopup;\n                        if (n !== f && ((f = n), (p.$modelValue = null), !f))\n                          throw new Error(\"datepickerPopup must have a date format specified.\");\n                      })),\n                  !f)\n                )\n                  throw new Error(\"datepickerPopup must have a date format specified.\");\n                if (k && u.datepickerPopup)\n                  throw new Error(\"HTML5 date input types do not support custom formats.\");\n                var S = angular.element(\"<div datepicker-popup-wrap><div datepicker></div></div>\");\n                S.attr({\n                  \"ng-model\": \"date\",\n                  \"ng-change\": \"dateSelection(date)\",\n                  \"template-url\": b\n                });\n                var T = angular.element(S.children()[0]);\n                if (\n                  (T.attr(\"template-url\", w),\n                  k &&\n                    \"month\" === u.type &&\n                    (T.attr(\"datepicker-mode\", '\"month\"'), T.attr(\"min-mode\", \"month\")),\n                  u.datepickerOptions)\n                ) {\n                  var C = c.$parent.$eval(u.datepickerOptions);\n                  C &&\n                    C.initDate &&\n                    ((c.initDate = C.initDate), T.attr(\"init-date\", \"initDate\"), delete C.initDate),\n                    angular.forEach(C, function(e, t) {\n                      T.attr(h(t), e);\n                    });\n                }\n                (c.watchData = {}),\n                  angular.forEach(\n                    [\n                      \"minMode\",\n                      \"maxMode\",\n                      \"minDate\",\n                      \"maxDate\",\n                      \"datepickerMode\",\n                      \"initDate\",\n                      \"shortcutPropagation\"\n                    ],\n                    function(e) {\n                      if (u[e]) {\n                        var n = t(u[e]);\n                        if (\n                          (c.$parent.$watch(n, function(t) {\n                            (c.watchData[e] = t),\n                              (\"minDate\" === e || \"maxDate\" === e) && (y[e] = new Date(t));\n                          }),\n                          T.attr(h(e), \"watchData.\" + e),\n                          \"datepickerMode\" === e)\n                        ) {\n                          var a = n.assign;\n                          c.$watch(\"watchData.\" + e, function(e, t) {\n                            angular.isFunction(a) && e !== t && a(c.$parent, e);\n                          });\n                        }\n                      }\n                    }\n                  ),\n                  u.dateDisabled &&\n                    T.attr(\"date-disabled\", \"dateDisabled({ date: date, mode: mode })\"),\n                  u.showWeeks && T.attr(\"show-weeks\", u.showWeeks),\n                  u.customClass &&\n                    T.attr(\"custom-class\", \"customClass({ date: date, mode: mode })\"),\n                  k\n                    ? p.$formatters.push(function(e) {\n                        return (c.date = e), e;\n                      })\n                    : ((p.$$parserName = \"date\"),\n                      (p.$validators.date = function(e, t) {\n                        var n = e || t;\n                        if (!u.ngRequired && !n) return !0;\n                        if ((angular.isNumber(n) && (n = new Date(n)), n)) {\n                          if (angular.isDate(n) && !isNaN(n)) return !0;\n                          if (angular.isString(n)) {\n                            var a = r.parse(n, f);\n                            return !isNaN(a);\n                          }\n                          return !1;\n                        }\n                        return !0;\n                      }),\n                      p.$parsers.unshift(function(e) {\n                        if ((angular.isNumber(e) && (e = new Date(e)), !e)) return null;\n                        if (angular.isDate(e) && !isNaN(e)) return e;\n                        if (angular.isString(e)) {\n                          var t = r.parse(e, f, c.date);\n                          return isNaN(t) ? void 0 : t;\n                        }\n                      }),\n                      p.$formatters.push(function(e) {\n                        return (c.date = e), p.$isEmpty(e) ? e : i(e, f);\n                      })),\n                  (c.dateSelection = function(e) {\n                    angular.isDefined(e) && (c.date = e);\n                    var t = c.date ? i(c.date, f) : null;\n                    d.val(t), p.$setViewValue(t), m && ((c.isOpen = !1), d[0].focus());\n                  }),\n                  p.$viewChangeListeners.push(function() {\n                    c.date = r.parse(p.$viewValue, f, c.date);\n                  });\n                var P = function(e) {\n                    !c.isOpen ||\n                      d[0].contains(e.target) ||\n                      S[0].contains(e.target) ||\n                      c.$apply(function() {\n                        c.isOpen = !1;\n                      });\n                  },\n                  A = function(e) {\n                    27 === e.which && c.isOpen\n                      ? (e.preventDefault(),\n                        e.stopPropagation(),\n                        c.$apply(function() {\n                          c.isOpen = !1;\n                        }),\n                        d[0].focus())\n                      : 40 !== e.which ||\n                        c.isOpen ||\n                        (e.preventDefault(),\n                        e.stopPropagation(),\n                        c.$apply(function() {\n                          c.isOpen = !0;\n                        }));\n                  };\n                d.bind(\"keydown\", A),\n                  (c.keydown = function(e) {\n                    27 === e.which && ((c.isOpen = !1), d[0].focus());\n                  }),\n                  c.$watch(\"isOpen\", function(e) {\n                    e\n                      ? ((c.position = g ? o.offset(d) : o.position(d)),\n                        (c.position.top = c.position.top + d.prop(\"offsetHeight\")),\n                        l(\n                          function() {\n                            v && c.$broadcast(\"datepicker.focus\"), n.bind(\"click\", P);\n                          },\n                          0,\n                          !1\n                        ))\n                      : n.unbind(\"click\", P);\n                  }),\n                  (c.select = function(e) {\n                    if (\"today\" === e) {\n                      var t = new Date();\n                      angular.isDate(c.date)\n                        ? (e = new Date(c.date)).setFullYear(\n                            t.getFullYear(),\n                            t.getMonth(),\n                            t.getDate()\n                          )\n                        : (e = new Date(t.setHours(0, 0, 0, 0)));\n                    }\n                    c.dateSelection(e);\n                  }),\n                  (c.close = function() {\n                    (c.isOpen = !1), d[0].focus();\n                  });\n                var x = e(S)(c);\n                S.remove(),\n                  g ? n.find(\"body\").append(x) : d.after(x),\n                  c.$on(\"$destroy\", function() {\n                    !0 === c.isOpen &&\n                      (a.$$phase ||\n                        c.$apply(function() {\n                          c.isOpen = !1;\n                        })),\n                      x.remove(),\n                      d.unbind(\"keydown\", A),\n                      n.unbind(\"click\", P);\n                  });\n              }\n            };\n          }\n        ])\n        .directive(\"datepickerPopupWrap\", function() {\n          return {\n            restrict: \"EA\",\n            replace: !0,\n            transclude: !0,\n            templateUrl: function(e, t) {\n              return t.templateUrl || \"template/datepicker/popup.html\";\n            }\n          };\n        }),\n      angular\n        .module(\"ui.bootstrap.dropdown\", [\"ui.bootstrap.position\"])\n        .constant(\"dropdownConfig\", { openClass: \"open\" })\n        .service(\"dropdownService\", [\n          \"$document\",\n          \"$rootScope\",\n          function(e, t) {\n            var n = null;\n            (this.open = function(t) {\n              n || (e.bind(\"click\", a), e.bind(\"keydown\", o)),\n                n && n !== t && (n.isOpen = !1),\n                (n = t);\n            }),\n              (this.close = function(t) {\n                n === t && ((n = null), e.unbind(\"click\", a), e.unbind(\"keydown\", o));\n              });\n            var a = function(e) {\n                if (n && (!e || \"disabled\" !== n.getAutoClose())) {\n                  var a = n.getToggleElement();\n                  if (!(e && a && a[0].contains(e.target))) {\n                    var o = n.getDropdownElement();\n                    (e && \"outsideClick\" === n.getAutoClose() && o && o[0].contains(e.target)) ||\n                      ((n.isOpen = !1), t.$$phase || n.$apply());\n                  }\n                }\n              },\n              o = function(e) {\n                27 === e.which\n                  ? (n.focusToggleElement(), a())\n                  : n.isKeynavEnabled() &&\n                    /(38|40)/.test(e.which) &&\n                    n.isOpen &&\n                    (e.preventDefault(), e.stopPropagation(), n.focusDropdownEntry(e.which));\n              };\n          }\n        ])\n        .controller(\"DropdownController\", [\n          \"$scope\",\n          \"$attrs\",\n          \"$parse\",\n          \"dropdownConfig\",\n          \"dropdownService\",\n          \"$animate\",\n          \"$position\",\n          \"$document\",\n          \"$compile\",\n          \"$templateRequest\",\n          function(e, t, n, a, o, i, r, s, l, c) {\n            var d,\n              u,\n              p = this,\n              h = e.$new(),\n              f = a.openClass,\n              m = angular.noop,\n              g = t.onToggle ? n(t.onToggle) : angular.noop,\n              v = !1,\n              b = !1,\n              w = s.find(\"body\");\n            (this.init = function(a) {\n              (p.$element = a),\n                t.isOpen &&\n                  ((u = n(t.isOpen)),\n                  (m = u.assign),\n                  e.$watch(u, function(e) {\n                    h.isOpen = !!e;\n                  })),\n                (v = angular.isDefined(t.dropdownAppendToBody)),\n                (b = angular.isDefined(t.keyboardNav)),\n                v &&\n                  p.dropdownMenu &&\n                  (w.append(p.dropdownMenu),\n                  w.addClass(\"dropdown\"),\n                  a.on(\"$destroy\", function() {\n                    p.dropdownMenu.remove();\n                  }));\n            }),\n              (this.toggle = function(e) {\n                return (h.isOpen = arguments.length ? !!e : !h.isOpen);\n              }),\n              (this.isOpen = function() {\n                return h.isOpen;\n              }),\n              (h.getToggleElement = function() {\n                return p.toggleElement;\n              }),\n              (h.getAutoClose = function() {\n                return t.autoClose || \"always\";\n              }),\n              (h.getElement = function() {\n                return p.$element;\n              }),\n              (h.isKeynavEnabled = function() {\n                return b;\n              }),\n              (h.focusDropdownEntry = function(e) {\n                var t = p.dropdownMenu\n                  ? angular.element(p.dropdownMenu).find(\"a\")\n                  : angular\n                      .element(p.$element)\n                      .find(\"ul\")\n                      .eq(0)\n                      .find(\"a\");\n                switch (e) {\n                  case 40:\n                    angular.isNumber(p.selectedOption)\n                      ? (p.selectedOption =\n                          p.selectedOption === t.length - 1\n                            ? p.selectedOption\n                            : p.selectedOption + 1)\n                      : (p.selectedOption = 0);\n                    break;\n                  case 38:\n                    angular.isNumber(p.selectedOption)\n                      ? (p.selectedOption = 0 === p.selectedOption ? 0 : p.selectedOption - 1)\n                      : (p.selectedOption = t.length - 1);\n                }\n                t[p.selectedOption].focus();\n              }),\n              (h.getDropdownElement = function() {\n                return p.dropdownMenu;\n              }),\n              (h.focusToggleElement = function() {\n                p.toggleElement && p.toggleElement[0].focus();\n              }),\n              h.$watch(\"isOpen\", function(t, n) {\n                if (v && p.dropdownMenu) {\n                  var a = r.positionElements(p.$element, p.dropdownMenu, \"bottom-left\", !0),\n                    s = { top: a.top + \"px\", display: t ? \"block\" : \"none\" };\n                  p.dropdownMenu.hasClass(\"dropdown-menu-right\")\n                    ? ((s.left = \"auto\"),\n                      (s.right =\n                        window.innerWidth - (a.left + p.$element.prop(\"offsetWidth\")) + \"px\"))\n                    : ((s.left = a.left + \"px\"), (s.right = \"auto\")),\n                    p.dropdownMenu.css(s);\n                }\n                var u = v ? w : p.$element;\n                if (\n                  (i[t ? \"addClass\" : \"removeClass\"](u, f).then(function() {\n                    angular.isDefined(t) && t !== n && g(e, { open: !!t });\n                  }),\n                  t)\n                )\n                  p.dropdownMenuTemplateUrl &&\n                    c(p.dropdownMenuTemplateUrl).then(function(e) {\n                      (d = h.$new()),\n                        l(e.trim())(d, function(e) {\n                          var t = e;\n                          p.dropdownMenu.replaceWith(t), (p.dropdownMenu = t);\n                        });\n                    }),\n                    h.focusToggleElement(),\n                    o.open(h);\n                else {\n                  if (p.dropdownMenuTemplateUrl) {\n                    d && d.$destroy();\n                    var b = angular.element('<ul class=\"dropdown-menu\"></ul>');\n                    p.dropdownMenu.replaceWith(b), (p.dropdownMenu = b);\n                  }\n                  o.close(h), (p.selectedOption = null);\n                }\n                angular.isFunction(m) && m(e, t);\n              }),\n              e.$on(\"$locationChangeSuccess\", function() {\n                \"disabled\" !== h.getAutoClose() && (h.isOpen = !1);\n              });\n            var y = e.$on(\"$destroy\", function() {\n              h.$destroy();\n            });\n            h.$on(\"$destroy\", y);\n          }\n        ])\n        .directive(\"dropdown\", function() {\n          return {\n            controller: \"DropdownController\",\n            link: function(e, t, n, a) {\n              a.init(t), t.addClass(\"dropdown\");\n            }\n          };\n        })\n        .directive(\"dropdownMenu\", function() {\n          return {\n            restrict: \"AC\",\n            require: \"?^dropdown\",\n            link: function(e, t, n, a) {\n              if (a) {\n                var o = n.templateUrl;\n                o && (a.dropdownMenuTemplateUrl = o), a.dropdownMenu || (a.dropdownMenu = t);\n              }\n            }\n          };\n        })\n        .directive(\"keyboardNav\", function() {\n          return {\n            restrict: \"A\",\n            require: \"?^dropdown\",\n            link: function(e, t, n, a) {\n              t.bind(\"keydown\", function(e) {\n                if (-1 !== [38, 40].indexOf(e.which)) {\n                  e.preventDefault(), e.stopPropagation();\n                  var t = a.dropdownMenu.find(\"a\");\n                  switch (e.which) {\n                    case 40:\n                      angular.isNumber(a.selectedOption)\n                        ? (a.selectedOption =\n                            a.selectedOption === t.length - 1\n                              ? a.selectedOption\n                              : a.selectedOption + 1)\n                        : (a.selectedOption = 0);\n                      break;\n                    case 38:\n                      angular.isNumber(a.selectedOption)\n                        ? (a.selectedOption = 0 === a.selectedOption ? 0 : a.selectedOption - 1)\n                        : (a.selectedOption = t.length - 1);\n                  }\n                  t[a.selectedOption].focus();\n                }\n              });\n            }\n          };\n        })\n        .directive(\"dropdownToggle\", function() {\n          return {\n            require: \"?^dropdown\",\n            link: function(e, t, n, a) {\n              if (a) {\n                t.addClass(\"dropdown-toggle\"), (a.toggleElement = t);\n                var o = function(o) {\n                  o.preventDefault(),\n                    t.hasClass(\"disabled\") ||\n                      n.disabled ||\n                      e.$apply(function() {\n                        a.toggle();\n                      });\n                };\n                t.bind(\"click\", o),\n                  t.attr({ \"aria-haspopup\": !0, \"aria-expanded\": !1 }),\n                  e.$watch(a.isOpen, function(e) {\n                    t.attr(\"aria-expanded\", !!e);\n                  }),\n                  e.$on(\"$destroy\", function() {\n                    t.unbind(\"click\", o);\n                  });\n              }\n            }\n          };\n        }),\n      angular\n        .module(\"ui.bootstrap.modal\", [])\n        .factory(\"$$stackedMap\", function() {\n          return {\n            createNew: function() {\n              var e = [];\n              return {\n                add: function(t, n) {\n                  e.push({ key: t, value: n });\n                },\n                get: function(t) {\n                  for (var n = 0; n < e.length; n++) if (t == e[n].key) return e[n];\n                },\n                keys: function() {\n                  for (var t = [], n = 0; n < e.length; n++) t.push(e[n].key);\n                  return t;\n                },\n                top: function() {\n                  return e[e.length - 1];\n                },\n                remove: function(t) {\n                  for (var n = -1, a = 0; a < e.length; a++)\n                    if (t == e[a].key) {\n                      n = a;\n                      break;\n                    }\n                  return e.splice(n, 1)[0];\n                },\n                removeTop: function() {\n                  return e.splice(e.length - 1, 1)[0];\n                },\n                length: function() {\n                  return e.length;\n                }\n              };\n            }\n          };\n        })\n        .factory(\"$$multiMap\", function() {\n          return {\n            createNew: function() {\n              var e = {};\n              return {\n                entries: function() {\n                  return Object.keys(e).map(function(t) {\n                    return { key: t, value: e[t] };\n                  });\n                },\n                get: function(t) {\n                  return e[t];\n                },\n                hasKey: function(t) {\n                  return !!e[t];\n                },\n                keys: function() {\n                  return Object.keys(e);\n                },\n                put: function(t, n) {\n                  e[t] || (e[t] = []), e[t].push(n);\n                },\n                remove: function(t, n) {\n                  var a = e[t];\n                  if (a) {\n                    var o = a.indexOf(n);\n                    -1 !== o && a.splice(o, 1), a.length || delete e[t];\n                  }\n                }\n              };\n            }\n          };\n        })\n        .directive(\"modalBackdrop\", [\n          \"$animate\",\n          \"$injector\",\n          \"$modalStack\",\n          function(e, t, n) {\n            function a(t, a, i) {\n              i.modalInClass &&\n                (o ? o(a, { addClass: i.modalInClass }).start() : e.addClass(a, i.modalInClass),\n                t.$on(n.NOW_CLOSING_EVENT, function(t, n) {\n                  var r = n();\n                  o\n                    ? o(a, { removeClass: i.modalInClass })\n                        .start()\n                        .then(r)\n                    : e.removeClass(a, i.modalInClass).then(r);\n                }));\n            }\n            var o = null;\n            return (\n              t.has(\"$animateCss\") && (o = t.get(\"$animateCss\")),\n              {\n                restrict: \"EA\",\n                replace: !0,\n                templateUrl: \"template/modal/backdrop.html\",\n                compile: function(e, t) {\n                  return e.addClass(t.backdropClass), a;\n                }\n              }\n            );\n          }\n        ])\n        .directive(\"modalWindow\", [\n          \"$modalStack\",\n          \"$q\",\n          \"$animate\",\n          \"$injector\",\n          function(e, t, n, a) {\n            var o = null;\n            return (\n              a.has(\"$animateCss\") && (o = a.get(\"$animateCss\")),\n              {\n                restrict: \"EA\",\n                scope: { index: \"@\" },\n                replace: !0,\n                transclude: !0,\n                templateUrl: function(e, t) {\n                  return t.templateUrl || \"template/modal/window.html\";\n                },\n                link: function(a, i, r) {\n                  i.addClass(r.windowClass || \"\"),\n                    (a.size = r.size),\n                    (a.close = function(t) {\n                      var n = e.getTop();\n                      n &&\n                        n.value.backdrop &&\n                        \"static\" !== n.value.backdrop &&\n                        t.target === t.currentTarget &&\n                        (t.preventDefault(),\n                        t.stopPropagation(),\n                        e.dismiss(n.key, \"backdrop click\"));\n                    }),\n                    (a.$isRendered = !0);\n                  var s = t.defer();\n                  r.$observe(\"modalRender\", function(e) {\n                    \"true\" == e && s.resolve();\n                  }),\n                    s.promise.then(function() {\n                      var s = null;\n                      r.modalInClass &&\n                        ((s = o\n                          ? o(i, { addClass: r.modalInClass }).start()\n                          : n.addClass(i, r.modalInClass)),\n                        a.$on(e.NOW_CLOSING_EVENT, function(e, t) {\n                          var a = t();\n                          o\n                            ? o(i, { removeClass: r.modalInClass })\n                                .start()\n                                .then(a)\n                            : n.removeClass(i, r.modalInClass).then(a);\n                        })),\n                        t.when(s).then(function() {\n                          var e = i[0].querySelectorAll(\"[autofocus]\");\n                          e.length ? e[0].focus() : i[0].focus();\n                        });\n                      var l = e.getTop();\n                      l && e.modalRendered(l.key);\n                    });\n                }\n              }\n            );\n          }\n        ])\n        .directive(\"modalAnimationClass\", [\n          function() {\n            return {\n              compile: function(e, t) {\n                t.modalAnimation && e.addClass(t.modalAnimationClass);\n              }\n            };\n          }\n        ])\n        .directive(\"modalTransclude\", function() {\n          return {\n            link: function(e, t, n, a, o) {\n              o(e.$parent, function(e) {\n                t.empty(), t.append(e);\n              });\n            }\n          };\n        })\n        .factory(\"$modalStack\", [\n          \"$animate\",\n          \"$timeout\",\n          \"$document\",\n          \"$compile\",\n          \"$rootScope\",\n          \"$q\",\n          \"$injector\",\n          \"$$multiMap\",\n          \"$$stackedMap\",\n          function(e, t, n, a, o, i, r, s, l) {\n            function c() {\n              for (var e = -1, t = b.keys(), n = 0; n < t.length; n++)\n                b.get(t[n]).value.backdrop && (e = n);\n              return e;\n            }\n            function d(e, t) {\n              var a = n.find(\"body\").eq(0),\n                o = b.get(e).value;\n              b.remove(e),\n                u(o.modalDomEl, o.modalScope, function() {\n                  var t = o.openedClass || v;\n                  w.remove(t, e), a.toggleClass(t, w.hasKey(t));\n                }),\n                (function() {\n                  if (f && -1 == c()) {\n                    u(f, m, function() {\n                      null;\n                    }),\n                      (f = void 0),\n                      (m = void 0);\n                  }\n                })(),\n                t && t.focus ? t.focus() : a.focus();\n            }\n            function u(t, n, a) {\n              var o,\n                r = null;\n              return (\n                n.$broadcast(y.NOW_CLOSING_EVENT, function() {\n                  return (\n                    o || ((o = i.defer()), (r = o.promise)),\n                    function() {\n                      o.resolve();\n                    }\n                  );\n                }),\n                i.when(r).then(function o() {\n                  o.done ||\n                    ((o.done = !0),\n                    h\n                      ? h(t, { event: \"leave\" })\n                          .start()\n                          .then(function() {\n                            t.remove();\n                          })\n                      : e.leave(t),\n                    n.$destroy(),\n                    a && a());\n                })\n              );\n            }\n            function p(e, t, n) {\n              return !e.value.modalScope.$broadcast(\"modal.closing\", t, n).defaultPrevented;\n            }\n            var h = null;\n            r.has(\"$animateCss\") && (h = r.get(\"$animateCss\"));\n            var f,\n              m,\n              g,\n              v = \"modal-open\",\n              b = l.createNew(),\n              w = s.createNew(),\n              y = { NOW_CLOSING_EVENT: \"modal.stack.now-closing\" };\n            return (\n              o.$watch(c, function(e) {\n                m && (m.index = e);\n              }),\n              n.bind(\"keydown\", function(e) {\n                if (e.isDefaultPrevented()) return e;\n                var t = b.top();\n                if (t && t.value.keyboard)\n                  switch (e.which) {\n                    case 27:\n                      e.preventDefault(),\n                        o.$apply(function() {\n                          y.dismiss(t.key, \"escape key press\");\n                        });\n                      break;\n                    case 9:\n                      y.loadFocusElementList(t);\n                      var n = !1;\n                      e.shiftKey\n                        ? y.isFocusInFirstItem(e) && (n = y.focusLastFocusableElement())\n                        : y.isFocusInLastItem(e) && (n = y.focusFirstFocusableElement()),\n                        n && (e.preventDefault(), e.stopPropagation());\n                  }\n              }),\n              (y.open = function(e, t) {\n                var i = n[0].activeElement,\n                  r = t.openedClass || v;\n                b.add(e, {\n                  deferred: t.deferred,\n                  renderDeferred: t.renderDeferred,\n                  modalScope: t.scope,\n                  backdrop: t.backdrop,\n                  keyboard: t.keyboard,\n                  openedClass: t.openedClass\n                }),\n                  w.put(r, e);\n                var s = n.find(\"body\").eq(0),\n                  l = c();\n                if (l >= 0 && !f) {\n                  (m = o.$new(!0)).index = l;\n                  var d = angular.element('<div modal-backdrop=\"modal-backdrop\"></div>');\n                  d.attr(\"backdrop-class\", t.backdropClass),\n                    t.animation && d.attr(\"modal-animation\", \"true\"),\n                    (f = a(d)(m)),\n                    s.append(f);\n                }\n                var u = angular.element('<div modal-window=\"modal-window\"></div>');\n                u\n                  .attr({\n                    \"template-url\": t.windowTemplateUrl,\n                    \"window-class\": t.windowClass,\n                    size: t.size,\n                    index: b.length() - 1,\n                    animate: \"animate\"\n                  })\n                  .html(t.content),\n                  t.animation && u.attr(\"modal-animation\", \"true\");\n                var p = a(u)(t.scope);\n                (b.top().value.modalDomEl = p),\n                  (b.top().value.modalOpener = i),\n                  s.append(p),\n                  s.addClass(r),\n                  y.clearFocusListCache();\n              }),\n              (y.close = function(e, t) {\n                var n = b.get(e);\n                return n && p(n, t, !0)\n                  ? ((n.value.modalScope.$$uibDestructionScheduled = !0),\n                    n.value.deferred.resolve(t),\n                    d(e, n.value.modalOpener),\n                    !0)\n                  : !n;\n              }),\n              (y.dismiss = function(e, t) {\n                var n = b.get(e);\n                return n && p(n, t, !1)\n                  ? ((n.value.modalScope.$$uibDestructionScheduled = !0),\n                    n.value.deferred.reject(t),\n                    d(e, n.value.modalOpener),\n                    !0)\n                  : !n;\n              }),\n              (y.dismissAll = function(e) {\n                for (var t = this.getTop(); t && this.dismiss(t.key, e); ) t = this.getTop();\n              }),\n              (y.getTop = function() {\n                return b.top();\n              }),\n              (y.modalRendered = function(e) {\n                var t = b.get(e);\n                t && t.value.renderDeferred.resolve();\n              }),\n              (y.focusFirstFocusableElement = function() {\n                return g.length > 0 && (g[0].focus(), !0);\n              }),\n              (y.focusLastFocusableElement = function() {\n                return g.length > 0 && (g[g.length - 1].focus(), !0);\n              }),\n              (y.isFocusInFirstItem = function(e) {\n                return g.length > 0 && (e.target || e.srcElement) == g[0];\n              }),\n              (y.isFocusInLastItem = function(e) {\n                return g.length > 0 && (e.target || e.srcElement) == g[g.length - 1];\n              }),\n              (y.clearFocusListCache = function() {\n                (g = []), 0;\n              }),\n              (y.loadFocusElementList = function(e) {\n                if ((void 0 === g || !g.length0) && e) {\n                  var t = e.value.modalDomEl;\n                  t &&\n                    t.length &&\n                    (g = t[0].querySelectorAll(\n                      \"a[href], area[href], input:not([disabled]), button:not([disabled]),select:not([disabled]), textarea:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable=true]\"\n                    ));\n                }\n              }),\n              y\n            );\n          }\n        ])\n        .provider(\"$modal\", function() {\n          var e = {\n            options: { animation: !0, backdrop: !0, keyboard: !0 },\n            $get: [\n              \"$injector\",\n              \"$rootScope\",\n              \"$q\",\n              \"$templateRequest\",\n              \"$controller\",\n              \"$modalStack\",\n              function(t, n, a, o, i, r) {\n                function s(e) {\n                  return e.template\n                    ? a.when(e.template)\n                    : o(angular.isFunction(e.templateUrl) ? e.templateUrl() : e.templateUrl);\n                }\n                function l(e) {\n                  var n = [];\n                  return (\n                    angular.forEach(e, function(e) {\n                      angular.isFunction(e) || angular.isArray(e)\n                        ? n.push(a.when(t.invoke(e)))\n                        : angular.isString(e)\n                          ? n.push(a.when(t.get(e)))\n                          : n.push(a.when(e));\n                    }),\n                    n\n                  );\n                }\n                var c = {},\n                  d = null;\n                return (\n                  (c.getPromiseChain = function() {\n                    return d;\n                  }),\n                  (c.open = function(t) {\n                    var o = a.defer(),\n                      c = a.defer(),\n                      u = a.defer(),\n                      p = {\n                        result: o.promise,\n                        opened: c.promise,\n                        rendered: u.promise,\n                        close: function(e) {\n                          return r.close(p, e);\n                        },\n                        dismiss: function(e) {\n                          return r.dismiss(p, e);\n                        }\n                      };\n                    if (\n                      (((t = angular.extend({}, e.options, t)).resolve = t.resolve || {}),\n                      !t.template && !t.templateUrl)\n                    )\n                      throw new Error(\"One of template or templateUrl options is required.\");\n                    var h,\n                      f = a.all([s(t)].concat(l(t.resolve)));\n                    return (\n                      (h = d = a\n                        .all([d])\n                        .then(\n                          function() {\n                            return f;\n                          },\n                          function() {\n                            return f;\n                          }\n                        )\n                        .then(\n                          function(e) {\n                            var a = (t.scope || n).$new();\n                            (a.$close = p.close),\n                              (a.$dismiss = p.dismiss),\n                              a.$on(\"$destroy\", function() {\n                                a.$$uibDestructionScheduled ||\n                                  a.$dismiss(\"$uibUnscheduledDestruction\");\n                              });\n                            var s,\n                              l = {},\n                              d = 1;\n                            t.controller &&\n                              ((l.$scope = a),\n                              (l.$modalInstance = p),\n                              angular.forEach(t.resolve, function(t, n) {\n                                l[n] = e[d++];\n                              }),\n                              (s = i(t.controller, l)),\n                              t.controllerAs &&\n                                (t.bindToController && angular.extend(s, a),\n                                (a[t.controllerAs] = s))),\n                              r.open(p, {\n                                scope: a,\n                                deferred: o,\n                                renderDeferred: u,\n                                content: e[0],\n                                animation: t.animation,\n                                backdrop: t.backdrop,\n                                keyboard: t.keyboard,\n                                backdropClass: t.backdropClass,\n                                windowClass: t.windowClass,\n                                windowTemplateUrl: t.windowTemplateUrl,\n                                size: t.size,\n                                openedClass: t.openedClass\n                              }),\n                              c.resolve(!0);\n                          },\n                          function(e) {\n                            c.reject(e), o.reject(e);\n                          }\n                        )\n                        .finally(function() {\n                          d === h && (d = null);\n                        })),\n                      p\n                    );\n                  }),\n                  c\n                );\n              }\n            ]\n          };\n          return e;\n        }),\n      angular\n        .module(\"ui.bootstrap.pagination\", [])\n        .controller(\"PaginationController\", [\n          \"$scope\",\n          \"$attrs\",\n          \"$parse\",\n          function(e, t, n) {\n            var a = this,\n              o = { $setViewValue: angular.noop },\n              i = t.numPages ? n(t.numPages).assign : angular.noop;\n            (this.init = function(r, s) {\n              (o = r),\n                (this.config = s),\n                (o.$render = function() {\n                  a.render();\n                }),\n                t.itemsPerPage\n                  ? e.$parent.$watch(n(t.itemsPerPage), function(t) {\n                      (a.itemsPerPage = parseInt(t, 10)), (e.totalPages = a.calculateTotalPages());\n                    })\n                  : (this.itemsPerPage = s.itemsPerPage),\n                e.$watch(\"totalItems\", function() {\n                  e.totalPages = a.calculateTotalPages();\n                }),\n                e.$watch(\"totalPages\", function(t) {\n                  i(e.$parent, t), e.page > t ? e.selectPage(t) : o.$render();\n                });\n            }),\n              (this.calculateTotalPages = function() {\n                var t = this.itemsPerPage < 1 ? 1 : Math.ceil(e.totalItems / this.itemsPerPage);\n                return Math.max(t || 0, 1);\n              }),\n              (this.render = function() {\n                e.page = parseInt(o.$viewValue, 10) || 1;\n              }),\n              (e.selectPage = function(t, n) {\n                n && n.preventDefault(),\n                  (!e.ngDisabled || !n) &&\n                    e.page !== t &&\n                    t > 0 &&\n                    t <= e.totalPages &&\n                    (n && n.target && n.target.blur(), o.$setViewValue(t), o.$render());\n              }),\n              (e.getText = function(t) {\n                return e[t + \"Text\"] || a.config[t + \"Text\"];\n              }),\n              (e.noPrevious = function() {\n                return 1 === e.page;\n              }),\n              (e.noNext = function() {\n                return e.page === e.totalPages;\n              });\n          }\n        ])\n        .constant(\"paginationConfig\", {\n          itemsPerPage: 10,\n          boundaryLinks: !1,\n          directionLinks: !0,\n          firstText: \"First\",\n          previousText: \"Previous\",\n          nextText: \"Next\",\n          lastText: \"Last\",\n          rotate: !0\n        })\n        .directive(\"pagination\", [\n          \"$parse\",\n          \"paginationConfig\",\n          function(e, t) {\n            return {\n              restrict: \"EA\",\n              scope: {\n                totalItems: \"=\",\n                firstText: \"@\",\n                previousText: \"@\",\n                nextText: \"@\",\n                lastText: \"@\",\n                ngDisabled: \"=\"\n              },\n              require: [\"pagination\", \"?ngModel\"],\n              controller: \"PaginationController\",\n              controllerAs: \"pagination\",\n              templateUrl: function(e, t) {\n                return t.templateUrl || \"template/pagination/pagination.html\";\n              },\n              replace: !0,\n              link: function(n, a, o, i) {\n                function r(e, t, n) {\n                  return { number: e, text: t, active: n };\n                }\n                var s = i[0],\n                  l = i[1];\n                if (l) {\n                  var c = angular.isDefined(o.maxSize) ? n.$parent.$eval(o.maxSize) : t.maxSize,\n                    d = angular.isDefined(o.rotate) ? n.$parent.$eval(o.rotate) : t.rotate;\n                  (n.boundaryLinks = angular.isDefined(o.boundaryLinks)\n                    ? n.$parent.$eval(o.boundaryLinks)\n                    : t.boundaryLinks),\n                    (n.directionLinks = angular.isDefined(o.directionLinks)\n                      ? n.$parent.$eval(o.directionLinks)\n                      : t.directionLinks),\n                    s.init(l, t),\n                    o.maxSize &&\n                      n.$parent.$watch(e(o.maxSize), function(e) {\n                        (c = parseInt(e, 10)), s.render();\n                      });\n                  var u = s.render;\n                  s.render = function() {\n                    u(),\n                      n.page > 0 &&\n                        n.page <= n.totalPages &&\n                        (n.pages = (function(e, t) {\n                          var n = [],\n                            a = 1,\n                            o = t,\n                            i = angular.isDefined(c) && t > c;\n                          i &&\n                            (d\n                              ? (o = (a = Math.max(e - Math.floor(c / 2), 1)) + c - 1) > t &&\n                                (a = (o = t) - c + 1)\n                              : ((a = (Math.ceil(e / c) - 1) * c + 1),\n                                (o = Math.min(a + c - 1, t))));\n                          for (var s = a; o >= s; s++) {\n                            var l = r(s, s, s === e);\n                            n.push(l);\n                          }\n                          if (i && !d) {\n                            if (a > 1) {\n                              var u = r(a - 1, \"...\", !1);\n                              n.unshift(u);\n                            }\n                            if (t > o) {\n                              var p = r(o + 1, \"...\", !1);\n                              n.push(p);\n                            }\n                          }\n                          return n;\n                        })(n.page, n.totalPages));\n                  };\n                }\n              }\n            };\n          }\n        ])\n        .constant(\"pagerConfig\", {\n          itemsPerPage: 10,\n          previousText: \"« Previous\",\n          nextText: \"Next »\",\n          align: !0\n        })\n        .directive(\"pager\", [\n          \"pagerConfig\",\n          function(e) {\n            return {\n              restrict: \"EA\",\n              scope: { totalItems: \"=\", previousText: \"@\", nextText: \"@\", ngDisabled: \"=\" },\n              require: [\"pager\", \"?ngModel\"],\n              controller: \"PaginationController\",\n              controllerAs: \"pagination\",\n              templateUrl: function(e, t) {\n                return t.templateUrl || \"template/pagination/pager.html\";\n              },\n              replace: !0,\n              link: function(t, n, a, o) {\n                var i = o[0],\n                  r = o[1];\n                r &&\n                  ((t.align = angular.isDefined(a.align) ? t.$parent.$eval(a.align) : e.align),\n                  i.init(r, e));\n              }\n            };\n          }\n        ]),\n      angular\n        .module(\"ui.bootstrap.tooltip\", [\"ui.bootstrap.position\", \"ui.bootstrap.bindHtml\"])\n        .provider(\"$tooltip\", function() {\n          var e = { placement: \"top\", animation: !0, popupDelay: 0, useContentExp: !1 },\n            t = { mouseenter: \"mouseleave\", click: \"click\", focus: \"blur\", none: \"\" },\n            n = {};\n          (this.options = function(e) {\n            angular.extend(n, e);\n          }),\n            (this.setTriggers = function(e) {\n              angular.extend(t, e);\n            }),\n            (this.$get = [\n              \"$window\",\n              \"$compile\",\n              \"$timeout\",\n              \"$document\",\n              \"$position\",\n              \"$interpolate\",\n              \"$rootScope\",\n              \"$parse\",\n              function(a, o, i, r, s, l, c, d) {\n                return function(a, u, p, h) {\n                  function f(e) {\n                    var n = (e || h.trigger || p).split(\" \");\n                    return {\n                      show: n,\n                      hide: n.map(function(e) {\n                        return t[e] || e;\n                      })\n                    };\n                  }\n                  h = angular.extend({}, e, n, h);\n                  var m = (function(e) {\n                      return e.replace(/[A-Z]/g, function(e, t) {\n                        return (t ? \"-\" : \"\") + e.toLowerCase();\n                      });\n                    })(a),\n                    g = l.startSymbol(),\n                    v = l.endSymbol(),\n                    b =\n                      \"<div \" +\n                      m +\n                      '-popup title=\"' +\n                      g +\n                      \"title\" +\n                      v +\n                      '\" ' +\n                      (h.useContentExp\n                        ? 'content-exp=\"contentExp()\" '\n                        : 'content=\"' + g + \"content\" + v + '\" ') +\n                      'placement=\"' +\n                      g +\n                      \"placement\" +\n                      v +\n                      '\" popup-class=\"' +\n                      g +\n                      \"popupClass\" +\n                      v +\n                      '\" animation=\"animation\" is-open=\"isOpen\"origin-scope=\"origScope\" ></div>';\n                  return {\n                    restrict: \"EA\",\n                    compile: function(e, t) {\n                      var n = o(b);\n                      return function(e, t, o, l) {\n                        function p() {\n                          D.isOpen ? g() : m();\n                        }\n                        function m() {\n                          (!R || e.$eval(o[u + \"Enable\"])) &&\n                            ((D.popupClass = o[u + \"Class\"]),\n                            y(),\n                            (function() {\n                              var e = o[u + \"PopupDelay\"],\n                                t = parseInt(e, 10);\n                              D.popupDelay = isNaN(t) ? h.popupDelay : t;\n                            })(),\n                            D.popupDelay ? C || (C = i(v, D.popupDelay, !1)) : v());\n                        }\n                        function g() {\n                          b(), c.$$phase || c.$digest();\n                        }\n                        function v() {\n                          return (\n                            (C = null),\n                            T && (i.cancel(T), (T = null)),\n                            (h.useContentExp\n                            ? D.contentExp()\n                            : D.content)\n                              ? (k && w(),\n                                (S = D.$new()),\n                                (k = n(S, function(e) {\n                                  A ? r.find(\"body\").append(e) : t.after(e);\n                                })),\n                                h.useContentExp &&\n                                  (S.$watch(\"contentExp()\", function(e) {\n                                    !e && D.isOpen && b();\n                                  }),\n                                  S.$watch(function() {\n                                    $ ||\n                                      (($ = !0),\n                                      S.$$postDigest(function() {\n                                        ($ = !1), D.isOpen && I();\n                                      }));\n                                  })),\n                                (D.isOpen = !0),\n                                M && M.assign(D.origScope, D.isOpen),\n                                c.$$phase || D.$apply(),\n                                k.css({ display: \"block\" }),\n                                void I())\n                              : angular.noop\n                          );\n                        }\n                        function b() {\n                          (D.isOpen = !1),\n                            M && M.assign(D.origScope, D.isOpen),\n                            i.cancel(C),\n                            (C = null),\n                            i.cancel(P),\n                            (P = null),\n                            D.animation ? T || (T = i(w, 500)) : w();\n                        }\n                        function w() {\n                          (T = null),\n                            k && (k.remove(), (k = null)),\n                            S && (S.$destroy(), (S = null));\n                        }\n                        function y() {\n                          var e = o[u + \"Placement\"];\n                          D.placement = angular.isDefined(e) ? e : h.placement;\n                        }\n                        var k,\n                          S,\n                          T,\n                          C,\n                          P,\n                          A = !!angular.isDefined(h.appendToBody) && h.appendToBody,\n                          x = f(void 0),\n                          R = angular.isDefined(o[u + \"Enable\"]),\n                          D = e.$new(!0),\n                          $ = !1,\n                          M = !!angular.isDefined(o[u + \"IsOpen\"]) && d(o[u + \"IsOpen\"]),\n                          I = function() {\n                            k &&\n                              (P ||\n                                (P = i(\n                                  function() {\n                                    k.css({ top: 0, left: 0, width: \"auto\", height: \"auto\" });\n                                    var e = s.position(k),\n                                      n = s.positionElements(t, k, D.placement, A);\n                                    (n.top += \"px\"),\n                                      (n.left += \"px\"),\n                                      (n.width = e.width + \"px\"),\n                                      (n.height = e.height + \"px\"),\n                                      k.css(n),\n                                      (P = null);\n                                  },\n                                  0,\n                                  !1\n                                )));\n                          };\n                        (D.origScope = e),\n                          (D.isOpen = !1),\n                          (D.contentExp = function() {\n                            return e.$eval(o[a]);\n                          }),\n                          h.useContentExp ||\n                            o.$observe(a, function(e) {\n                              (D.content = e), !e && D.isOpen ? b() : I();\n                            }),\n                          o.$observe(\"disabled\", function(e) {\n                            C && e && (i.cancel(C), (C = null)), e && D.isOpen && b();\n                          }),\n                          o.$observe(u + \"Title\", function(e) {\n                            (D.title = e), I();\n                          }),\n                          o.$observe(u + \"Placement\", function() {\n                            D.isOpen && (y(), I());\n                          }),\n                          M &&\n                            e.$watch(M, function(e) {\n                              e !== D.isOpen && p();\n                            });\n                        var E = function() {\n                          x.show.forEach(function(e) {\n                            t.unbind(e, m);\n                          }),\n                            x.hide.forEach(function(e) {\n                              t.unbind(e, g);\n                            });\n                        };\n                        !(function() {\n                          var e = o[u + \"Trigger\"];\n                          E(),\n                            \"none\" !== (x = f(e)).show &&\n                              x.show.forEach(function(e, n) {\n                                e === x.hide[n]\n                                  ? t[0].addEventListener(e, p)\n                                  : e &&\n                                    (t[0].addEventListener(e, m),\n                                    t[0].addEventListener(x.hide[n], g));\n                              });\n                        })();\n                        var z = e.$eval(o[u + \"Animation\"]);\n                        D.animation = angular.isDefined(z) ? !!z : h.animation;\n                        var U = e.$eval(o[u + \"AppendToBody\"]);\n                        (A = angular.isDefined(U) ? U : A) &&\n                          e.$on(\"$locationChangeSuccess\", function() {\n                            D.isOpen && b();\n                          }),\n                          e.$on(\"$destroy\", function() {\n                            i.cancel(T), i.cancel(C), i.cancel(P), E(), w(), (D = null);\n                          });\n                      };\n                    }\n                  };\n                };\n              }\n            ]);\n        })\n        .directive(\"tooltipTemplateTransclude\", [\n          \"$animate\",\n          \"$sce\",\n          \"$compile\",\n          \"$templateRequest\",\n          function(e, t, n, a) {\n            return {\n              link: function(o, i, r) {\n                var s,\n                  l,\n                  c,\n                  d = o.$eval(r.tooltipTemplateTranscludeScope),\n                  u = 0,\n                  p = function() {\n                    l && (l.remove(), (l = null)),\n                      s && (s.$destroy(), (s = null)),\n                      c &&\n                        (e.leave(c).then(function() {\n                          l = null;\n                        }),\n                        (l = c),\n                        (c = null));\n                  };\n                o.$watch(t.parseAsResourceUrl(r.tooltipTemplateTransclude), function(t) {\n                  var r = ++u;\n                  t\n                    ? (a(t, !0).then(\n                        function(a) {\n                          if (r === u) {\n                            var o = d.$new(),\n                              l = n(a)(o, function(t) {\n                                p(), e.enter(t, i);\n                              });\n                            (c = l), (s = o).$emit(\"$includeContentLoaded\", t);\n                          }\n                        },\n                        function() {\n                          r === u && (p(), o.$emit(\"$includeContentError\", t));\n                        }\n                      ),\n                      o.$emit(\"$includeContentRequested\", t))\n                    : p();\n                }),\n                  o.$on(\"$destroy\", p);\n              }\n            };\n          }\n        ])\n        .directive(\"tooltipClasses\", function() {\n          return {\n            restrict: \"A\",\n            link: function(e, t, n) {\n              e.placement && t.addClass(e.placement),\n                e.popupClass && t.addClass(e.popupClass),\n                e.animation() && t.addClass(n.tooltipAnimationClass);\n            }\n          };\n        })\n        .directive(\"tooltipPopup\", function() {\n          return {\n            restrict: \"EA\",\n            replace: !0,\n            scope: { content: \"@\", placement: \"@\", popupClass: \"@\", animation: \"&\", isOpen: \"&\" },\n            templateUrl: \"template/tooltip/tooltip-popup.html\"\n          };\n        })\n        .directive(\"tooltip\", [\n          \"$tooltip\",\n          function(e) {\n            return e(\"tooltip\", \"tooltip\", \"mouseenter\");\n          }\n        ])\n        .directive(\"tooltipTemplatePopup\", function() {\n          return {\n            restrict: \"EA\",\n            replace: !0,\n            scope: {\n              contentExp: \"&\",\n              placement: \"@\",\n              popupClass: \"@\",\n              animation: \"&\",\n              isOpen: \"&\",\n              originScope: \"&\"\n            },\n            templateUrl: \"template/tooltip/tooltip-template-popup.html\"\n          };\n        })\n        .directive(\"tooltipTemplate\", [\n          \"$tooltip\",\n          function(e) {\n            return e(\"tooltipTemplate\", \"tooltip\", \"mouseenter\", { useContentExp: !0 });\n          }\n        ])\n        .directive(\"tooltipHtmlPopup\", function() {\n          return {\n            restrict: \"EA\",\n            replace: !0,\n            scope: {\n              contentExp: \"&\",\n              placement: \"@\",\n              popupClass: \"@\",\n              animation: \"&\",\n              isOpen: \"&\"\n            },\n            templateUrl: \"template/tooltip/tooltip-html-popup.html\"\n          };\n        })\n        .directive(\"tooltipHtml\", [\n          \"$tooltip\",\n          function(e) {\n            return e(\"tooltipHtml\", \"tooltip\", \"mouseenter\", { useContentExp: !0 });\n          }\n        ])\n        .directive(\"tooltipHtmlUnsafePopup\", function() {\n          return {\n            restrict: \"EA\",\n            replace: !0,\n            scope: { content: \"@\", placement: \"@\", popupClass: \"@\", animation: \"&\", isOpen: \"&\" },\n            templateUrl: \"template/tooltip/tooltip-html-unsafe-popup.html\"\n          };\n        })\n        .value(\"tooltipHtmlUnsafeSuppressDeprecated\", !1)\n        .directive(\"tooltipHtmlUnsafe\", [\n          \"$tooltip\",\n          \"tooltipHtmlUnsafeSuppressDeprecated\",\n          \"$log\",\n          function(e, t, n) {\n            return (\n              t ||\n                n.warn(\n                  \"tooltip-html-unsafe is now deprecated. Use tooltip-html or tooltip-template instead.\"\n                ),\n              e(\"tooltipHtmlUnsafe\", \"tooltip\", \"mouseenter\")\n            );\n          }\n        ]),\n      angular\n        .module(\"ui.bootstrap.popover\", [\"ui.bootstrap.tooltip\"])\n        .directive(\"popoverTemplatePopup\", function() {\n          return {\n            restrict: \"EA\",\n            replace: !0,\n            scope: {\n              title: \"@\",\n              contentExp: \"&\",\n              placement: \"@\",\n              popupClass: \"@\",\n              animation: \"&\",\n              isOpen: \"&\",\n              originScope: \"&\"\n            },\n            templateUrl: \"template/popover/popover-template.html\"\n          };\n        })\n        .directive(\"popoverTemplate\", [\n          \"$tooltip\",\n          function(e) {\n            return e(\"popoverTemplate\", \"popover\", \"click\", { useContentExp: !0 });\n          }\n        ])\n        .directive(\"popoverHtmlPopup\", function() {\n          return {\n            restrict: \"EA\",\n            replace: !0,\n            scope: {\n              contentExp: \"&\",\n              title: \"@\",\n              placement: \"@\",\n              popupClass: \"@\",\n              animation: \"&\",\n              isOpen: \"&\"\n            },\n            templateUrl: \"template/popover/popover-html.html\"\n          };\n        })\n        .directive(\"popoverHtml\", [\n          \"$tooltip\",\n          function(e) {\n            return e(\"popoverHtml\", \"popover\", \"click\", { useContentExp: !0 });\n          }\n        ])\n        .directive(\"popoverPopup\", function() {\n          return {\n            restrict: \"EA\",\n            replace: !0,\n            scope: {\n              title: \"@\",\n              content: \"@\",\n              placement: \"@\",\n              popupClass: \"@\",\n              animation: \"&\",\n              isOpen: \"&\"\n            },\n            templateUrl: \"template/popover/popover.html\"\n          };\n        })\n        .directive(\"popover\", [\n          \"$tooltip\",\n          function(e) {\n            return e(\"popover\", \"popover\", \"click\");\n          }\n        ]),\n      angular\n        .module(\"ui.bootstrap.progressbar\", [])\n        .constant(\"progressConfig\", { animate: !0, max: 100 })\n        .value(\"$progressSuppressWarning\", !1)\n        .controller(\"ProgressController\", [\n          \"$scope\",\n          \"$attrs\",\n          \"progressConfig\",\n          function(e, t, n) {\n            var a = this,\n              o = angular.isDefined(t.animate) ? e.$parent.$eval(t.animate) : n.animate;\n            (this.bars = []),\n              (e.max = angular.isDefined(e.max) ? e.max : n.max),\n              (this.addBar = function(t, n) {\n                o || n.css({ transition: \"none\" }),\n                  this.bars.push(t),\n                  (t.max = e.max),\n                  t.$watch(\"value\", function(e) {\n                    t.recalculatePercentage();\n                  }),\n                  (t.recalculatePercentage = function() {\n                    t.percent = +((100 * t.value) / t.max).toFixed(2);\n                    var e = a.bars.reduce(function(e, t) {\n                      return e + t.percent;\n                    }, 0);\n                    e > 100 && (t.percent -= e - 100);\n                  }),\n                  t.$on(\"$destroy\", function() {\n                    (n = null), a.removeBar(t);\n                  });\n              }),\n              (this.removeBar = function(e) {\n                this.bars.splice(this.bars.indexOf(e), 1);\n              }),\n              e.$watch(\"max\", function(t) {\n                a.bars.forEach(function(t) {\n                  (t.max = e.max), t.recalculatePercentage();\n                });\n              });\n          }\n        ])\n        .directive(\"uibProgress\", function() {\n          return {\n            restrict: \"EA\",\n            replace: !0,\n            transclude: !0,\n            controller: \"ProgressController\",\n            require: \"uibProgress\",\n            scope: { max: \"=?\" },\n            templateUrl: \"template/progressbar/progress.html\"\n          };\n        })\n        .directive(\"progress\", [\n          \"$log\",\n          \"$progressSuppressWarning\",\n          function(e, t) {\n            return {\n              restrict: \"EA\",\n              replace: !0,\n              transclude: !0,\n              controller: \"ProgressController\",\n              require: \"progress\",\n              scope: { max: \"=?\" },\n              templateUrl: \"template/progressbar/progress.html\",\n              link: function() {\n                t && e.warn(\"progress is now deprecated. Use uib-progress instead\");\n              }\n            };\n          }\n        ])\n        .directive(\"uibBar\", function() {\n          return {\n            restrict: \"EA\",\n            replace: !0,\n            transclude: !0,\n            require: \"^uibProgress\",\n            scope: { value: \"=\", type: \"@\" },\n            templateUrl: \"template/progressbar/bar.html\",\n            link: function(e, t, n, a) {\n              a.addBar(e, t);\n            }\n          };\n        })\n        .directive(\"bar\", [\n          \"$log\",\n          \"$progressSuppressWarning\",\n          function(e, t) {\n            return {\n              restrict: \"EA\",\n              replace: !0,\n              transclude: !0,\n              require: \"^progress\",\n              scope: { value: \"=\", type: \"@\" },\n              templateUrl: \"template/progressbar/bar.html\",\n              link: function(n, a, o, i) {\n                t && e.warn(\"bar is now deprecated. Use uib-bar instead\"), i.addBar(n, a);\n              }\n            };\n          }\n        ])\n        .directive(\"progressbar\", function() {\n          return {\n            restrict: \"EA\",\n            replace: !0,\n            transclude: !0,\n            controller: \"ProgressController\",\n            scope: { value: \"=\", max: \"=?\", type: \"@\" },\n            templateUrl: \"template/progressbar/progressbar.html\",\n            link: function(e, t, n, a) {\n              a.addBar(e, angular.element(t.children()[0]));\n            }\n          };\n        }),\n      angular\n        .module(\"ui.bootstrap.rating\", [])\n        .constant(\"ratingConfig\", {\n          max: 5,\n          stateOn: null,\n          stateOff: null,\n          titles: [\"one\", \"two\", \"three\", \"four\", \"five\"]\n        })\n        .controller(\"RatingController\", [\n          \"$scope\",\n          \"$attrs\",\n          \"ratingConfig\",\n          function(e, t, n) {\n            var a = { $setViewValue: angular.noop };\n            (this.init = function(o) {\n              ((a = o).$render = this.render),\n                a.$formatters.push(function(e) {\n                  return angular.isNumber(e) && e << 0 !== e && (e = Math.round(e)), e;\n                }),\n                (this.stateOn = angular.isDefined(t.stateOn)\n                  ? e.$parent.$eval(t.stateOn)\n                  : n.stateOn),\n                (this.stateOff = angular.isDefined(t.stateOff)\n                  ? e.$parent.$eval(t.stateOff)\n                  : n.stateOff);\n              var i = angular.isDefined(t.titles) ? e.$parent.$eval(t.titles) : n.titles;\n              this.titles = angular.isArray(i) && i.length > 0 ? i : n.titles;\n              var r = angular.isDefined(t.ratingStates)\n                ? e.$parent.$eval(t.ratingStates)\n                : new Array(angular.isDefined(t.max) ? e.$parent.$eval(t.max) : n.max);\n              e.range = this.buildTemplateObjects(r);\n            }),\n              (this.buildTemplateObjects = function(e) {\n                for (var t = 0, n = e.length; n > t; t++)\n                  e[t] = angular.extend(\n                    { index: t },\n                    { stateOn: this.stateOn, stateOff: this.stateOff, title: this.getTitle(t) },\n                    e[t]\n                  );\n                return e;\n              }),\n              (this.getTitle = function(e) {\n                return e >= this.titles.length ? e + 1 : this.titles[e];\n              }),\n              (e.rate = function(t) {\n                !e.readonly &&\n                  t >= 0 &&\n                  t <= e.range.length &&\n                  (a.$setViewValue(a.$viewValue === t ? 0 : t), a.$render());\n              }),\n              (e.enter = function(t) {\n                e.readonly || (e.value = t), e.onHover({ value: t });\n              }),\n              (e.reset = function() {\n                (e.value = a.$viewValue), e.onLeave();\n              }),\n              (e.onKeydown = function(t) {\n                /(37|38|39|40)/.test(t.which) &&\n                  (t.preventDefault(),\n                  t.stopPropagation(),\n                  e.rate(e.value + (38 === t.which || 39 === t.which ? 1 : -1)));\n              }),\n              (this.render = function() {\n                e.value = a.$viewValue;\n              });\n          }\n        ])\n        .directive(\"rating\", function() {\n          return {\n            restrict: \"EA\",\n            require: [\"rating\", \"ngModel\"],\n            scope: { readonly: \"=?\", onHover: \"&\", onLeave: \"&\" },\n            controller: \"RatingController\",\n            templateUrl: \"template/rating/rating.html\",\n            replace: !0,\n            link: function(e, t, n, a) {\n              var o = a[0],\n                i = a[1];\n              o.init(i);\n            }\n          };\n        }),\n      angular\n        .module(\"ui.bootstrap.tabs\", [])\n        .controller(\"TabsetController\", [\n          \"$scope\",\n          function(e) {\n            var t,\n              n = this,\n              a = (n.tabs = e.tabs = []);\n            (n.select = function(e) {\n              angular.forEach(a, function(t) {\n                t.active && t !== e && ((t.active = !1), t.onDeselect(), (e.selectCalled = !1));\n              }),\n                (e.active = !0),\n                e.selectCalled || (e.onSelect(), (e.selectCalled = !0));\n            }),\n              (n.addTab = function(e) {\n                a.push(e),\n                  1 === a.length && !1 !== e.active\n                    ? (e.active = !0)\n                    : e.active\n                      ? n.select(e)\n                      : (e.active = !1);\n              }),\n              (n.removeTab = function(e) {\n                var o = a.indexOf(e);\n                if (e.active && a.length > 1 && !t) {\n                  var i = o == a.length - 1 ? o - 1 : o + 1;\n                  n.select(a[i]);\n                }\n                a.splice(o, 1);\n              }),\n              e.$on(\"$destroy\", function() {\n                t = !0;\n              });\n          }\n        ])\n        .directive(\"tabset\", function() {\n          return {\n            restrict: \"EA\",\n            transclude: !0,\n            replace: !0,\n            scope: { type: \"@\" },\n            controller: \"TabsetController\",\n            templateUrl: \"template/tabs/tabset.html\",\n            link: function(e, t, n) {\n              (e.vertical = !!angular.isDefined(n.vertical) && e.$parent.$eval(n.vertical)),\n                (e.justified = !!angular.isDefined(n.justified) && e.$parent.$eval(n.justified));\n            }\n          };\n        })\n        .directive(\"tab\", [\n          \"$parse\",\n          \"$log\",\n          function(e, t) {\n            return {\n              require: \"^tabset\",\n              restrict: \"EA\",\n              replace: !0,\n              templateUrl: \"template/tabs/tab.html\",\n              transclude: !0,\n              scope: { active: \"=?\", heading: \"@\", onSelect: \"&select\", onDeselect: \"&deselect\" },\n              controller: function() {},\n              link: function(n, a, o, i, r) {\n                n.$watch(\"active\", function(e) {\n                  e && i.select(n);\n                }),\n                  (n.disabled = !1),\n                  o.disable &&\n                    n.$parent.$watch(e(o.disable), function(e) {\n                      n.disabled = !!e;\n                    }),\n                  o.disabled &&\n                    (t.warn(\n                      'Use of \"disabled\" attribute has been deprecated, please use \"disable\"'\n                    ),\n                    n.$parent.$watch(e(o.disabled), function(e) {\n                      n.disabled = !!e;\n                    })),\n                  (n.select = function() {\n                    n.disabled || (n.active = !0);\n                  }),\n                  i.addTab(n),\n                  n.$on(\"$destroy\", function() {\n                    i.removeTab(n);\n                  }),\n                  (n.$transcludeFn = r);\n              }\n            };\n          }\n        ])\n        .directive(\"tabHeadingTransclude\", function() {\n          return {\n            restrict: \"A\",\n            require: \"^tab\",\n            link: function(e, t, n, a) {\n              e.$watch(\"headingElement\", function(e) {\n                e && (t.html(\"\"), t.append(e));\n              });\n            }\n          };\n        })\n        .directive(\"tabContentTransclude\", function() {\n          return {\n            restrict: \"A\",\n            require: \"^tabset\",\n            link: function(e, t, n) {\n              var a = e.$eval(n.tabContentTransclude);\n              a.$transcludeFn(a.$parent, function(e) {\n                angular.forEach(e, function(e) {\n                  !(function(e) {\n                    return (\n                      e.tagName &&\n                      (e.hasAttribute(\"tab-heading\") ||\n                        e.hasAttribute(\"data-tab-heading\") ||\n                        e.hasAttribute(\"x-tab-heading\") ||\n                        \"tab-heading\" === e.tagName.toLowerCase() ||\n                        \"data-tab-heading\" === e.tagName.toLowerCase() ||\n                        \"x-tab-heading\" === e.tagName.toLowerCase())\n                    );\n                  })(e)\n                    ? t.append(e)\n                    : (a.headingElement = e);\n                });\n              });\n            }\n          };\n        }),\n      angular\n        .module(\"ui.bootstrap.timepicker\", [])\n        .constant(\"timepickerConfig\", {\n          hourStep: 1,\n          minuteStep: 1,\n          showMeridian: !0,\n          meridians: null,\n          readonlyInput: !1,\n          mousewheel: !0,\n          arrowkeys: !0,\n          showSpinners: !0\n        })\n        .controller(\"TimepickerController\", [\n          \"$scope\",\n          \"$attrs\",\n          \"$parse\",\n          \"$log\",\n          \"$locale\",\n          \"timepickerConfig\",\n          function(e, t, n, a, o, i) {\n            function r() {\n              var t = parseInt(e.hours, 10);\n              return (e.showMeridian\n              ? t > 0 && 13 > t\n              : t >= 0 && 24 > t)\n                ? (e.showMeridian && (12 === t && (t = 0), e.meridian === g[1] && (t += 12)), t)\n                : void 0;\n            }\n            function s() {\n              var t = parseInt(e.minutes, 10);\n              return t >= 0 && 60 > t ? t : void 0;\n            }\n            function l(e) {\n              return angular.isDefined(e) && e.toString().length < 2 ? \"0\" + e : e.toString();\n            }\n            function c(e) {\n              d(), m.$setViewValue(new Date(f)), u(e);\n            }\n            function d() {\n              m.$setValidity(\"time\", !0), (e.invalidHours = !1), (e.invalidMinutes = !1);\n            }\n            function u(t) {\n              var n = f.getHours(),\n                a = f.getMinutes();\n              e.showMeridian && (n = 0 === n || 12 === n ? 12 : n % 12),\n                (e.hours = \"h\" === t ? n : l(n)),\n                \"m\" !== t && (e.minutes = l(a)),\n                (e.meridian = f.getHours() < 12 ? g[0] : g[1]);\n            }\n            function p(e, t) {\n              var n = new Date(e.getTime() + 6e4 * t),\n                a = new Date(e);\n              return a.setHours(n.getHours(), n.getMinutes()), a;\n            }\n            function h(e) {\n              (f = p(f, e)), c();\n            }\n            var f = new Date(),\n              m = { $setViewValue: angular.noop },\n              g = angular.isDefined(t.meridians)\n                ? e.$parent.$eval(t.meridians)\n                : i.meridians || o.DATETIME_FORMATS.AMPMS;\n            this.init = function(n, a) {\n              ((m = n).$render = this.render),\n                m.$formatters.unshift(function(e) {\n                  return e ? new Date(e) : null;\n                });\n              var o = a.eq(0),\n                r = a.eq(1);\n              (angular.isDefined(t.mousewheel) ? e.$parent.$eval(t.mousewheel) : i.mousewheel) &&\n                this.setupMousewheelEvents(o, r),\n                (angular.isDefined(t.arrowkeys) ? e.$parent.$eval(t.arrowkeys) : i.arrowkeys) &&\n                  this.setupArrowkeyEvents(o, r),\n                (e.readonlyInput = angular.isDefined(t.readonlyInput)\n                  ? e.$parent.$eval(t.readonlyInput)\n                  : i.readonlyInput),\n                this.setupInputEvents(o, r);\n            };\n            var v = i.hourStep;\n            t.hourStep &&\n              e.$parent.$watch(n(t.hourStep), function(e) {\n                v = parseInt(e, 10);\n              });\n            var b,\n              w,\n              y = i.minuteStep;\n            t.minuteStep &&\n              e.$parent.$watch(n(t.minuteStep), function(e) {\n                y = parseInt(e, 10);\n              }),\n              e.$parent.$watch(n(t.min), function(e) {\n                var t = new Date(e);\n                b = isNaN(t) ? void 0 : t;\n              }),\n              e.$parent.$watch(n(t.max), function(e) {\n                var t = new Date(e);\n                w = isNaN(t) ? void 0 : t;\n              }),\n              (e.noIncrementHours = function() {\n                var e = p(f, 60 * v);\n                return e > w || (f > e && b > e);\n              }),\n              (e.noDecrementHours = function() {\n                var e = p(f, 60 * -v);\n                return b > e || (e > f && e > w);\n              }),\n              (e.noIncrementMinutes = function() {\n                var e = p(f, y);\n                return e > w || (f > e && b > e);\n              }),\n              (e.noDecrementMinutes = function() {\n                var e = p(f, -y);\n                return b > e || (e > f && e > w);\n              }),\n              (e.noToggleMeridian = function() {\n                return f.getHours() < 13 ? p(f, 720) > w : p(f, -720) < b;\n              }),\n              (e.showMeridian = i.showMeridian),\n              t.showMeridian &&\n                e.$parent.$watch(n(t.showMeridian), function(t) {\n                  if (((e.showMeridian = !!t), m.$error.time)) {\n                    var n = r(),\n                      a = s();\n                    angular.isDefined(n) && angular.isDefined(a) && (f.setHours(n), c());\n                  } else u();\n                }),\n              (this.setupMousewheelEvents = function(t, n) {\n                var a = function(e) {\n                  e.originalEvent && (e = e.originalEvent);\n                  var t = e.wheelDelta ? e.wheelDelta : -e.deltaY;\n                  return e.detail || t > 0;\n                };\n                t.bind(\"mousewheel wheel\", function(t) {\n                  e.$apply(a(t) ? e.incrementHours() : e.decrementHours()), t.preventDefault();\n                }),\n                  n.bind(\"mousewheel wheel\", function(t) {\n                    e.$apply(a(t) ? e.incrementMinutes() : e.decrementMinutes()),\n                      t.preventDefault();\n                  });\n              }),\n              (this.setupArrowkeyEvents = function(t, n) {\n                t.bind(\"keydown\", function(t) {\n                  38 === t.which\n                    ? (t.preventDefault(), e.incrementHours(), e.$apply())\n                    : 40 === t.which && (t.preventDefault(), e.decrementHours(), e.$apply());\n                }),\n                  n.bind(\"keydown\", function(t) {\n                    38 === t.which\n                      ? (t.preventDefault(), e.incrementMinutes(), e.$apply())\n                      : 40 === t.which && (t.preventDefault(), e.decrementMinutes(), e.$apply());\n                  });\n              }),\n              (this.setupInputEvents = function(t, n) {\n                if (e.readonlyInput)\n                  return (e.updateHours = angular.noop), void (e.updateMinutes = angular.noop);\n                var a = function(t, n) {\n                  m.$setViewValue(null),\n                    m.$setValidity(\"time\", !1),\n                    angular.isDefined(t) && (e.invalidHours = t),\n                    angular.isDefined(n) && (e.invalidMinutes = n);\n                };\n                (e.updateHours = function() {\n                  var e = r(),\n                    t = s();\n                  angular.isDefined(e) && angular.isDefined(t)\n                    ? (f.setHours(e), b > f || f > w ? a(!0) : c(\"h\"))\n                    : a(!0);\n                }),\n                  t.bind(\"blur\", function(t) {\n                    !e.invalidHours &&\n                      e.hours < 10 &&\n                      e.$apply(function() {\n                        e.hours = l(e.hours);\n                      });\n                  }),\n                  (e.updateMinutes = function() {\n                    var e = s(),\n                      t = r();\n                    angular.isDefined(e) && angular.isDefined(t)\n                      ? (f.setMinutes(e), b > f || f > w ? a(void 0, !0) : c(\"m\"))\n                      : a(void 0, !0);\n                  }),\n                  n.bind(\"blur\", function(t) {\n                    !e.invalidMinutes &&\n                      e.minutes < 10 &&\n                      e.$apply(function() {\n                        e.minutes = l(e.minutes);\n                      });\n                  });\n              }),\n              (this.render = function() {\n                var t = m.$viewValue;\n                isNaN(t)\n                  ? (m.$setValidity(\"time\", !1),\n                    a.error(\n                      'Timepicker directive: \"ng-model\" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.'\n                    ))\n                  : (t && (f = t),\n                    b > f || f > w\n                      ? (m.$setValidity(\"time\", !1), (e.invalidHours = !0), (e.invalidMinutes = !0))\n                      : d(),\n                    u());\n              }),\n              (e.showSpinners = angular.isDefined(t.showSpinners)\n                ? e.$parent.$eval(t.showSpinners)\n                : i.showSpinners),\n              (e.incrementHours = function() {\n                e.noIncrementHours() || h(60 * v);\n              }),\n              (e.decrementHours = function() {\n                e.noDecrementHours() || h(60 * -v);\n              }),\n              (e.incrementMinutes = function() {\n                e.noIncrementMinutes() || h(y);\n              }),\n              (e.decrementMinutes = function() {\n                e.noDecrementMinutes() || h(-y);\n              }),\n              (e.toggleMeridian = function() {\n                e.noToggleMeridian() || h(720 * (f.getHours() < 12 ? 1 : -1));\n              });\n          }\n        ])\n        .directive(\"timepicker\", function() {\n          return {\n            restrict: \"EA\",\n            require: [\"timepicker\", \"?^ngModel\"],\n            controller: \"TimepickerController\",\n            controllerAs: \"timepicker\",\n            replace: !0,\n            scope: {},\n            templateUrl: function(e, t) {\n              return t.templateUrl || \"template/timepicker/timepicker.html\";\n            },\n            link: function(e, t, n, a) {\n              var o = a[0],\n                i = a[1];\n              i && o.init(i, t.find(\"input\"));\n            }\n          };\n        }),\n      angular\n        .module(\"ui.bootstrap.transition\", [])\n        .value(\"$transitionSuppressDeprecated\", !1)\n        .factory(\"$transition\", [\n          \"$q\",\n          \"$timeout\",\n          \"$rootScope\",\n          \"$log\",\n          \"$transitionSuppressDeprecated\",\n          function(e, t, n, a, o) {\n            function i(e) {\n              for (var t in e) if (void 0 !== s.style[t]) return e[t];\n            }\n            o || a.warn(\"$transition is now deprecated. Use $animate from ngAnimate instead.\");\n            var r = function(a, o, i) {\n                i = i || {};\n                var s = e.defer(),\n                  l = r[i.animation ? \"animationEndEventName\" : \"transitionEndEventName\"],\n                  c = function(e) {\n                    n.$apply(function() {\n                      a.unbind(l, c), s.resolve(a);\n                    });\n                  };\n                return (\n                  l && a.bind(l, c),\n                  t(function() {\n                    angular.isString(o)\n                      ? a.addClass(o)\n                      : angular.isFunction(o)\n                        ? o(a)\n                        : angular.isObject(o) && a.css(o),\n                      l || s.resolve(a);\n                  }),\n                  (s.promise.cancel = function() {\n                    l && a.unbind(l, c), s.reject(\"Transition cancelled\");\n                  }),\n                  s.promise\n                );\n              },\n              s = document.createElement(\"trans\");\n            return (\n              (r.transitionEndEventName = i({\n                WebkitTransition: \"webkitTransitionEnd\",\n                MozTransition: \"transitionend\",\n                OTransition: \"oTransitionEnd\",\n                transition: \"transitionend\"\n              })),\n              (r.animationEndEventName = i({\n                WebkitTransition: \"webkitAnimationEnd\",\n                MozTransition: \"animationend\",\n                OTransition: \"oAnimationEnd\",\n                transition: \"animationend\"\n              })),\n              r\n            );\n          }\n        ]),\n      angular\n        .module(\"ui.bootstrap.typeahead\", [\"ui.bootstrap.position\"])\n        .factory(\"typeaheadParser\", [\n          \"$parse\",\n          function(e) {\n            var t = /^\\s*([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?\\s+for\\s+(?:([\\$\\w][\\$\\w\\d]*))\\s+in\\s+([\\s\\S]+?)$/;\n            return {\n              parse: function(n) {\n                var a = n.match(t);\n                if (!a)\n                  throw new Error(\n                    'Expected typeahead specification in form of \"_modelValue_ (as _label_)? for _item_ in _collection_\" but got \"' +\n                      n +\n                      '\".'\n                  );\n                return {\n                  itemName: a[3],\n                  source: e(a[4]),\n                  viewMapper: e(a[2] || a[1]),\n                  modelMapper: e(a[1])\n                };\n              }\n            };\n          }\n        ])\n        .directive(\"typeahead\", [\n          \"$compile\",\n          \"$parse\",\n          \"$q\",\n          \"$timeout\",\n          \"$document\",\n          \"$window\",\n          \"$rootScope\",\n          \"$position\",\n          \"typeaheadParser\",\n          function(e, t, n, a, o, i, r, s, l) {\n            var c = [9, 13, 27, 38, 40],\n              d = 200;\n            return {\n              require: [\"ngModel\", \"^?ngModelOptions\"],\n              link: function(u, p, h, f) {\n                function m() {\n                  U.moveInProgress || ((U.moveInProgress = !0), U.$digest()),\n                    N && a.cancel(N),\n                    (N = a(function() {\n                      U.matches.length && g(), (U.moveInProgress = !1), U.$digest();\n                    }, d));\n                }\n                function g() {\n                  (U.position = D ? s.offset(p) : s.position(p)),\n                    (U.position.top += p.prop(\"offsetHeight\"));\n                }\n                var v = f[0],\n                  b = f[1],\n                  w = u.$eval(h.typeaheadMinLength);\n                w || 0 === w || (w = 1);\n                var y,\n                  k,\n                  S = u.$eval(h.typeaheadWaitMs) || 0,\n                  T = !1 !== u.$eval(h.typeaheadEditable),\n                  C = t(h.typeaheadLoading).assign || angular.noop,\n                  P = t(h.typeaheadOnSelect),\n                  A =\n                    !!angular.isDefined(h.typeaheadSelectOnBlur) &&\n                    u.$eval(h.typeaheadSelectOnBlur),\n                  x = t(h.typeaheadNoResults).assign || angular.noop,\n                  R = h.typeaheadInputFormatter ? t(h.typeaheadInputFormatter) : void 0,\n                  D = !!h.typeaheadAppendToBody && u.$eval(h.typeaheadAppendToBody),\n                  $ = !1 !== u.$eval(h.typeaheadFocusFirst),\n                  M = !!h.typeaheadSelectOnExact && u.$eval(h.typeaheadSelectOnExact),\n                  I = t(h.ngModel),\n                  E = t(h.ngModel + \"($$$p)\"),\n                  z = l.parse(h.typeahead),\n                  U = u.$new(),\n                  L = u.$on(\"$destroy\", function() {\n                    U.$destroy();\n                  });\n                U.$on(\"$destroy\", L);\n                var F = \"typeahead-\" + U.$id + \"-\" + Math.floor(1e4 * Math.random());\n                p.attr({ \"aria-autocomplete\": \"list\", \"aria-expanded\": !1, \"aria-owns\": F });\n                var O = angular.element(\"<div typeahead-popup></div>\");\n                O.attr({\n                  id: F,\n                  matches: \"matches\",\n                  active: \"activeIdx\",\n                  select: \"select(activeIdx)\",\n                  \"move-in-progress\": \"moveInProgress\",\n                  query: \"query\",\n                  position: \"position\"\n                }),\n                  angular.isDefined(h.typeaheadTemplateUrl) &&\n                    O.attr(\"template-url\", h.typeaheadTemplateUrl),\n                  angular.isDefined(h.typeaheadPopupTemplateUrl) &&\n                    O.attr(\"popup-template-url\", h.typeaheadPopupTemplateUrl);\n                var B = function() {\n                    (U.matches = []), (U.activeIdx = -1), p.attr(\"aria-expanded\", !1);\n                  },\n                  j = function(e) {\n                    return F + \"-option-\" + e;\n                  };\n                U.$watch(\"activeIdx\", function(e) {\n                  0 > e\n                    ? p.removeAttr(\"aria-activedescendant\")\n                    : p.attr(\"aria-activedescendant\", j(e));\n                });\n                var N,\n                  H = function(e) {\n                    var t = { $viewValue: e };\n                    C(u, !0),\n                      x(u, !1),\n                      n.when(z.source(u, t)).then(\n                        function(n) {\n                          var a = e === v.$viewValue;\n                          if (a && y)\n                            if (n && n.length > 0) {\n                              (U.activeIdx = $ ? 0 : -1), x(u, !1), (U.matches.length = 0);\n                              for (var o = 0; o < n.length; o++)\n                                (t[z.itemName] = n[o]),\n                                  U.matches.push({\n                                    id: j(o),\n                                    label: z.viewMapper(U, t),\n                                    model: n[o]\n                                  });\n                              (U.query = e),\n                                g(),\n                                p.attr(\"aria-expanded\", !0),\n                                M &&\n                                  1 === U.matches.length &&\n                                  (function(e, t) {\n                                    return (\n                                      !!(U.matches.length > t && e) &&\n                                      e.toUpperCase() === U.matches[t].label.toUpperCase()\n                                    );\n                                  })(e, 0) &&\n                                  U.select(0);\n                            } else B(), x(u, !0);\n                          a && C(u, !1);\n                        },\n                        function() {\n                          B(), C(u, !1), x(u, !0);\n                        }\n                      );\n                  };\n                D && (angular.element(i).bind(\"resize\", m), o.find(\"body\").bind(\"scroll\", m)),\n                  (U.moveInProgress = !1),\n                  B(),\n                  (U.query = void 0);\n                var W,\n                  V = function() {\n                    W && a.cancel(W);\n                  };\n                v.$parsers.unshift(function(e) {\n                  return (\n                    (y = !0),\n                    0 === w || (e && e.length >= w)\n                      ? S > 0\n                        ? (V(),\n                          (function(e) {\n                            W = a(function() {\n                              H(e);\n                            }, S);\n                          })(e))\n                        : H(e)\n                      : (C(u, !1), V(), B()),\n                    T\n                      ? e\n                      : e\n                        ? void v.$setValidity(\"editable\", !1)\n                        : (v.$setValidity(\"editable\", !0), null)\n                  );\n                }),\n                  v.$formatters.push(function(e) {\n                    var t,\n                      n = {};\n                    return (\n                      T || v.$setValidity(\"editable\", !0),\n                      R\n                        ? ((n.$model = e), R(u, n))\n                        : ((n[z.itemName] = e),\n                          (t = z.viewMapper(u, n)),\n                          (n[z.itemName] = void 0),\n                          t !== z.viewMapper(u, n) ? t : e)\n                    );\n                  }),\n                  (U.select = function(e) {\n                    var t,\n                      n,\n                      o = {};\n                    (k = !0),\n                      (o[z.itemName] = n = U.matches[e].model),\n                      (t = z.modelMapper(u, o)),\n                      (function(e, t) {\n                        angular.isFunction(I(u)) && b && b.$options && b.$options.getterSetter\n                          ? E(e, { $$$p: t })\n                          : I.assign(e, t);\n                      })(u, t),\n                      v.$setValidity(\"editable\", !0),\n                      v.$setValidity(\"parse\", !0),\n                      P(u, { $item: n, $model: t, $label: z.viewMapper(u, o) }),\n                      B(),\n                      !1 !== U.$eval(h.typeaheadFocusOnSelect) &&\n                        a(\n                          function() {\n                            p[0].focus();\n                          },\n                          0,\n                          !1\n                        );\n                  }),\n                  p.bind(\"keydown\", function(e) {\n                    if (0 !== U.matches.length && -1 !== c.indexOf(e.which)) {\n                      if (-1 === U.activeIdx && (9 === e.which || 13 === e.which))\n                        return B(), void U.$digest();\n                      e.preventDefault(),\n                        40 === e.which\n                          ? ((U.activeIdx = (U.activeIdx + 1) % U.matches.length), U.$digest())\n                          : 38 === e.which\n                            ? ((U.activeIdx =\n                                (U.activeIdx > 0 ? U.activeIdx : U.matches.length) - 1),\n                              U.$digest())\n                            : 13 === e.which || 9 === e.which\n                              ? U.$apply(function() {\n                                  U.select(U.activeIdx);\n                                })\n                              : 27 === e.which && (e.stopPropagation(), B(), U.$digest());\n                    }\n                  }),\n                  p.bind(\"blur\", function() {\n                    A &&\n                      U.matches.length &&\n                      -1 !== U.activeIdx &&\n                      !k &&\n                      ((k = !0),\n                      U.$apply(function() {\n                        U.select(U.activeIdx);\n                      })),\n                      (y = !1),\n                      (k = !1);\n                  });\n                var Y = function(e) {\n                  p[0] !== e.target &&\n                    3 !== e.which &&\n                    0 !== U.matches.length &&\n                    (B(), r.$$phase || U.$digest());\n                };\n                o.bind(\"click\", Y),\n                  u.$on(\"$destroy\", function() {\n                    o.unbind(\"click\", Y), D && q.remove(), O.remove();\n                  });\n                var q = e(O)(U);\n                D ? o.find(\"body\").append(q) : p.after(q);\n              }\n            };\n          }\n        ])\n        .directive(\"typeaheadPopup\", function() {\n          return {\n            restrict: \"EA\",\n            scope: {\n              matches: \"=\",\n              query: \"=\",\n              active: \"=\",\n              position: \"&\",\n              moveInProgress: \"=\",\n              select: \"&\"\n            },\n            replace: !0,\n            templateUrl: function(e, t) {\n              return t.popupTemplateUrl || \"template/typeahead/typeahead-popup.html\";\n            },\n            link: function(e, t, n) {\n              (e.templateUrl = n.templateUrl),\n                (e.isOpen = function() {\n                  return e.matches.length > 0;\n                }),\n                (e.isActive = function(t) {\n                  return e.active == t;\n                }),\n                (e.selectActive = function(t) {\n                  e.active = t;\n                }),\n                (e.selectMatch = function(t) {\n                  e.select({ activeIdx: t });\n                });\n            }\n          };\n        })\n        .directive(\"typeaheadMatch\", [\n          \"$templateRequest\",\n          \"$compile\",\n          \"$parse\",\n          function(e, t, n) {\n            return {\n              restrict: \"EA\",\n              scope: { index: \"=\", match: \"=\", query: \"=\" },\n              link: function(a, o, i) {\n                var r = n(i.templateUrl)(a.$parent) || \"template/typeahead/typeahead-match.html\";\n                e(r).then(function(e) {\n                  t(e.trim())(a, function(e) {\n                    o.replaceWith(e);\n                  });\n                });\n              }\n            };\n          }\n        ])\n        .filter(\"typeaheadHighlight\", [\n          \"$sce\",\n          \"$injector\",\n          \"$log\",\n          function(e, t, n) {\n            var a;\n            return (\n              (a = t.has(\"$sanitize\")),\n              function(t, o) {\n                return (\n                  !a &&\n                    (function(e) {\n                      return /<.*>/g.test(e);\n                    })(t) &&\n                    n.warn(\"Unsafe use of typeahead please use ngSanitize\"),\n                  (t = o\n                    ? (\"\" + t).replace(\n                        new RegExp(\n                          (function(e) {\n                            return e.replace(/([.?*+^$[\\]\\\\(){}|-])/g, \"\\\\$1\");\n                          })(o),\n                          \"gi\"\n                        ),\n                        \"<strong>$&</strong>\"\n                      )\n                    : t),\n                  a || (t = e.trustAsHtml(t)),\n                  t\n                );\n              }\n            );\n          }\n        ]),\n      angular.module(\"template/accordion/accordion-group.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/accordion/accordion-group.html\",\n            '<div class=\"panel {{panelClass || \\'panel-default\\'}}\">\\n  <div class=\"panel-heading\" ng-keypress=\"toggleOpen($event)\">\\n    <h4 class=\"panel-title\">\\n      <a href tabindex=\"0\" class=\"accordion-toggle\" ng-click=\"toggleOpen()\" accordion-transclude=\"heading\"><span ng-class=\"{\\'text-muted\\': isDisabled}\">{{heading}}</span></a>\\n    </h4>\\n  </div>\\n  <div class=\"panel-collapse collapse\" collapse=\"!isOpen\">\\n\\t  <div class=\"panel-body\" ng-transclude></div>\\n  </div>\\n</div>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/accordion/accordion.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/accordion/accordion.html\",\n            '<div class=\"panel-group\" ng-transclude></div>'\n          );\n        }\n      ]),\n      angular.module(\"template/alert/alert.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/alert/alert.html\",\n            '<div class=\"alert\" ng-class=\"[\\'alert-\\' + (type || \\'warning\\'), closeable ? \\'alert-dismissible\\' : null]\" role=\"alert\">\\n    <button ng-show=\"closeable\" type=\"button\" class=\"close\" ng-click=\"close($event)\">\\n        <span aria-hidden=\"true\">&times;</span>\\n        <span class=\"sr-only\">Close</span>\\n    </button>\\n    <div ng-transclude></div>\\n</div>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/carousel/carousel.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/carousel/carousel.html\",\n            '<div ng-mouseenter=\"pause()\" ng-mouseleave=\"play()\" class=\"carousel\" ng-swipe-right=\"prev()\" ng-swipe-left=\"next()\">\\n    <ol class=\"carousel-indicators\" ng-show=\"slides.length > 1\">\\n        <li ng-repeat=\"slide in slides | orderBy:indexOfSlide track by $index\" ng-class=\"{active: isActive(slide)}\" ng-click=\"select(slide)\"></li>\\n    </ol>\\n    <div class=\"carousel-inner\" ng-transclude></div>\\n    <a class=\"left carousel-control\" ng-click=\"prev()\" ng-show=\"slides.length > 1\"><span class=\"glyphicon glyphicon-chevron-left\"></span></a>\\n    <a class=\"right carousel-control\" ng-click=\"next()\" ng-show=\"slides.length > 1\"><span class=\"glyphicon glyphicon-chevron-right\"></span></a>\\n</div>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/carousel/slide.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/carousel/slide.html\",\n            '<div ng-class=\"{\\n    \\'active\\': active\\n  }\" class=\"item text-center\" ng-transclude></div>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/datepicker/datepicker.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/datepicker/datepicker.html\",\n            '<div ng-switch=\"datepickerMode\" role=\"application\" ng-keydown=\"keydown($event)\">\\n  <daypicker ng-switch-when=\"day\" tabindex=\"0\"></daypicker>\\n  <monthpicker ng-switch-when=\"month\" tabindex=\"0\"></monthpicker>\\n  <yearpicker ng-switch-when=\"year\" tabindex=\"0\"></yearpicker>\\n</div>'\n          );\n        }\n      ]),\n      angular.module(\"template/datepicker/day.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/datepicker/day.html\",\n            '<table role=\"grid\" aria-labelledby=\"{{::uniqueId}}-title\" aria-activedescendant=\"{{activeDateId}}\">\\n  <thead>\\n    <tr>\\n      <th><button type=\"button\" class=\"btn btn-default btn-sm pull-left\" ng-click=\"move(-1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-left\"></i></button></th>\\n      <th colspan=\"{{::5 + showWeeks}}\"><button id=\"{{::uniqueId}}-title\" role=\"heading\" aria-live=\"assertive\" aria-atomic=\"true\" type=\"button\" class=\"btn btn-default btn-sm\" ng-click=\"toggleMode()\" ng-disabled=\"datepickerMode === maxMode\" tabindex=\"-1\" style=\"width:100%;\"><strong>{{title}}</strong></button></th>\\n      <th><button type=\"button\" class=\"btn btn-default btn-sm pull-right\" ng-click=\"move(1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-right\"></i></button></th>\\n    </tr>\\n    <tr>\\n      <th ng-if=\"showWeeks\" class=\"text-center\"></th>\\n      <th ng-repeat=\"label in ::labels track by $index\" class=\"text-center\"><small aria-label=\"{{::label.full}}\">{{::label.abbr}}</small></th>\\n    </tr>\\n  </thead>\\n  <tbody>\\n    <tr ng-repeat=\"row in rows track by $index\">\\n      <td ng-if=\"showWeeks\" class=\"text-center h6\"><em>{{ weekNumbers[$index] }}</em></td>\\n      <td ng-repeat=\"dt in row track by dt.date\" class=\"text-center\" role=\"gridcell\" id=\"{{::dt.uid}}\" ng-class=\"::dt.customClass\">\\n        <button type=\"button\" style=\"min-width:100%;\" class=\"btn btn-default btn-sm\" ng-class=\"{\\'btn-info\\': dt.selected, active: isActive(dt)}\" ng-click=\"select(dt.date)\" ng-disabled=\"dt.disabled\" tabindex=\"-1\"><span ng-class=\"::{\\'text-muted\\': dt.secondary, \\'text-info\\': dt.current}\">{{::dt.label}}</span></button>\\n      </td>\\n    </tr>\\n  </tbody>\\n</table>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/datepicker/month.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/datepicker/month.html\",\n            '<table role=\"grid\" aria-labelledby=\"{{::uniqueId}}-title\" aria-activedescendant=\"{{activeDateId}}\">\\n  <thead>\\n    <tr>\\n      <th><button type=\"button\" class=\"btn btn-default btn-sm pull-left\" ng-click=\"move(-1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-left\"></i></button></th>\\n      <th><button id=\"{{::uniqueId}}-title\" role=\"heading\" aria-live=\"assertive\" aria-atomic=\"true\" type=\"button\" class=\"btn btn-default btn-sm\" ng-click=\"toggleMode()\" ng-disabled=\"datepickerMode === maxMode\" tabindex=\"-1\" style=\"width:100%;\"><strong>{{title}}</strong></button></th>\\n      <th><button type=\"button\" class=\"btn btn-default btn-sm pull-right\" ng-click=\"move(1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-right\"></i></button></th>\\n    </tr>\\n  </thead>\\n  <tbody>\\n    <tr ng-repeat=\"row in rows track by $index\">\\n      <td ng-repeat=\"dt in row track by dt.date\" class=\"text-center\" role=\"gridcell\" id=\"{{::dt.uid}}\" ng-class=\"::dt.customClass\">\\n        <button type=\"button\" style=\"min-width:100%;\" class=\"btn btn-default\" ng-class=\"{\\'btn-info\\': dt.selected, active: isActive(dt)}\" ng-click=\"select(dt.date)\" ng-disabled=\"dt.disabled\" tabindex=\"-1\"><span ng-class=\"::{\\'text-info\\': dt.current}\">{{::dt.label}}</span></button>\\n      </td>\\n    </tr>\\n  </tbody>\\n</table>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/datepicker/popup.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/datepicker/popup.html\",\n            '<ul class=\"dropdown-menu\" ng-if=\"isOpen\" style=\"display: block\" ng-style=\"{top: position.top+\\'px\\', left: position.left+\\'px\\'}\" ng-keydown=\"keydown($event)\" ng-click=\"$event.stopPropagation()\">\\n\\t<li ng-transclude></li>\\n\\t<li ng-if=\"showButtonBar\" style=\"padding:10px 9px 2px\">\\n\\t\\t<span class=\"btn-group pull-left\">\\n\\t\\t\\t<button type=\"button\" class=\"btn btn-sm btn-info\" ng-click=\"select(\\'today\\')\" ng-disabled=\"isDisabled(\\'today\\')\">{{ getText(\\'current\\') }}</button>\\n\\t\\t\\t<button type=\"button\" class=\"btn btn-sm btn-danger\" ng-click=\"select(null)\">{{ getText(\\'clear\\') }}</button>\\n\\t\\t</span>\\n\\t\\t<button type=\"button\" class=\"btn btn-sm btn-success pull-right\" ng-click=\"close()\">{{ getText(\\'close\\') }}</button>\\n\\t</li>\\n</ul>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/datepicker/year.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/datepicker/year.html\",\n            '<table role=\"grid\" aria-labelledby=\"{{::uniqueId}}-title\" aria-activedescendant=\"{{activeDateId}}\">\\n  <thead>\\n    <tr>\\n      <th><button type=\"button\" class=\"btn btn-default btn-sm pull-left\" ng-click=\"move(-1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-left\"></i></button></th>\\n      <th colspan=\"3\"><button id=\"{{::uniqueId}}-title\" role=\"heading\" aria-live=\"assertive\" aria-atomic=\"true\" type=\"button\" class=\"btn btn-default btn-sm\" ng-click=\"toggleMode()\" ng-disabled=\"datepickerMode === maxMode\" tabindex=\"-1\" style=\"width:100%;\"><strong>{{title}}</strong></button></th>\\n      <th><button type=\"button\" class=\"btn btn-default btn-sm pull-right\" ng-click=\"move(1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-right\"></i></button></th>\\n    </tr>\\n  </thead>\\n  <tbody>\\n    <tr ng-repeat=\"row in rows track by $index\">\\n      <td ng-repeat=\"dt in row track by dt.date\" class=\"text-center\" role=\"gridcell\" id=\"{{::dt.uid}}\">\\n        <button type=\"button\" style=\"min-width:100%;\" class=\"btn btn-default\" ng-class=\"{\\'btn-info\\': dt.selected, active: isActive(dt)}\" ng-click=\"select(dt.date)\" ng-disabled=\"dt.disabled\" tabindex=\"-1\"><span ng-class=\"::{\\'text-info\\': dt.current}\">{{::dt.label}}</span></button>\\n      </td>\\n    </tr>\\n  </tbody>\\n</table>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/modal/backdrop.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/modal/backdrop.html\",\n            '<div class=\"modal-backdrop\"\\n     modal-animation-class=\"fade\"\\n     modal-in-class=\"in\"\\n     ng-style=\"{\\'z-index\\': 1040 + (index && 1 || 0) + index*10}\"\\n></div>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/modal/window.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/modal/window.html\",\n            '<div modal-render=\"{{$isRendered}}\" tabindex=\"-1\" role=\"dialog\" class=\"modal\"\\n    modal-animation-class=\"fade\"\\n    modal-in-class=\"in\"\\n\\tng-style=\"{\\'z-index\\': 1050 + index*10, display: \\'block\\'}\" ng-click=\"close($event)\">\\n    <div class=\"modal-dialog\" ng-class=\"size ? \\'modal-\\' + size : \\'\\'\"><div class=\"modal-content\" modal-transclude></div></div>\\n</div>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/pagination/pager.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/pagination/pager.html\",\n            '<ul class=\"pager\">\\n  <li ng-class=\"{disabled: noPrevious()||ngDisabled, previous: align}\"><a href ng-click=\"selectPage(page - 1, $event)\">{{::getText(\\'previous\\')}}</a></li>\\n  <li ng-class=\"{disabled: noNext()||ngDisabled, next: align}\"><a href ng-click=\"selectPage(page + 1, $event)\">{{::getText(\\'next\\')}}</a></li>\\n</ul>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/pagination/pagination.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/pagination/pagination.html\",\n            '<ul class=\"pagination\">\\n  <li ng-if=\"::boundaryLinks\" ng-class=\"{disabled: noPrevious()||ngDisabled}\" class=\"pagination-first\"><a href ng-click=\"selectPage(1, $event)\">{{::getText(\\'first\\')}}</a></li>\\n  <li ng-if=\"::directionLinks\" ng-class=\"{disabled: noPrevious()||ngDisabled}\" class=\"pagination-prev\"><a href ng-click=\"selectPage(page - 1, $event)\">{{::getText(\\'previous\\')}}</a></li>\\n  <li ng-repeat=\"page in pages track by $index\" ng-class=\"{active: page.active,disabled: ngDisabled&&!page.active}\" class=\"pagination-page\"><a href ng-click=\"selectPage(page.number, $event)\">{{page.text}}</a></li>\\n  <li ng-if=\"::directionLinks\" ng-class=\"{disabled: noNext()||ngDisabled}\" class=\"pagination-next\"><a href ng-click=\"selectPage(page + 1, $event)\">{{::getText(\\'next\\')}}</a></li>\\n  <li ng-if=\"::boundaryLinks\" ng-class=\"{disabled: noNext()||ngDisabled}\" class=\"pagination-last\"><a href ng-click=\"selectPage(totalPages, $event)\">{{::getText(\\'last\\')}}</a></li>\\n</ul>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/tooltip/tooltip-html-popup.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/tooltip/tooltip-html-popup.html\",\n            '<div class=\"tooltip\"\\n  tooltip-animation-class=\"fade\"\\n  tooltip-classes\\n  ng-class=\"{ in: isOpen() }\">\\n  <div class=\"tooltip-arrow\"></div>\\n  <div class=\"tooltip-inner\" ng-bind-html=\"contentExp()\"></div>\\n</div>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/tooltip/tooltip-html-unsafe-popup.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/tooltip/tooltip-html-unsafe-popup.html\",\n            '<div class=\"tooltip\"\\n  tooltip-animation-class=\"fade\"\\n  tooltip-classes\\n  ng-class=\"{ in: isOpen() }\">\\n  <div class=\"tooltip-arrow\"></div>\\n  <div class=\"tooltip-inner\" bind-html-unsafe=\"content\"></div>\\n</div>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/tooltip/tooltip-popup.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/tooltip/tooltip-popup.html\",\n            '<div class=\"tooltip\"\\n  tooltip-animation-class=\"fade\"\\n  tooltip-classes\\n  ng-class=\"{ in: isOpen() }\">\\n  <div class=\"tooltip-arrow\"></div>\\n  <div class=\"tooltip-inner\" ng-bind=\"content\"></div>\\n</div>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/tooltip/tooltip-template-popup.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/tooltip/tooltip-template-popup.html\",\n            '<div class=\"tooltip\"\\n  tooltip-animation-class=\"fade\"\\n  tooltip-classes\\n  ng-class=\"{ in: isOpen() }\">\\n  <div class=\"tooltip-arrow\"></div>\\n  <div class=\"tooltip-inner\"\\n    tooltip-template-transclude=\"contentExp()\"\\n    tooltip-template-transclude-scope=\"originScope()\"></div>\\n</div>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/popover/popover-html.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/popover/popover-html.html\",\n            '<div class=\"popover\"\\n  tooltip-animation-class=\"fade\"\\n  tooltip-classes\\n  ng-class=\"{ in: isOpen() }\">\\n  <div class=\"arrow\"></div>\\n\\n  <div class=\"popover-inner\">\\n      <h3 class=\"popover-title\" ng-bind=\"title\" ng-if=\"title\"></h3>\\n      <div class=\"popover-content\" ng-bind-html=\"contentExp()\"></div>\\n  </div>\\n</div>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/popover/popover-template.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/popover/popover-template.html\",\n            '<div class=\"popover\"\\n  tooltip-animation-class=\"fade\"\\n  tooltip-classes\\n  ng-class=\"{ in: isOpen() }\">\\n  <div class=\"arrow\"></div>\\n\\n  <div class=\"popover-inner\">\\n      <h3 class=\"popover-title\" ng-bind=\"title\" ng-if=\"title\"></h3>\\n      <div class=\"popover-content\"\\n        tooltip-template-transclude=\"contentExp()\"\\n        tooltip-template-transclude-scope=\"originScope()\"></div>\\n  </div>\\n</div>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/popover/popover.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/popover/popover.html\",\n            '<div class=\"popover\"\\n  tooltip-animation-class=\"fade\"\\n  tooltip-classes\\n  ng-class=\"{ in: isOpen() }\">\\n  <div class=\"arrow\"></div>\\n\\n  <div class=\"popover-inner\">\\n      <h3 class=\"popover-title\" ng-bind=\"title\" ng-if=\"title\"></h3>\\n      <div class=\"popover-content\" ng-bind=\"content\"></div>\\n  </div>\\n</div>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/progressbar/bar.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/progressbar/bar.html\",\n            '<div class=\"progress-bar\" ng-class=\"type && \\'progress-bar-\\' + type\" role=\"progressbar\" aria-valuenow=\"{{value}}\" aria-valuemin=\"0\" aria-valuemax=\"{{max}}\" ng-style=\"{width: (percent < 100 ? percent : 100) + \\'%\\'}\" aria-valuetext=\"{{percent | number:0}}%\" style=\"min-width: 0;\" ng-transclude></div>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/progressbar/progress.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\"template/progressbar/progress.html\", '<div class=\"progress\" ng-transclude></div>');\n        }\n      ]),\n      angular.module(\"template/progressbar/progressbar.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/progressbar/progressbar.html\",\n            '<div class=\"progress\">\\n  <div class=\"progress-bar\" ng-class=\"type && \\'progress-bar-\\' + type\" role=\"progressbar\" aria-valuenow=\"{{value}}\" aria-valuemin=\"0\" aria-valuemax=\"{{max}}\" ng-style=\"{width: (percent < 100 ? percent : 100) + \\'%\\'}\" aria-valuetext=\"{{percent | number:0}}%\" style=\"min-width: 0;\" ng-transclude></div>\\n</div>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/rating/rating.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/rating/rating.html\",\n            '<span ng-mouseleave=\"reset()\" ng-keydown=\"onKeydown($event)\" tabindex=\"0\" role=\"slider\" aria-valuemin=\"0\" aria-valuemax=\"{{range.length}}\" aria-valuenow=\"{{value}}\">\\n    <span ng-repeat-start=\"r in range track by $index\" class=\"sr-only\">({{ $index < value ? \\'*\\' : \\' \\' }})</span>\\n    <i ng-repeat-end ng-mouseenter=\"enter($index + 1)\" ng-click=\"rate($index + 1)\" class=\"glyphicon\" ng-class=\"$index < value && (r.stateOn || \\'glyphicon-star\\') || (r.stateOff || \\'glyphicon-star-empty\\')\" ng-attr-title=\"{{r.title}}\" ></i>\\n</span>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/tabs/tab.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/tabs/tab.html\",\n            '<li ng-class=\"{active: active, disabled: disabled}\">\\n  <a href ng-click=\"select()\" tab-heading-transclude>{{heading}}</a>\\n</li>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/tabs/tabset.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/tabs/tabset.html\",\n            '<div>\\n  <ul class=\"nav nav-{{type || \\'tabs\\'}}\" ng-class=\"{\\'nav-stacked\\': vertical, \\'nav-justified\\': justified}\" ng-transclude></ul>\\n  <div class=\"tab-content\">\\n    <div class=\"tab-pane\" \\n         ng-repeat=\"tab in tabs\" \\n         ng-class=\"{active: tab.active}\"\\n         tab-content-transclude=\"tab\">\\n    </div>\\n  </div>\\n</div>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/timepicker/timepicker.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/timepicker/timepicker.html\",\n            '<table>\\n  <tbody>\\n    <tr class=\"text-center\" ng-show=\"::showSpinners\">\\n      <td><a ng-click=\"incrementHours()\" ng-class=\"{disabled: noIncrementHours()}\" class=\"btn btn-link\"><span class=\"glyphicon glyphicon-chevron-up\"></span></a></td>\\n      <td>&nbsp;</td>\\n      <td><a ng-click=\"incrementMinutes()\" ng-class=\"{disabled: noIncrementMinutes()}\" class=\"btn btn-link\"><span class=\"glyphicon glyphicon-chevron-up\"></span></a></td>\\n      <td ng-show=\"showMeridian\"></td>\\n    </tr>\\n    <tr>\\n      <td class=\"form-group\" ng-class=\"{\\'has-error\\': invalidHours}\">\\n        <input style=\"width:50px;\" type=\"text\" ng-model=\"hours\" ng-change=\"updateHours()\" class=\"form-control text-center\" ng-readonly=\"::readonlyInput\" maxlength=\"2\">\\n      </td>\\n      <td>:</td>\\n      <td class=\"form-group\" ng-class=\"{\\'has-error\\': invalidMinutes}\">\\n        <input style=\"width:50px;\" type=\"text\" ng-model=\"minutes\" ng-change=\"updateMinutes()\" class=\"form-control text-center\" ng-readonly=\"::readonlyInput\" maxlength=\"2\">\\n      </td>\\n      <td ng-show=\"showMeridian\"><button type=\"button\" ng-class=\"{disabled: noToggleMeridian()}\" class=\"btn btn-default text-center\" ng-click=\"toggleMeridian()\">{{meridian}}</button></td>\\n    </tr>\\n    <tr class=\"text-center\" ng-show=\"::showSpinners\">\\n      <td><a ng-click=\"decrementHours()\" ng-class=\"{disabled: noDecrementHours()}\" class=\"btn btn-link\"><span class=\"glyphicon glyphicon-chevron-down\"></span></a></td>\\n      <td>&nbsp;</td>\\n      <td><a ng-click=\"decrementMinutes()\" ng-class=\"{disabled: noDecrementMinutes()}\" class=\"btn btn-link\"><span class=\"glyphicon glyphicon-chevron-down\"></span></a></td>\\n      <td ng-show=\"showMeridian\"></td>\\n    </tr>\\n  </tbody>\\n</table>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/typeahead/typeahead-match.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/typeahead/typeahead-match.html\",\n            '<a href tabindex=\"-1\" ng-bind-html=\"match.label | typeaheadHighlight:query\"></a>\\n'\n          );\n        }\n      ]),\n      angular.module(\"template/typeahead/typeahead-popup.html\", []).run([\n        \"$templateCache\",\n        function(e) {\n          e.put(\n            \"template/typeahead/typeahead-popup.html\",\n            '<ul class=\"dropdown-menu\" ng-show=\"isOpen() && !moveInProgress\" ng-style=\"{top: position().top+\\'px\\', left: position().left+\\'px\\'}\" style=\"display: block;\" role=\"listbox\" aria-hidden=\"{{!isOpen()}}\">\\n    <li ng-repeat=\"match in matches track by $index\" ng-class=\"{active: isActive($index) }\" ng-mouseenter=\"selectActive($index)\" ng-click=\"selectMatch($index)\" role=\"option\" id=\"{{::match.id}}\">\\n        <div typeahead-match index=\"$index\" match=\"match\" query=\"query\" template-url=\"templateUrl\"></div>\\n    </li>\\n</ul>\\n'\n          );\n        }\n      ]),\n      !angular.$$csp() &&\n        angular\n          .element(document)\n          .find(\"head\")\n          .prepend(\n            '<style type=\"text/css\">.ng-animate.item:not(.left):not(.right){-webkit-transition:0s ease-in-out left;transition:0s ease-in-out left}</style>'\n          );\n  },\n  function(e, t, n) {\n    (function(e) {\n      !(function(e) {\n        \"use strict\";\n        var t = 0,\n          n = function(t, n) {\n            (this.options = n), (this.$elementFilestyle = []), (this.$element = e(t));\n          };\n        n.prototype = {\n          clear: function() {\n            this.$element.val(\"\"),\n              this.$elementFilestyle.find(\":text\").val(\"\"),\n              this.$elementFilestyle.find(\".badge\").remove();\n          },\n          destroy: function() {\n            this.$element.removeAttr(\"style\").removeData(\"filestyle\"),\n              this.$elementFilestyle.remove();\n          },\n          disabled: function(e) {\n            if (!0 === e)\n              this.options.disabled ||\n                (this.$element.attr(\"disabled\", \"true\"),\n                this.$elementFilestyle.find(\"label\").attr(\"disabled\", \"true\"),\n                (this.options.disabled = !0));\n            else {\n              if (!1 !== e) return this.options.disabled;\n              this.options.disabled &&\n                (this.$element.removeAttr(\"disabled\"),\n                this.$elementFilestyle.find(\"label\").removeAttr(\"disabled\"),\n                (this.options.disabled = !1));\n            }\n          },\n          buttonBefore: function(e) {\n            if (!0 === e)\n              this.options.buttonBefore ||\n                ((this.options.buttonBefore = !0),\n                this.options.input &&\n                  (this.$elementFilestyle.remove(), this.constructor(), this.pushNameFiles()));\n            else {\n              if (!1 !== e) return this.options.buttonBefore;\n              this.options.buttonBefore &&\n                ((this.options.buttonBefore = !1),\n                this.options.input &&\n                  (this.$elementFilestyle.remove(), this.constructor(), this.pushNameFiles()));\n            }\n          },\n          icon: function(e) {\n            if (!0 === e)\n              this.options.icon ||\n                ((this.options.icon = !0),\n                this.$elementFilestyle.find(\"label\").prepend(this.htmlIcon()));\n            else {\n              if (!1 !== e) return this.options.icon;\n              this.options.icon &&\n                ((this.options.icon = !1),\n                this.$elementFilestyle.find(\".icon-span-filestyle\").remove());\n            }\n          },\n          input: function(e) {\n            if (!0 === e)\n              this.options.input ||\n                ((this.options.input = !0),\n                this.options.buttonBefore\n                  ? this.$elementFilestyle.append(this.htmlInput())\n                  : this.$elementFilestyle.prepend(this.htmlInput()),\n                this.$elementFilestyle.find(\".badge\").remove(),\n                this.pushNameFiles(),\n                this.$elementFilestyle.find(\".group-span-filestyle\").addClass(\"input-group-btn\"));\n            else {\n              if (!1 !== e) return this.options.input;\n              if (this.options.input) {\n                (this.options.input = !1), this.$elementFilestyle.find(\":text\").remove();\n                var t = this.pushNameFiles();\n                t.length > 0 &&\n                  this.options.badge &&\n                  this.$elementFilestyle\n                    .find(\"label\")\n                    .append(' <span class=\"badge\">' + t.length + \"</span>\"),\n                  this.$elementFilestyle\n                    .find(\".group-span-filestyle\")\n                    .removeClass(\"input-group-btn\");\n              }\n            }\n          },\n          size: function(e) {\n            if (void 0 === e) return this.options.size;\n            var t = this.$elementFilestyle.find(\"label\"),\n              n = this.$elementFilestyle.find(\"input\");\n            t.removeClass(\"btn-lg btn-sm\"),\n              n.removeClass(\"input-lg input-sm\"),\n              \"nr\" != e && (t.addClass(\"btn-\" + e), n.addClass(\"input-\" + e));\n          },\n          placeholder: function(e) {\n            if (void 0 === e) return this.options.placeholder;\n            (this.options.placeholder = e),\n              this.$elementFilestyle.find(\"input\").attr(\"placeholder\", e);\n          },\n          buttonText: function(e) {\n            if (void 0 === e) return this.options.buttonText;\n            (this.options.buttonText = e),\n              this.$elementFilestyle.find(\"label .buttonText\").html(this.options.buttonText);\n          },\n          buttonName: function(e) {\n            if (void 0 === e) return this.options.buttonName;\n            (this.options.buttonName = e),\n              this.$elementFilestyle\n                .find(\"label\")\n                .attr({ class: \"btn \" + this.options.buttonName });\n          },\n          iconName: function(e) {\n            if (void 0 === e) return this.options.iconName;\n            this.$elementFilestyle\n              .find(\".icon-span-filestyle\")\n              .attr({ class: \"icon-span-filestyle \" + this.options.iconName });\n          },\n          htmlIcon: function() {\n            return this.options.icon\n              ? '<span class=\"icon-span-filestyle ' + this.options.iconName + '\"></span> '\n              : \"\";\n          },\n          htmlInput: function() {\n            return this.options.input\n              ? '<input type=\"text\" class=\"form-control ' +\n                  (\"nr\" == this.options.size ? \"\" : \"input-\" + this.options.size) +\n                  '\" placeholder=\"' +\n                  this.options.placeholder +\n                  '\" disabled> '\n              : \"\";\n          },\n          pushNameFiles: function() {\n            var e = \"\",\n              t = [];\n            void 0 === this.$element[0].files\n              ? (t[0] = { name: this.$element[0] && this.$element[0].value })\n              : (t = this.$element[0].files);\n            for (var n = 0; n < t.length; n++) e += t[n].name.split(\"\\\\\").pop() + \", \";\n            return (\n              \"\" !== e\n                ? this.$elementFilestyle.find(\":text\").val(e.replace(/\\, $/g, \"\"))\n                : this.$elementFilestyle.find(\":text\").val(\"\"),\n              t\n            );\n          },\n          constructor: function() {\n            var n,\n              a,\n              o = this,\n              i = \"\",\n              r = o.$element.attr(\"id\");\n            (\"\" !== r && r) || ((r = \"filestyle-\" + t), o.$element.attr({ id: r }), t++),\n              (i =\n                '<div class=\"group-span-filestyle ' +\n                (o.options.input ? \"input-group-btn\" : \"btn-group\") +\n                '\">'),\n              (n =\n                '<label for=\"' +\n                r +\n                '\" class=\"btn ' +\n                o.options.buttonName +\n                \" \" +\n                (\"nr\" == o.options.size ? \"\" : \"btn-\" + o.options.size) +\n                '\" ' +\n                (o.options.disabled || o.$element.attr(\"disabled\") ? 'disabled=\"true\"' : \"\") +\n                \">\" +\n                o.htmlIcon() +\n                '<span class=\"buttonText\">' +\n                o.options.buttonText +\n                \"</span></label>\"),\n              (a =\n                '<button id=\"' +\n                r +\n                '-clear\" class=\"btn btn-default\" aria-label=\"Clear\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-times\"></span></button>'),\n              (i = o.options.buttonBefore\n                ? i + n + a + \"</div>\" + o.htmlInput()\n                : o.htmlInput() + i + a + n + \"</div>\"),\n              (o.$elementFilestyle = e(\n                '<div class=\"bootstrap-filestyle input-group\">' + i + \"</div>\"\n              )),\n              o.$elementFilestyle\n                .find(\".group-span-filestyle\")\n                .attr(\"tabindex\", \"0\")\n                .keypress(function(e) {\n                  if (13 === e.keyCode || 32 === e.charCode)\n                    return o.$elementFilestyle.find(\"label\").click(), !1;\n                }),\n              o.$elementFilestyle.find(\"#\" + r + \"-clear\").click(function(e) {\n                o.clear();\n              }),\n              o.$element\n                .css({ position: \"absolute\", clip: \"rect(0px 0px 0px 0px)\" })\n                .attr(\"tabindex\", \"-1\")\n                .after(o.$elementFilestyle),\n              (o.options.disabled || o.$element.attr(\"disabled\")) &&\n                o.$element.attr(\"disabled\", \"true\"),\n              o.$element.change(function() {\n                var e = o.pushNameFiles();\n                0 == o.options.input && o.options.badge\n                  ? 0 == o.$elementFilestyle.find(\".badge\").length\n                    ? o.$elementFilestyle\n                        .find(\"label\")\n                        .append(' <span class=\"badge\">' + e.length + \"</span>\")\n                    : 0 == e.length\n                      ? o.$elementFilestyle.find(\".badge\").remove()\n                      : o.$elementFilestyle.find(\".badge\").html(e.length)\n                  : o.$elementFilestyle.find(\".badge\").remove();\n              }),\n              window.navigator.userAgent.search(/firefox/i) > -1 &&\n                o.$elementFilestyle.find(\"label\").click(function() {\n                  return o.$element.click(), !1;\n                });\n          }\n        };\n        var a = e.fn.filestyle;\n        (e.fn.filestyle = function(t, a) {\n          var o = \"\",\n            i = this.each(function() {\n              if (\"file\" === e(this).attr(\"type\")) {\n                var i = e(this),\n                  r = i.data(\"filestyle\"),\n                  s = e.extend({}, e.fn.filestyle.defaults, t, \"object\" == typeof t && t);\n                r || (i.data(\"filestyle\", (r = new n(this, s))), r.constructor()),\n                  \"string\" == typeof t && (o = r[t](a));\n              }\n            });\n          return void 0 !== typeof o ? o : i;\n        }),\n          (e.fn.filestyle.defaults = {\n            buttonText: \"Choose file\",\n            iconName: \"glyphicon glyphicon-folder-open\",\n            buttonName: \"btn-default\",\n            size: \"nr\",\n            input: !0,\n            badge: !0,\n            icon: !0,\n            buttonBefore: !1,\n            disabled: !1,\n            placeholder: \"\"\n          }),\n          (e.fn.filestyle.noConflict = function() {\n            return (e.fn.filestyle = a), this;\n          }),\n          e(function() {\n            e(\".filestyle\").each(function() {\n              var t = e(this),\n                n = {\n                  input: \"false\" !== t.attr(\"data-input\"),\n                  icon: \"false\" !== t.attr(\"data-icon\"),\n                  buttonBefore: \"true\" === t.attr(\"data-buttonBefore\"),\n                  disabled: \"true\" === t.attr(\"data-disabled\"),\n                  size: t.attr(\"data-size\"),\n                  buttonText: t.attr(\"data-buttonText\"),\n                  buttonName: t.attr(\"data-buttonName\"),\n                  iconName: t.attr(\"data-iconName\"),\n                  badge: \"false\" !== t.attr(\"data-badge\"),\n                  placeholder: t.attr(\"data-placeholder\")\n                };\n              t.filestyle(n);\n            });\n          });\n      })(e);\n    }.call(this, n(1)));\n  },\n  function(e, t, n) {\n    (function(e) {\n      !(function(e) {\n        (e.color = {}),\n          (e.color.make = function(t, n, a, o) {\n            var i = {};\n            return (\n              (i.r = t || 0),\n              (i.g = n || 0),\n              (i.b = a || 0),\n              (i.a = null != o ? o : 1),\n              (i.add = function(e, t) {\n                for (var n = 0; n < e.length; ++n) i[e.charAt(n)] += t;\n                return i.normalize();\n              }),\n              (i.scale = function(e, t) {\n                for (var n = 0; n < e.length; ++n) i[e.charAt(n)] *= t;\n                return i.normalize();\n              }),\n              (i.toString = function() {\n                return i.a >= 1\n                  ? \"rgb(\" + [i.r, i.g, i.b].join(\",\") + \")\"\n                  : \"rgba(\" + [i.r, i.g, i.b, i.a].join(\",\") + \")\";\n              }),\n              (i.normalize = function() {\n                function e(e, t, n) {\n                  return t < e ? e : t > n ? n : t;\n                }\n                return (\n                  (i.r = e(0, parseInt(i.r), 255)),\n                  (i.g = e(0, parseInt(i.g), 255)),\n                  (i.b = e(0, parseInt(i.b), 255)),\n                  (i.a = e(0, i.a, 1)),\n                  i\n                );\n              }),\n              (i.clone = function() {\n                return e.color.make(i.r, i.b, i.g, i.a);\n              }),\n              i.normalize()\n            );\n          }),\n          (e.color.extract = function(t, n) {\n            var a;\n            do {\n              if (\"\" != (a = t.css(n).toLowerCase()) && \"transparent\" != a) break;\n              t = t.parent();\n            } while (t.length && !e.nodeName(t.get(0), \"body\"));\n            return \"rgba(0, 0, 0, 0)\" == a && (a = \"transparent\"), e.color.parse(a);\n          }),\n          (e.color.parse = function(n) {\n            var a,\n              o = e.color.make;\n            if ((a = /rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/.exec(n)))\n              return o(parseInt(a[1], 10), parseInt(a[2], 10), parseInt(a[3], 10));\n            if (\n              (a = /rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\s*\\)/.exec(\n                n\n              ))\n            )\n              return o(\n                parseInt(a[1], 10),\n                parseInt(a[2], 10),\n                parseInt(a[3], 10),\n                parseFloat(a[4])\n              );\n            if (\n              (a = /rgb\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*\\)/.exec(\n                n\n              ))\n            )\n              return o(2.55 * parseFloat(a[1]), 2.55 * parseFloat(a[2]), 2.55 * parseFloat(a[3]));\n            if (\n              (a = /rgba\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\s*\\)/.exec(\n                n\n              ))\n            )\n              return o(\n                2.55 * parseFloat(a[1]),\n                2.55 * parseFloat(a[2]),\n                2.55 * parseFloat(a[3]),\n                parseFloat(a[4])\n              );\n            if ((a = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(n)))\n              return o(parseInt(a[1], 16), parseInt(a[2], 16), parseInt(a[3], 16));\n            if ((a = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(n)))\n              return o(\n                parseInt(a[1] + a[1], 16),\n                parseInt(a[2] + a[2], 16),\n                parseInt(a[3] + a[3], 16)\n              );\n            var i = e.trim(n).toLowerCase();\n            return \"transparent\" == i\n              ? o(255, 255, 255, 0)\n              : o((a = t[i] || [0, 0, 0])[0], a[1], a[2]);\n          });\n        var t = {\n          aqua: [0, 255, 255],\n          azure: [240, 255, 255],\n          beige: [245, 245, 220],\n          black: [0, 0, 0],\n          blue: [0, 0, 255],\n          brown: [165, 42, 42],\n          cyan: [0, 255, 255],\n          darkblue: [0, 0, 139],\n          darkcyan: [0, 139, 139],\n          darkgrey: [169, 169, 169],\n          darkgreen: [0, 100, 0],\n          darkkhaki: [189, 183, 107],\n          darkmagenta: [139, 0, 139],\n          darkolivegreen: [85, 107, 47],\n          darkorange: [255, 140, 0],\n          darkorchid: [153, 50, 204],\n          darkred: [139, 0, 0],\n          darksalmon: [233, 150, 122],\n          darkviolet: [148, 0, 211],\n          fuchsia: [255, 0, 255],\n          gold: [255, 215, 0],\n          green: [0, 128, 0],\n          indigo: [75, 0, 130],\n          khaki: [240, 230, 140],\n          lightblue: [173, 216, 230],\n          lightcyan: [224, 255, 255],\n          lightgreen: [144, 238, 144],\n          lightgrey: [211, 211, 211],\n          lightpink: [255, 182, 193],\n          lightyellow: [255, 255, 224],\n          lime: [0, 255, 0],\n          magenta: [255, 0, 255],\n          maroon: [128, 0, 0],\n          navy: [0, 0, 128],\n          olive: [128, 128, 0],\n          orange: [255, 165, 0],\n          pink: [255, 192, 203],\n          purple: [128, 0, 128],\n          violet: [128, 0, 128],\n          red: [255, 0, 0],\n          silver: [192, 192, 192],\n          white: [255, 255, 255],\n          yellow: [255, 255, 0]\n        };\n      })(e),\n        (function(e) {\n          var t = Object.prototype.hasOwnProperty;\n          function n(t, n) {\n            var a = n.children(\".\" + t)[0];\n            if (\n              null == a &&\n              (((a = document.createElement(\"canvas\")).className = t),\n              e(a)\n                .css({ direction: \"ltr\", position: \"absolute\", left: 0, top: 0 })\n                .appendTo(n),\n              !a.getContext)\n            ) {\n              if (!window.G_vmlCanvasManager)\n                throw new Error(\n                  \"Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode.\"\n                );\n              a = window.G_vmlCanvasManager.initElement(a);\n            }\n            this.element = a;\n            var o = (this.context = a.getContext(\"2d\")),\n              i = window.devicePixelRatio || 1,\n              r =\n                o.webkitBackingStorePixelRatio ||\n                o.mozBackingStorePixelRatio ||\n                o.msBackingStorePixelRatio ||\n                o.oBackingStorePixelRatio ||\n                o.backingStorePixelRatio ||\n                1;\n            (this.pixelRatio = i / r),\n              this.resize(n.width(), n.height()),\n              (this.textContainer = null),\n              (this.text = {}),\n              (this._textCache = {});\n          }\n          function a(t, a, o, i) {\n            var r = [],\n              s = {\n                colors: [\"#edc240\", \"#afd8f8\", \"#cb4b4b\", \"#4da74d\", \"#9440ed\"],\n                legend: {\n                  show: !0,\n                  noColumns: 1,\n                  labelFormatter: null,\n                  labelBoxBorderColor: \"#ccc\",\n                  container: null,\n                  position: \"ne\",\n                  margin: 5,\n                  backgroundColor: null,\n                  backgroundOpacity: 0.85,\n                  sorted: null\n                },\n                xaxis: {\n                  show: null,\n                  position: \"bottom\",\n                  mode: null,\n                  font: null,\n                  color: null,\n                  tickColor: null,\n                  transform: null,\n                  inverseTransform: null,\n                  min: null,\n                  max: null,\n                  autoscaleMargin: null,\n                  ticks: null,\n                  tickFormatter: null,\n                  labelWidth: null,\n                  labelHeight: null,\n                  reserveSpace: null,\n                  tickLength: null,\n                  alignTicksWithAxis: null,\n                  tickDecimals: null,\n                  tickSize: null,\n                  minTickSize: null\n                },\n                yaxis: { autoscaleMargin: 0.02, position: \"left\" },\n                xaxes: [],\n                yaxes: [],\n                series: {\n                  points: {\n                    show: !1,\n                    radius: 3,\n                    lineWidth: 2,\n                    fill: !0,\n                    fillColor: \"#ffffff\",\n                    symbol: \"circle\"\n                  },\n                  lines: { lineWidth: 2, fill: !1, fillColor: null, steps: !1 },\n                  bars: {\n                    show: !1,\n                    lineWidth: 2,\n                    barWidth: 1,\n                    fill: !0,\n                    fillColor: null,\n                    align: \"left\",\n                    horizontal: !1,\n                    zero: !0\n                  },\n                  shadowSize: 3,\n                  highlightColor: null\n                },\n                grid: {\n                  show: !0,\n                  aboveData: !1,\n                  color: \"#545454\",\n                  backgroundColor: null,\n                  borderColor: null,\n                  tickColor: null,\n                  margin: 0,\n                  labelMargin: 5,\n                  axisMargin: 8,\n                  borderWidth: 2,\n                  minBorderMargin: null,\n                  markings: null,\n                  markingsColor: \"#f4f4f4\",\n                  markingsLineWidth: 2,\n                  clickable: !1,\n                  hoverable: !1,\n                  autoHighlight: !0,\n                  mouseActiveRadius: 10\n                },\n                interaction: { redrawOverlayInterval: 1e3 / 60 },\n                hooks: {}\n              },\n              l = null,\n              c = null,\n              d = null,\n              u = null,\n              p = null,\n              h = [],\n              f = [],\n              m = { left: 0, right: 0, top: 0, bottom: 0 },\n              g = 0,\n              v = 0,\n              b = {\n                processOptions: [],\n                processRawData: [],\n                processDatapoints: [],\n                processOffset: [],\n                drawBackground: [],\n                drawSeries: [],\n                draw: [],\n                bindEvents: [],\n                drawOverlay: [],\n                shutdown: []\n              },\n              w = this;\n            function y(e, t) {\n              t = [w].concat(t);\n              for (var n = 0; n < e.length; ++n) e[n].apply(this, t);\n            }\n            function k(t) {\n              (r = (function(t) {\n                for (var n = [], a = 0; a < t.length; ++a) {\n                  var o = e.extend(!0, {}, s.series);\n                  null != t[a].data\n                    ? ((o.data = t[a].data),\n                      delete t[a].data,\n                      e.extend(!0, o, t[a]),\n                      (t[a].data = o.data))\n                    : (o.data = t[a]),\n                    n.push(o);\n                }\n                return n;\n              })(t)),\n                (function() {\n                  var t,\n                    n = r.length,\n                    a = -1;\n                  for (t = 0; t < r.length; ++t) {\n                    var o = r[t].color;\n                    null != o && (n--, \"number\" == typeof o && o > a && (a = o));\n                  }\n                  n <= a && (n = a + 1);\n                  var i,\n                    l = [],\n                    c = s.colors,\n                    d = c.length,\n                    u = 0;\n                  for (t = 0; t < n; t++)\n                    (i = e.color.parse(c[t % d] || \"#666\")),\n                      t % d == 0 && t && (u = u >= 0 ? (u < 0.5 ? -u - 0.2 : 0) : -u),\n                      (l[t] = i.scale(\"rgb\", 1 + u));\n                  var p,\n                    m = 0;\n                  for (t = 0; t < r.length; ++t) {\n                    if (\n                      (null == (p = r[t]).color\n                        ? ((p.color = l[m].toString()), ++m)\n                        : \"number\" == typeof p.color && (p.color = l[p.color].toString()),\n                      null == p.lines.show)\n                    ) {\n                      var g,\n                        v = !0;\n                      for (g in p)\n                        if (p[g] && p[g].show) {\n                          v = !1;\n                          break;\n                        }\n                      v && (p.lines.show = !0);\n                    }\n                    null == p.lines.zero && (p.lines.zero = !!p.lines.fill),\n                      (p.xaxis = P(h, S(p, \"x\"))),\n                      (p.yaxis = P(f, S(p, \"y\")));\n                  }\n                })(),\n                (function() {\n                  var t,\n                    n,\n                    a,\n                    o,\n                    i,\n                    s,\n                    l,\n                    c,\n                    d,\n                    u,\n                    p,\n                    h,\n                    f = Number.POSITIVE_INFINITY,\n                    m = Number.NEGATIVE_INFINITY,\n                    g = Number.MAX_VALUE;\n                  function v(e, t, n) {\n                    t < e.datamin && t != -g && (e.datamin = t),\n                      n > e.datamax && n != g && (e.datamax = n);\n                  }\n                  for (\n                    e.each(T(), function(e, t) {\n                      (t.datamin = f), (t.datamax = m), (t.used = !1);\n                    }),\n                      t = 0;\n                    t < r.length;\n                    ++t\n                  )\n                    ((i = r[t]).datapoints = { points: [] }),\n                      y(b.processRawData, [i, i.data, i.datapoints]);\n                  for (t = 0; t < r.length; ++t) {\n                    if (((i = r[t]), (p = i.data), !(h = i.datapoints.format))) {\n                      if (\n                        ((h = []).push({ x: !0, number: !0, required: !0 }),\n                        h.push({ y: !0, number: !0, required: !0 }),\n                        i.bars.show || (i.lines.show && i.lines.fill))\n                      ) {\n                        var w = !!((i.bars.show && i.bars.zero) || (i.lines.show && i.lines.zero));\n                        h.push({ y: !0, number: !0, required: !1, defaultValue: 0, autoscale: w }),\n                          i.bars.horizontal && (delete h[h.length - 1].y, (h[h.length - 1].x = !0));\n                      }\n                      i.datapoints.format = h;\n                    }\n                    if (null == i.datapoints.pointsize) {\n                      (i.datapoints.pointsize = h.length),\n                        (l = i.datapoints.pointsize),\n                        (s = i.datapoints.points);\n                      var k = i.lines.show && i.lines.steps;\n                      for (i.xaxis.used = i.yaxis.used = !0, n = a = 0; n < p.length; ++n, a += l) {\n                        var S = null == (u = p[n]);\n                        if (!S)\n                          for (o = 0; o < l; ++o)\n                            (c = u[o]),\n                              (d = h[o]) &&\n                                (d.number &&\n                                  null != c &&\n                                  ((c = +c),\n                                  isNaN(c)\n                                    ? (c = null)\n                                    : c == 1 / 0\n                                      ? (c = g)\n                                      : c == -1 / 0 && (c = -g)),\n                                null == c &&\n                                  (d.required && (S = !0),\n                                  null != d.defaultValue && (c = d.defaultValue))),\n                              (s[a + o] = c);\n                        if (S)\n                          for (o = 0; o < l; ++o)\n                            null != (c = s[a + o]) &&\n                              !1 !== (d = h[o]).autoscale &&\n                              (d.x && v(i.xaxis, c, c), d.y && v(i.yaxis, c, c)),\n                              (s[a + o] = null);\n                        else if (\n                          k &&\n                          a > 0 &&\n                          null != s[a - l] &&\n                          s[a - l] != s[a] &&\n                          s[a - l + 1] != s[a + 1]\n                        ) {\n                          for (o = 0; o < l; ++o) s[a + l + o] = s[a + o];\n                          (s[a + 1] = s[a - l + 1]), (a += l);\n                        }\n                      }\n                    }\n                  }\n                  for (t = 0; t < r.length; ++t)\n                    (i = r[t]), y(b.processDatapoints, [i, i.datapoints]);\n                  for (t = 0; t < r.length; ++t) {\n                    (i = r[t]),\n                      (s = i.datapoints.points),\n                      (l = i.datapoints.pointsize),\n                      (h = i.datapoints.format);\n                    var C = f,\n                      P = f,\n                      A = m,\n                      x = m;\n                    for (n = 0; n < s.length; n += l)\n                      if (null != s[n])\n                        for (o = 0; o < l; ++o)\n                          (c = s[n + o]),\n                            (d = h[o]) &&\n                              !1 !== d.autoscale &&\n                              c != g &&\n                              c != -g &&\n                              (d.x && (c < C && (C = c), c > A && (A = c)),\n                              d.y && (c < P && (P = c), c > x && (x = c)));\n                    if (i.bars.show) {\n                      var R;\n                      switch (i.bars.align) {\n                        case \"left\":\n                          R = 0;\n                          break;\n                        case \"right\":\n                          R = -i.bars.barWidth;\n                          break;\n                        default:\n                          R = -i.bars.barWidth / 2;\n                      }\n                      i.bars.horizontal\n                        ? ((P += R), (x += R + i.bars.barWidth))\n                        : ((C += R), (A += R + i.bars.barWidth));\n                    }\n                    v(i.xaxis, C, A), v(i.yaxis, P, x);\n                  }\n                  e.each(T(), function(e, t) {\n                    t.datamin == f && (t.datamin = null), t.datamax == m && (t.datamax = null);\n                  });\n                })();\n            }\n            function S(e, t) {\n              var n = e[t + \"axis\"];\n              return \"object\" == typeof n && (n = n.n), \"number\" != typeof n && (n = 1), n;\n            }\n            function T() {\n              return e.grep(h.concat(f), function(e) {\n                return e;\n              });\n            }\n            function C(e) {\n              var t,\n                n,\n                a = {};\n              for (t = 0; t < h.length; ++t) (n = h[t]) && n.used && (a[\"x\" + n.n] = n.c2p(e.left));\n              for (t = 0; t < f.length; ++t) (n = f[t]) && n.used && (a[\"y\" + n.n] = n.c2p(e.top));\n              return void 0 !== a.x1 && (a.x = a.x1), void 0 !== a.y1 && (a.y = a.y1), a;\n            }\n            function P(t, n) {\n              return (\n                t[n - 1] ||\n                  (t[n - 1] = {\n                    n: n,\n                    direction: t == h ? \"x\" : \"y\",\n                    options: e.extend(!0, {}, t == h ? s.xaxis : s.yaxis)\n                  }),\n                t[n - 1]\n              );\n            }\n            function A() {\n              L && clearTimeout(L),\n                d.unbind(\"mousemove\", F),\n                d.unbind(\"mouseleave\", O),\n                d.unbind(\"click\", B),\n                y(b.shutdown, [d]);\n            }\n            function x(t) {\n              var n = t.labelWidth,\n                a = t.labelHeight,\n                o = t.options.position,\n                i = \"x\" === t.direction,\n                r = t.options.tickLength,\n                c = s.grid.axisMargin,\n                d = s.grid.labelMargin,\n                u = !0,\n                p = !0,\n                g = !0,\n                v = !1;\n              e.each(i ? h : f, function(e, n) {\n                n &&\n                  (n.show || n.reserveSpace) &&\n                  (n === t ? (v = !0) : n.options.position === o && (v ? (p = !1) : (u = !1)),\n                  v || (g = !1));\n              }),\n                p && (c = 0),\n                null == r && (r = g ? \"full\" : 5),\n                isNaN(+r) || (d += +r),\n                i\n                  ? ((a += d),\n                    \"bottom\" == o\n                      ? ((m.bottom += a + c), (t.box = { top: l.height - m.bottom, height: a }))\n                      : ((t.box = { top: m.top + c, height: a }), (m.top += a + c)))\n                  : ((n += d),\n                    \"left\" == o\n                      ? ((t.box = { left: m.left + c, width: n }), (m.left += n + c))\n                      : ((m.right += n + c), (t.box = { left: l.width - m.right, width: n }))),\n                (t.position = o),\n                (t.tickLength = r),\n                (t.box.padding = d),\n                (t.innermost = u);\n            }\n            function R() {\n              var n,\n                a = T(),\n                o = s.grid.show;\n              for (var i in m) {\n                var c = s.grid.margin || 0;\n                m[i] = \"number\" == typeof c ? c : c[i] || 0;\n              }\n              for (var i in (y(b.processOffset, [m]), m))\n                \"object\" == typeof s.grid.borderWidth\n                  ? (m[i] += o ? s.grid.borderWidth[i] : 0)\n                  : (m[i] += o ? s.grid.borderWidth : 0);\n              if (\n                (e.each(a, function(e, t) {\n                  var n = t.options;\n                  (t.show = null == n.show ? t.used : n.show),\n                    (t.reserveSpace = null == n.reserveSpace ? t.show : n.reserveSpace),\n                    (function(e) {\n                      var t = e.options,\n                        n = +(null != t.min ? t.min : e.datamin),\n                        a = +(null != t.max ? t.max : e.datamax),\n                        o = a - n;\n                      if (0 == o) {\n                        var i = 0 == a ? 1 : 0.01;\n                        null == t.min && (n -= i), (null != t.max && null == t.min) || (a += i);\n                      } else {\n                        var r = t.autoscaleMargin;\n                        null != r &&\n                          (null == t.min &&\n                            (n -= o * r) < 0 &&\n                            null != e.datamin &&\n                            e.datamin >= 0 &&\n                            (n = 0),\n                          null == t.max &&\n                            (a += o * r) > 0 &&\n                            null != e.datamax &&\n                            e.datamax <= 0 &&\n                            (a = 0));\n                      }\n                      (e.min = n), (e.max = a);\n                    })(t);\n                }),\n                o)\n              ) {\n                var d = e.grep(a, function(e) {\n                  return e.show || e.reserveSpace;\n                });\n                for (\n                  e.each(d, function(t, n) {\n                    !(function(t) {\n                      var n,\n                        a = t.options;\n                      n =\n                        \"number\" == typeof a.ticks && a.ticks > 0\n                          ? a.ticks\n                          : 0.3 * Math.sqrt(\"x\" == t.direction ? l.width : l.height);\n                      var o = (t.max - t.min) / n,\n                        i = -Math.floor(Math.log(o) / Math.LN10),\n                        r = a.tickDecimals;\n                      null != r && i > r && (i = r);\n                      var s,\n                        c = Math.pow(10, -i),\n                        d = o / c;\n                      d < 1.5\n                        ? (s = 1)\n                        : d < 3\n                          ? ((s = 2), d > 2.25 && (null == r || i + 1 <= r) && ((s = 2.5), ++i))\n                          : (s = d < 7.5 ? 5 : 10);\n                      (s *= c), null != a.minTickSize && s < a.minTickSize && (s = a.minTickSize);\n                      if (\n                        ((t.delta = o),\n                        (t.tickDecimals = Math.max(0, null != r ? r : i)),\n                        (t.tickSize = a.tickSize || s),\n                        \"time\" == a.mode && !t.tickGenerator)\n                      )\n                        throw new Error(\"Time mode requires the flot.time plugin.\");\n                      t.tickGenerator ||\n                        ((t.tickGenerator = function(e) {\n                          var t,\n                            n = [],\n                            a = (function(e, t) {\n                              return t * Math.floor(e / t);\n                            })(e.min, e.tickSize),\n                            o = 0,\n                            i = Number.NaN;\n                          do {\n                            (t = i), (i = a + o * e.tickSize), n.push(i), ++o;\n                          } while (i < e.max && i != t);\n                          return n;\n                        }),\n                        (t.tickFormatter = function(e, t) {\n                          var n = t.tickDecimals ? Math.pow(10, t.tickDecimals) : 1,\n                            a = \"\" + Math.round(e * n) / n;\n                          if (null != t.tickDecimals) {\n                            var o = a.indexOf(\".\"),\n                              i = -1 == o ? 0 : a.length - o - 1;\n                            if (i < t.tickDecimals)\n                              return (i ? a : a + \".\") + (\"\" + n).substr(1, t.tickDecimals - i);\n                          }\n                          return a;\n                        }));\n                      e.isFunction(a.tickFormatter) &&\n                        (t.tickFormatter = function(e, t) {\n                          return \"\" + a.tickFormatter(e, t);\n                        });\n                      if (null != a.alignTicksWithAxis) {\n                        var u = (\"x\" == t.direction ? h : f)[a.alignTicksWithAxis - 1];\n                        if (u && u.used && u != t) {\n                          var p = t.tickGenerator(t);\n                          if (\n                            (p.length > 0 &&\n                              (null == a.min && (t.min = Math.min(t.min, p[0])),\n                              null == a.max &&\n                                p.length > 1 &&\n                                (t.max = Math.max(t.max, p[p.length - 1]))),\n                            (t.tickGenerator = function(e) {\n                              var t,\n                                n,\n                                a = [];\n                              for (n = 0; n < u.ticks.length; ++n)\n                                (t = (u.ticks[n].v - u.min) / (u.max - u.min)),\n                                  (t = e.min + t * (e.max - e.min)),\n                                  a.push(t);\n                              return a;\n                            }),\n                            !t.mode && null == a.tickDecimals)\n                          ) {\n                            var m = Math.max(0, 1 - Math.floor(Math.log(t.delta) / Math.LN10)),\n                              g = t.tickGenerator(t);\n                            (g.length > 1 && /\\..*0$/.test((g[1] - g[0]).toFixed(m))) ||\n                              (t.tickDecimals = m);\n                          }\n                        }\n                      }\n                    })(n),\n                      (function(t) {\n                        var n,\n                          a,\n                          o = t.options.ticks,\n                          i = [];\n                        null == o || (\"number\" == typeof o && o > 0)\n                          ? (i = t.tickGenerator(t))\n                          : o && (i = e.isFunction(o) ? o(t) : o);\n                        for (t.ticks = [], n = 0; n < i.length; ++n) {\n                          var r = null,\n                            s = i[n];\n                          \"object\" == typeof s\n                            ? ((a = +s[0]), s.length > 1 && (r = s[1]))\n                            : (a = +s),\n                            null == r && (r = t.tickFormatter(a, t)),\n                            isNaN(a) || t.ticks.push({ v: a, label: r });\n                        }\n                      })(n),\n                      (function(e, t) {\n                        e.options.autoscaleMargin &&\n                          t.length > 0 &&\n                          (null == e.options.min && (e.min = Math.min(e.min, t[0].v)),\n                          null == e.options.max &&\n                            t.length > 1 &&\n                            (e.max = Math.max(e.max, t[t.length - 1].v)));\n                      })(n, n.ticks),\n                      (function(e) {\n                        for (\n                          var t = e.options,\n                            n = e.ticks || [],\n                            a = t.labelWidth || 0,\n                            o = t.labelHeight || 0,\n                            i =\n                              a ||\n                              (\"x\" == e.direction ? Math.floor(l.width / (n.length || 1)) : null),\n                            r = e.direction + \"Axis \" + e.direction + e.n + \"Axis\",\n                            s =\n                              \"flot-\" +\n                              e.direction +\n                              \"-axis flot-\" +\n                              e.direction +\n                              e.n +\n                              \"-axis \" +\n                              r,\n                            c = t.font || \"flot-tick-label tickLabel\",\n                            d = 0;\n                          d < n.length;\n                          ++d\n                        ) {\n                          var u = n[d];\n                          if (u.label) {\n                            var p = l.getTextInfo(s, u.label, c, null, i);\n                            (a = Math.max(a, p.width)), (o = Math.max(o, p.height));\n                          }\n                        }\n                        (e.labelWidth = t.labelWidth || a), (e.labelHeight = t.labelHeight || o);\n                      })(n);\n                  }),\n                    n = d.length - 1;\n                  n >= 0;\n                  --n\n                )\n                  x(d[n]);\n                !(function() {\n                  var t,\n                    n = s.grid.minBorderMargin;\n                  if (null == n)\n                    for (n = 0, t = 0; t < r.length; ++t)\n                      n = Math.max(n, 2 * (r[t].points.radius + r[t].points.lineWidth / 2));\n                  var a = { left: n, right: n, top: n, bottom: n };\n                  e.each(T(), function(e, t) {\n                    t.reserveSpace &&\n                      t.ticks &&\n                      t.ticks.length &&\n                      (\"x\" === t.direction\n                        ? ((a.left = Math.max(a.left, t.labelWidth / 2)),\n                          (a.right = Math.max(a.right, t.labelWidth / 2)))\n                        : ((a.bottom = Math.max(a.bottom, t.labelHeight / 2)),\n                          (a.top = Math.max(a.top, t.labelHeight / 2))));\n                  }),\n                    (m.left = Math.ceil(Math.max(a.left, m.left))),\n                    (m.right = Math.ceil(Math.max(a.right, m.right))),\n                    (m.top = Math.ceil(Math.max(a.top, m.top))),\n                    (m.bottom = Math.ceil(Math.max(a.bottom, m.bottom)));\n                })(),\n                  e.each(d, function(e, t) {\n                    !(function(e) {\n                      \"x\" == e.direction\n                        ? ((e.box.left = m.left - e.labelWidth / 2),\n                          (e.box.width = l.width - m.left - m.right + e.labelWidth))\n                        : ((e.box.top = m.top - e.labelHeight / 2),\n                          (e.box.height = l.height - m.bottom - m.top + e.labelHeight));\n                    })(t);\n                  });\n              }\n              (g = l.width - m.left - m.right),\n                (v = l.height - m.bottom - m.top),\n                e.each(a, function(e, t) {\n                  !(function(e) {\n                    function t(e) {\n                      return e;\n                    }\n                    var n,\n                      a,\n                      o = e.options.transform || t,\n                      i = e.options.inverseTransform;\n                    \"x\" == e.direction\n                      ? ((n = e.scale = g / Math.abs(o(e.max) - o(e.min))),\n                        (a = Math.min(o(e.max), o(e.min))))\n                      : ((n = -(n = e.scale = v / Math.abs(o(e.max) - o(e.min)))),\n                        (a = Math.max(o(e.max), o(e.min)))),\n                      (e.p2c =\n                        o == t\n                          ? function(e) {\n                              return (e - a) * n;\n                            }\n                          : function(e) {\n                              return (o(e) - a) * n;\n                            }),\n                      (e.c2p = i\n                        ? function(e) {\n                            return i(a + e / n);\n                          }\n                        : function(e) {\n                            return a + e / n;\n                          });\n                  })(t);\n                }),\n                o &&\n                  e.each(T(), function(e, t) {\n                    var n,\n                      a,\n                      o,\n                      i,\n                      r,\n                      s = t.box,\n                      c = t.direction + \"Axis \" + t.direction + t.n + \"Axis\",\n                      d = \"flot-\" + t.direction + \"-axis flot-\" + t.direction + t.n + \"-axis \" + c,\n                      u = t.options.font || \"flot-tick-label tickLabel\";\n                    if ((l.removeText(d), t.show && 0 != t.ticks.length))\n                      for (var p = 0; p < t.ticks.length; ++p)\n                        !(n = t.ticks[p]).label ||\n                          n.v < t.min ||\n                          n.v > t.max ||\n                          (\"x\" == t.direction\n                            ? ((i = \"center\"),\n                              (a = m.left + t.p2c(n.v)),\n                              \"bottom\" == t.position\n                                ? (o = s.top + s.padding)\n                                : ((o = s.top + s.height - s.padding), (r = \"bottom\")))\n                            : ((r = \"middle\"),\n                              (o = m.top + t.p2c(n.v)),\n                              \"left\" == t.position\n                                ? ((a = s.left + s.width - s.padding), (i = \"right\"))\n                                : (a = s.left + s.padding)),\n                          l.addText(d, a, o, n.label, u, null, null, i, r));\n                  }),\n                (function() {\n                  null != s.legend.container\n                    ? e(s.legend.container).html(\"\")\n                    : t.find(\".legend\").remove();\n                  if (!s.legend.show) return;\n                  for (\n                    var n, a, o = [], i = [], l = !1, c = s.legend.labelFormatter, d = 0;\n                    d < r.length;\n                    ++d\n                  )\n                    (n = r[d]).label &&\n                      (a = c ? c(n.label, n) : n.label) &&\n                      i.push({ label: a, color: n.color });\n                  if (s.legend.sorted)\n                    if (e.isFunction(s.legend.sorted)) i.sort(s.legend.sorted);\n                    else if (\"reverse\" == s.legend.sorted) i.reverse();\n                    else {\n                      var u = \"descending\" != s.legend.sorted;\n                      i.sort(function(e, t) {\n                        return e.label == t.label ? 0 : e.label < t.label != u ? 1 : -1;\n                      });\n                    }\n                  for (var d = 0; d < i.length; ++d) {\n                    var p = i[d];\n                    d % s.legend.noColumns == 0 && (l && o.push(\"</tr>\"), o.push(\"<tr>\"), (l = !0)),\n                      o.push(\n                        '<td class=\"legendColorBox\"><div style=\"border:1px solid ' +\n                          s.legend.labelBoxBorderColor +\n                          ';padding:1px\"><div style=\"width:4px;height:0;border:5px solid ' +\n                          p.color +\n                          ';overflow:hidden\"></div></div></td><td class=\"legendLabel\">' +\n                          p.label +\n                          \"</td>\"\n                      );\n                  }\n                  l && o.push(\"</tr>\");\n                  if (0 == o.length) return;\n                  var h =\n                    '<table style=\"font-size:smaller;color:' +\n                    s.grid.color +\n                    '\">' +\n                    o.join(\"\") +\n                    \"</table>\";\n                  if (null != s.legend.container) e(s.legend.container).html(h);\n                  else {\n                    var f = \"\",\n                      g = s.legend.position,\n                      v = s.legend.margin;\n                    null == v[0] && (v = [v, v]),\n                      \"n\" == g.charAt(0)\n                        ? (f += \"top:\" + (v[1] + m.top) + \"px;\")\n                        : \"s\" == g.charAt(0) && (f += \"bottom:\" + (v[1] + m.bottom) + \"px;\"),\n                      \"e\" == g.charAt(1)\n                        ? (f += \"right:\" + (v[0] + m.right) + \"px;\")\n                        : \"w\" == g.charAt(1) && (f += \"left:\" + (v[0] + m.left) + \"px;\");\n                    var b = e(\n                      '<div class=\"legend\">' +\n                        h.replace('style=\"', 'style=\"position:absolute;' + f + \";\") +\n                        \"</div>\"\n                    ).appendTo(t);\n                    if (0 != s.legend.backgroundOpacity) {\n                      var w = s.legend.backgroundColor;\n                      null == w &&\n                        (((w =\n                          (w = s.grid.backgroundColor) && \"string\" == typeof w\n                            ? e.color.parse(w)\n                            : e.color.extract(b, \"background-color\")).a = 1),\n                        (w = w.toString()));\n                      var y = b.children();\n                      e(\n                        '<div style=\"position:absolute;width:' +\n                          y.width() +\n                          \"px;height:\" +\n                          y.height() +\n                          \"px;\" +\n                          f +\n                          \"background-color:\" +\n                          w +\n                          ';\"> </div>'\n                      )\n                        .prependTo(b)\n                        .css(\"opacity\", s.legend.backgroundOpacity);\n                    }\n                  }\n                })();\n            }\n            function D() {\n              l.clear(), y(b.drawBackground, [u]);\n              var e = s.grid;\n              e.show &&\n                e.backgroundColor &&\n                (u.save(),\n                u.translate(m.left, m.top),\n                (u.fillStyle = G(s.grid.backgroundColor, v, 0, \"rgba(255, 255, 255, 0)\")),\n                u.fillRect(0, 0, g, v),\n                u.restore()),\n                e.show && !e.aboveData && M();\n              for (var t = 0; t < r.length; ++t) y(b.drawSeries, [u, r[t]]), I(r[t]);\n              y(b.draw, [u]), e.show && e.aboveData && M(), l.render(), N();\n            }\n            function $(e, t) {\n              for (var n, a, o, i, r = T(), s = 0; s < r.length; ++s)\n                if (\n                  (n = r[s]).direction == t &&\n                  (e[(i = t + n.n + \"axis\")] || 1 != n.n || (i = t + \"axis\"), e[i])\n                ) {\n                  (a = e[i].from), (o = e[i].to);\n                  break;\n                }\n              if (\n                (e[i] || ((n = \"x\" == t ? h[0] : f[0]), (a = e[t + \"1\"]), (o = e[t + \"2\"])),\n                null != a && null != o && a > o)\n              ) {\n                var l = a;\n                (a = o), (o = l);\n              }\n              return { from: a, to: o, axis: n };\n            }\n            function M() {\n              var t, n, a, o;\n              u.save(), u.translate(m.left, m.top);\n              var i = s.grid.markings;\n              if (i)\n                for (\n                  e.isFunction(i) &&\n                    (((n = w.getAxes()).xmin = n.xaxis.min),\n                    (n.xmax = n.xaxis.max),\n                    (n.ymin = n.yaxis.min),\n                    (n.ymax = n.yaxis.max),\n                    (i = i(n))),\n                    t = 0;\n                  t < i.length;\n                  ++t\n                ) {\n                  var r = i[t],\n                    l = $(r, \"x\"),\n                    c = $(r, \"y\");\n                  if (\n                    (null == l.from && (l.from = l.axis.min),\n                    null == l.to && (l.to = l.axis.max),\n                    null == c.from && (c.from = c.axis.min),\n                    null == c.to && (c.to = c.axis.max),\n                    !(\n                      l.to < l.axis.min ||\n                      l.from > l.axis.max ||\n                      c.to < c.axis.min ||\n                      c.from > c.axis.max\n                    ))\n                  ) {\n                    (l.from = Math.max(l.from, l.axis.min)),\n                      (l.to = Math.min(l.to, l.axis.max)),\n                      (c.from = Math.max(c.from, c.axis.min)),\n                      (c.to = Math.min(c.to, c.axis.max));\n                    var d = l.from === l.to,\n                      p = c.from === c.to;\n                    if (!d || !p)\n                      if (\n                        ((l.from = Math.floor(l.axis.p2c(l.from))),\n                        (l.to = Math.floor(l.axis.p2c(l.to))),\n                        (c.from = Math.floor(c.axis.p2c(c.from))),\n                        (c.to = Math.floor(c.axis.p2c(c.to))),\n                        d || p)\n                      ) {\n                        var h = r.lineWidth || s.grid.markingsLineWidth,\n                          f = h % 2 ? 0.5 : 0;\n                        u.beginPath(),\n                          (u.strokeStyle = r.color || s.grid.markingsColor),\n                          (u.lineWidth = h),\n                          d\n                            ? (u.moveTo(l.to + f, c.from), u.lineTo(l.to + f, c.to))\n                            : (u.moveTo(l.from, c.to + f), u.lineTo(l.to, c.to + f)),\n                          u.stroke();\n                      } else\n                        (u.fillStyle = r.color || s.grid.markingsColor),\n                          u.fillRect(l.from, c.to, l.to - l.from, c.from - c.to);\n                  }\n                }\n              (n = T()), (a = s.grid.borderWidth);\n              for (var b = 0; b < n.length; ++b) {\n                var y,\n                  k,\n                  S,\n                  C,\n                  P = n[b],\n                  A = P.box,\n                  x = P.tickLength;\n                if (P.show && 0 != P.ticks.length) {\n                  for (\n                    u.lineWidth = 1,\n                      \"x\" == P.direction\n                        ? ((y = 0),\n                          (k =\n                            \"full\" == x\n                              ? \"top\" == P.position\n                                ? 0\n                                : v\n                              : A.top - m.top + (\"top\" == P.position ? A.height : 0)))\n                        : ((k = 0),\n                          (y =\n                            \"full\" == x\n                              ? \"left\" == P.position\n                                ? 0\n                                : g\n                              : A.left - m.left + (\"left\" == P.position ? A.width : 0))),\n                      P.innermost ||\n                        ((u.strokeStyle = P.options.color),\n                        u.beginPath(),\n                        (S = C = 0),\n                        \"x\" == P.direction ? (S = g + 1) : (C = v + 1),\n                        1 == u.lineWidth &&\n                          (\"x\" == P.direction\n                            ? (k = Math.floor(k) + 0.5)\n                            : (y = Math.floor(y) + 0.5)),\n                        u.moveTo(y, k),\n                        u.lineTo(y + S, k + C),\n                        u.stroke()),\n                      u.strokeStyle = P.options.tickColor,\n                      u.beginPath(),\n                      t = 0;\n                    t < P.ticks.length;\n                    ++t\n                  ) {\n                    var R = P.ticks[t].v;\n                    (S = C = 0),\n                      isNaN(R) ||\n                        R < P.min ||\n                        R > P.max ||\n                        (\"full\" == x &&\n                          ((\"object\" == typeof a && a[P.position] > 0) || a > 0) &&\n                          (R == P.min || R == P.max)) ||\n                        (\"x\" == P.direction\n                          ? ((y = P.p2c(R)),\n                            (C = \"full\" == x ? -v : x),\n                            \"top\" == P.position && (C = -C))\n                          : ((k = P.p2c(R)),\n                            (S = \"full\" == x ? -g : x),\n                            \"left\" == P.position && (S = -S)),\n                        1 == u.lineWidth &&\n                          (\"x\" == P.direction\n                            ? (y = Math.floor(y) + 0.5)\n                            : (k = Math.floor(k) + 0.5)),\n                        u.moveTo(y, k),\n                        u.lineTo(y + S, k + C));\n                  }\n                  u.stroke();\n                }\n              }\n              a &&\n                ((o = s.grid.borderColor),\n                \"object\" == typeof a || \"object\" == typeof o\n                  ? (\"object\" != typeof a && (a = { top: a, right: a, bottom: a, left: a }),\n                    \"object\" != typeof o && (o = { top: o, right: o, bottom: o, left: o }),\n                    a.top > 0 &&\n                      ((u.strokeStyle = o.top),\n                      (u.lineWidth = a.top),\n                      u.beginPath(),\n                      u.moveTo(0 - a.left, 0 - a.top / 2),\n                      u.lineTo(g, 0 - a.top / 2),\n                      u.stroke()),\n                    a.right > 0 &&\n                      ((u.strokeStyle = o.right),\n                      (u.lineWidth = a.right),\n                      u.beginPath(),\n                      u.moveTo(g + a.right / 2, 0 - a.top),\n                      u.lineTo(g + a.right / 2, v),\n                      u.stroke()),\n                    a.bottom > 0 &&\n                      ((u.strokeStyle = o.bottom),\n                      (u.lineWidth = a.bottom),\n                      u.beginPath(),\n                      u.moveTo(g + a.right, v + a.bottom / 2),\n                      u.lineTo(0, v + a.bottom / 2),\n                      u.stroke()),\n                    a.left > 0 &&\n                      ((u.strokeStyle = o.left),\n                      (u.lineWidth = a.left),\n                      u.beginPath(),\n                      u.moveTo(0 - a.left / 2, v + a.bottom),\n                      u.lineTo(0 - a.left / 2, 0),\n                      u.stroke()))\n                  : ((u.lineWidth = a),\n                    (u.strokeStyle = s.grid.borderColor),\n                    u.strokeRect(-a / 2, -a / 2, g + a, v + a))),\n                u.restore();\n            }\n            function I(e) {\n              e.lines.show &&\n                (function(e) {\n                  function t(e, t, n, a, o) {\n                    var i = e.points,\n                      r = e.pointsize,\n                      s = null,\n                      l = null;\n                    u.beginPath();\n                    for (var c = r; c < i.length; c += r) {\n                      var d = i[c - r],\n                        p = i[c - r + 1],\n                        h = i[c],\n                        f = i[c + 1];\n                      if (null != d && null != h) {\n                        if (p <= f && p < o.min) {\n                          if (f < o.min) continue;\n                          (d = ((o.min - p) / (f - p)) * (h - d) + d), (p = o.min);\n                        } else if (f <= p && f < o.min) {\n                          if (p < o.min) continue;\n                          (h = ((o.min - p) / (f - p)) * (h - d) + d), (f = o.min);\n                        }\n                        if (p >= f && p > o.max) {\n                          if (f > o.max) continue;\n                          (d = ((o.max - p) / (f - p)) * (h - d) + d), (p = o.max);\n                        } else if (f >= p && f > o.max) {\n                          if (p > o.max) continue;\n                          (h = ((o.max - p) / (f - p)) * (h - d) + d), (f = o.max);\n                        }\n                        if (d <= h && d < a.min) {\n                          if (h < a.min) continue;\n                          (p = ((a.min - d) / (h - d)) * (f - p) + p), (d = a.min);\n                        } else if (h <= d && h < a.min) {\n                          if (d < a.min) continue;\n                          (f = ((a.min - d) / (h - d)) * (f - p) + p), (h = a.min);\n                        }\n                        if (d >= h && d > a.max) {\n                          if (h > a.max) continue;\n                          (p = ((a.max - d) / (h - d)) * (f - p) + p), (d = a.max);\n                        } else if (h >= d && h > a.max) {\n                          if (d > a.max) continue;\n                          (f = ((a.max - d) / (h - d)) * (f - p) + p), (h = a.max);\n                        }\n                        (d == s && p == l) || u.moveTo(a.p2c(d) + t, o.p2c(p) + n),\n                          (s = h),\n                          (l = f),\n                          u.lineTo(a.p2c(h) + t, o.p2c(f) + n);\n                      }\n                    }\n                    u.stroke();\n                  }\n                  u.save(), u.translate(m.left, m.top), (u.lineJoin = \"round\");\n                  var n = e.lines.lineWidth,\n                    a = e.shadowSize;\n                  if (n > 0 && a > 0) {\n                    (u.lineWidth = a), (u.strokeStyle = \"rgba(0,0,0,0.1)\");\n                    var o = Math.PI / 18;\n                    t(\n                      e.datapoints,\n                      Math.sin(o) * (n / 2 + a / 2),\n                      Math.cos(o) * (n / 2 + a / 2),\n                      e.xaxis,\n                      e.yaxis\n                    ),\n                      (u.lineWidth = a / 2),\n                      t(\n                        e.datapoints,\n                        Math.sin(o) * (n / 2 + a / 4),\n                        Math.cos(o) * (n / 2 + a / 4),\n                        e.xaxis,\n                        e.yaxis\n                      );\n                  }\n                  (u.lineWidth = n), (u.strokeStyle = e.color);\n                  var i = z(e.lines, e.color, 0, v);\n                  i &&\n                    ((u.fillStyle = i),\n                    (function(e, t, n) {\n                      var a = e.points,\n                        o = e.pointsize,\n                        i = Math.min(Math.max(0, n.min), n.max),\n                        r = 0,\n                        s = !1,\n                        l = 1,\n                        c = 0,\n                        d = 0;\n                      for (; !(o > 0 && r > a.length + o); ) {\n                        var p = a[(r += o) - o],\n                          h = a[r - o + l],\n                          f = a[r],\n                          m = a[r + l];\n                        if (s) {\n                          if (o > 0 && null != p && null == f) {\n                            (d = r), (o = -o), (l = 2);\n                            continue;\n                          }\n                          if (o < 0 && r == c + o) {\n                            u.fill(), (s = !1), (l = 1), (r = c = d + (o = -o));\n                            continue;\n                          }\n                        }\n                        if (null != p && null != f) {\n                          if (p <= f && p < t.min) {\n                            if (f < t.min) continue;\n                            (h = ((t.min - p) / (f - p)) * (m - h) + h), (p = t.min);\n                          } else if (f <= p && f < t.min) {\n                            if (p < t.min) continue;\n                            (m = ((t.min - p) / (f - p)) * (m - h) + h), (f = t.min);\n                          }\n                          if (p >= f && p > t.max) {\n                            if (f > t.max) continue;\n                            (h = ((t.max - p) / (f - p)) * (m - h) + h), (p = t.max);\n                          } else if (f >= p && f > t.max) {\n                            if (p > t.max) continue;\n                            (m = ((t.max - p) / (f - p)) * (m - h) + h), (f = t.max);\n                          }\n                          if (\n                            (s || (u.beginPath(), u.moveTo(t.p2c(p), n.p2c(i)), (s = !0)),\n                            h >= n.max && m >= n.max)\n                          )\n                            u.lineTo(t.p2c(p), n.p2c(n.max)), u.lineTo(t.p2c(f), n.p2c(n.max));\n                          else if (h <= n.min && m <= n.min)\n                            u.lineTo(t.p2c(p), n.p2c(n.min)), u.lineTo(t.p2c(f), n.p2c(n.min));\n                          else {\n                            var g = p,\n                              v = f;\n                            h <= m && h < n.min && m >= n.min\n                              ? ((p = ((n.min - h) / (m - h)) * (f - p) + p), (h = n.min))\n                              : m <= h &&\n                                m < n.min &&\n                                h >= n.min &&\n                                ((f = ((n.min - h) / (m - h)) * (f - p) + p), (m = n.min)),\n                              h >= m && h > n.max && m <= n.max\n                                ? ((p = ((n.max - h) / (m - h)) * (f - p) + p), (h = n.max))\n                                : m >= h &&\n                                  m > n.max &&\n                                  h <= n.max &&\n                                  ((f = ((n.max - h) / (m - h)) * (f - p) + p), (m = n.max)),\n                              p != g && u.lineTo(t.p2c(g), n.p2c(h)),\n                              u.lineTo(t.p2c(p), n.p2c(h)),\n                              u.lineTo(t.p2c(f), n.p2c(m)),\n                              f != v &&\n                                (u.lineTo(t.p2c(f), n.p2c(m)), u.lineTo(t.p2c(v), n.p2c(m)));\n                          }\n                        }\n                      }\n                    })(e.datapoints, e.xaxis, e.yaxis));\n                  n > 0 && t(e.datapoints, 0, 0, e.xaxis, e.yaxis);\n                  u.restore();\n                })(e),\n                e.bars.show &&\n                  (function(e) {\n                    var t;\n                    switch (\n                      (u.save(),\n                      u.translate(m.left, m.top),\n                      (u.lineWidth = e.bars.lineWidth),\n                      (u.strokeStyle = e.color),\n                      e.bars.align)\n                    ) {\n                      case \"left\":\n                        t = 0;\n                        break;\n                      case \"right\":\n                        t = -e.bars.barWidth;\n                        break;\n                      default:\n                        t = -e.bars.barWidth / 2;\n                    }\n                    var n = e.bars.fill\n                      ? function(t, n) {\n                          return z(e.bars, e.color, t, n);\n                        }\n                      : null;\n                    (function(t, n, a, o, i, r) {\n                      for (var s = t.points, l = t.pointsize, c = 0; c < s.length; c += l)\n                        null != s[c] &&\n                          E(\n                            s[c],\n                            s[c + 1],\n                            s[c + 2],\n                            n,\n                            a,\n                            o,\n                            i,\n                            r,\n                            u,\n                            e.bars.horizontal,\n                            e.bars.lineWidth\n                          );\n                    })(e.datapoints, t, t + e.bars.barWidth, n, e.xaxis, e.yaxis),\n                      u.restore();\n                  })(e),\n                e.points.show &&\n                  (function(e) {\n                    function t(e, t, n, a, o, i, r, s) {\n                      for (var l = e.points, c = e.pointsize, d = 0; d < l.length; d += c) {\n                        var p = l[d],\n                          h = l[d + 1];\n                        null == p ||\n                          p < i.min ||\n                          p > i.max ||\n                          h < r.min ||\n                          h > r.max ||\n                          (u.beginPath(),\n                          (p = i.p2c(p)),\n                          (h = r.p2c(h) + a),\n                          \"circle\" == s\n                            ? u.arc(p, h, t, 0, o ? Math.PI : 2 * Math.PI, !1)\n                            : s(u, p, h, t, o),\n                          u.closePath(),\n                          n && ((u.fillStyle = n), u.fill()),\n                          u.stroke());\n                      }\n                    }\n                    u.save(), u.translate(m.left, m.top);\n                    var n = e.points.lineWidth,\n                      a = e.shadowSize,\n                      o = e.points.radius,\n                      i = e.points.symbol;\n                    0 == n && (n = 1e-4);\n                    if (n > 0 && a > 0) {\n                      var r = a / 2;\n                      (u.lineWidth = r),\n                        (u.strokeStyle = \"rgba(0,0,0,0.1)\"),\n                        t(e.datapoints, o, null, r + r / 2, !0, e.xaxis, e.yaxis, i),\n                        (u.strokeStyle = \"rgba(0,0,0,0.2)\"),\n                        t(e.datapoints, o, null, r / 2, !0, e.xaxis, e.yaxis, i);\n                    }\n                    (u.lineWidth = n),\n                      (u.strokeStyle = e.color),\n                      t(e.datapoints, o, z(e.points, e.color), 0, !1, e.xaxis, e.yaxis, i),\n                      u.restore();\n                  })(e);\n            }\n            function E(e, t, n, a, o, i, r, s, l, c, d) {\n              var u, p, h, f, m, g, v, b, w;\n              c\n                ? ((b = g = v = !0),\n                  (m = !1),\n                  (f = t + a),\n                  (h = t + o),\n                  (p = e) < (u = n) && ((w = p), (p = u), (u = w), (m = !0), (g = !1)))\n                : ((m = g = v = !0),\n                  (b = !1),\n                  (u = e + a),\n                  (p = e + o),\n                  (f = t) < (h = n) && ((w = f), (f = h), (h = w), (b = !0), (v = !1))),\n                p < r.min ||\n                  u > r.max ||\n                  f < s.min ||\n                  h > s.max ||\n                  (u < r.min && ((u = r.min), (m = !1)),\n                  p > r.max && ((p = r.max), (g = !1)),\n                  h < s.min && ((h = s.min), (b = !1)),\n                  f > s.max && ((f = s.max), (v = !1)),\n                  (u = r.p2c(u)),\n                  (h = s.p2c(h)),\n                  (p = r.p2c(p)),\n                  (f = s.p2c(f)),\n                  i && ((l.fillStyle = i(h, f)), l.fillRect(u, f, p - u, h - f)),\n                  d > 0 &&\n                    (m || g || v || b) &&\n                    (l.beginPath(),\n                    l.moveTo(u, h),\n                    m ? l.lineTo(u, f) : l.moveTo(u, f),\n                    v ? l.lineTo(p, f) : l.moveTo(p, f),\n                    g ? l.lineTo(p, h) : l.moveTo(p, h),\n                    b ? l.lineTo(u, h) : l.moveTo(u, h),\n                    l.stroke()));\n            }\n            function z(t, n, a, o) {\n              var i = t.fill;\n              if (!i) return null;\n              if (t.fillColor) return G(t.fillColor, a, o, n);\n              var r = e.color.parse(n);\n              return (r.a = \"number\" == typeof i ? i : 0.4), r.normalize(), r.toString();\n            }\n            (w.setData = k),\n              (w.setupGrid = R),\n              (w.draw = D),\n              (w.getPlaceholder = function() {\n                return t;\n              }),\n              (w.getCanvas = function() {\n                return l.element;\n              }),\n              (w.getPlotOffset = function() {\n                return m;\n              }),\n              (w.width = function() {\n                return g;\n              }),\n              (w.height = function() {\n                return v;\n              }),\n              (w.offset = function() {\n                var e = d.offset();\n                return (e.left += m.left), (e.top += m.top), e;\n              }),\n              (w.getData = function() {\n                return r;\n              }),\n              (w.getAxes = function() {\n                var t = {};\n                return (\n                  e.each(h.concat(f), function(e, n) {\n                    n && (t[n.direction + (1 != n.n ? n.n : \"\") + \"axis\"] = n);\n                  }),\n                  t\n                );\n              }),\n              (w.getXAxes = function() {\n                return h;\n              }),\n              (w.getYAxes = function() {\n                return f;\n              }),\n              (w.c2p = C),\n              (w.p2c = function(e) {\n                var t,\n                  n,\n                  a,\n                  o = {};\n                for (t = 0; t < h.length; ++t)\n                  if (\n                    (n = h[t]) &&\n                    n.used &&\n                    ((a = \"x\" + n.n), null == e[a] && 1 == n.n && (a = \"x\"), null != e[a])\n                  ) {\n                    o.left = n.p2c(e[a]);\n                    break;\n                  }\n                for (t = 0; t < f.length; ++t)\n                  if (\n                    (n = f[t]) &&\n                    n.used &&\n                    ((a = \"y\" + n.n), null == e[a] && 1 == n.n && (a = \"y\"), null != e[a])\n                  ) {\n                    o.top = n.p2c(e[a]);\n                    break;\n                  }\n                return o;\n              }),\n              (w.getOptions = function() {\n                return s;\n              }),\n              (w.highlight = W),\n              (w.unhighlight = V),\n              (w.triggerRedrawOverlay = N),\n              (w.pointOffset = function(e) {\n                return {\n                  left: parseInt(h[S(e, \"x\") - 1].p2c(+e.x) + m.left, 10),\n                  top: parseInt(f[S(e, \"y\") - 1].p2c(+e.y) + m.top, 10)\n                };\n              }),\n              (w.shutdown = A),\n              (w.destroy = function() {\n                A(),\n                  t.removeData(\"plot\").empty(),\n                  (r = []),\n                  (s = null),\n                  (l = null),\n                  (c = null),\n                  (d = null),\n                  (u = null),\n                  (p = null),\n                  (h = []),\n                  (f = []),\n                  (b = null),\n                  (U = []),\n                  (w = null);\n              }),\n              (w.resize = function() {\n                var e = t.width(),\n                  n = t.height();\n                l.resize(e, n), c.resize(e, n);\n              }),\n              (w.hooks = b),\n              (function() {\n                for (var t = { Canvas: n }, a = 0; a < i.length; ++a) {\n                  var o = i[a];\n                  o.init(w, t), o.options && e.extend(!0, s, o.options);\n                }\n              })(),\n              (function(n) {\n                e.extend(!0, s, n), n && n.colors && (s.colors = n.colors);\n                null == s.xaxis.color &&\n                  (s.xaxis.color = e.color\n                    .parse(s.grid.color)\n                    .scale(\"a\", 0.22)\n                    .toString());\n                null == s.yaxis.color &&\n                  (s.yaxis.color = e.color\n                    .parse(s.grid.color)\n                    .scale(\"a\", 0.22)\n                    .toString());\n                null == s.xaxis.tickColor &&\n                  (s.xaxis.tickColor = s.grid.tickColor || s.xaxis.color);\n                null == s.yaxis.tickColor &&\n                  (s.yaxis.tickColor = s.grid.tickColor || s.yaxis.color);\n                null == s.grid.borderColor && (s.grid.borderColor = s.grid.color);\n                null == s.grid.tickColor &&\n                  (s.grid.tickColor = e.color\n                    .parse(s.grid.color)\n                    .scale(\"a\", 0.22)\n                    .toString());\n                var a,\n                  o,\n                  i,\n                  r = t.css(\"font-size\"),\n                  l = r ? +r.replace(\"px\", \"\") : 13,\n                  c = {\n                    style: t.css(\"font-style\"),\n                    size: Math.round(0.8 * l),\n                    variant: t.css(\"font-variant\"),\n                    weight: t.css(\"font-weight\"),\n                    family: t.css(\"font-family\")\n                  };\n                for (i = s.xaxes.length || 1, a = 0; a < i; ++a)\n                  (o = s.xaxes[a]) && !o.tickColor && (o.tickColor = o.color),\n                    (o = e.extend(!0, {}, s.xaxis, o)),\n                    (s.xaxes[a] = o),\n                    o.font &&\n                      ((o.font = e.extend({}, c, o.font)),\n                      o.font.color || (o.font.color = o.color),\n                      o.font.lineHeight || (o.font.lineHeight = Math.round(1.15 * o.font.size)));\n                for (i = s.yaxes.length || 1, a = 0; a < i; ++a)\n                  (o = s.yaxes[a]) && !o.tickColor && (o.tickColor = o.color),\n                    (o = e.extend(!0, {}, s.yaxis, o)),\n                    (s.yaxes[a] = o),\n                    o.font &&\n                      ((o.font = e.extend({}, c, o.font)),\n                      o.font.color || (o.font.color = o.color),\n                      o.font.lineHeight || (o.font.lineHeight = Math.round(1.15 * o.font.size)));\n                s.xaxis.noTicks && null == s.xaxis.ticks && (s.xaxis.ticks = s.xaxis.noTicks);\n                s.yaxis.noTicks && null == s.yaxis.ticks && (s.yaxis.ticks = s.yaxis.noTicks);\n                s.x2axis &&\n                  ((s.xaxes[1] = e.extend(!0, {}, s.xaxis, s.x2axis)),\n                  (s.xaxes[1].position = \"top\"),\n                  null == s.x2axis.min && (s.xaxes[1].min = null),\n                  null == s.x2axis.max && (s.xaxes[1].max = null));\n                s.y2axis &&\n                  ((s.yaxes[1] = e.extend(!0, {}, s.yaxis, s.y2axis)),\n                  (s.yaxes[1].position = \"right\"),\n                  null == s.y2axis.min && (s.yaxes[1].min = null),\n                  null == s.y2axis.max && (s.yaxes[1].max = null));\n                s.grid.coloredAreas && (s.grid.markings = s.grid.coloredAreas);\n                s.grid.coloredAreasColor && (s.grid.markingsColor = s.grid.coloredAreasColor);\n                s.lines && e.extend(!0, s.series.lines, s.lines);\n                s.points && e.extend(!0, s.series.points, s.points);\n                s.bars && e.extend(!0, s.series.bars, s.bars);\n                null != s.shadowSize && (s.series.shadowSize = s.shadowSize);\n                null != s.highlightColor && (s.series.highlightColor = s.highlightColor);\n                for (a = 0; a < s.xaxes.length; ++a) P(h, a + 1).options = s.xaxes[a];\n                for (a = 0; a < s.yaxes.length; ++a) P(f, a + 1).options = s.yaxes[a];\n                for (var d in b)\n                  s.hooks[d] && s.hooks[d].length && (b[d] = b[d].concat(s.hooks[d]));\n                y(b.processOptions, [s]);\n              })(o),\n              (function() {\n                t\n                  .css(\"padding\", 0)\n                  .children()\n                  .filter(function() {\n                    return !e(this).hasClass(\"flot-overlay\") && !e(this).hasClass(\"flot-base\");\n                  })\n                  .remove(),\n                  \"static\" == t.css(\"position\") && t.css(\"position\", \"relative\");\n                (l = new n(\"flot-base\", t)),\n                  (c = new n(\"flot-overlay\", t)),\n                  (u = l.context),\n                  (p = c.context),\n                  (d = e(c.element).unbind());\n                var a = t.data(\"plot\");\n                a && (a.shutdown(), c.clear());\n                t.data(\"plot\", w);\n              })(),\n              k(a),\n              R(),\n              D(),\n              (function() {\n                s.grid.hoverable && (d.mousemove(F), d.bind(\"mouseleave\", O));\n                s.grid.clickable && d.click(B);\n                y(b.bindEvents, [d]);\n              })();\n            var U = [],\n              L = null;\n            function F(e) {\n              s.grid.hoverable &&\n                j(\"plothover\", e, function(e) {\n                  return 0 != e.hoverable;\n                });\n            }\n            function O(e) {\n              s.grid.hoverable &&\n                j(\"plothover\", e, function(e) {\n                  return !1;\n                });\n            }\n            function B(e) {\n              j(\"plotclick\", e, function(e) {\n                return 0 != e.clickable;\n              });\n            }\n            function j(e, n, a) {\n              var o = d.offset(),\n                i = n.pageX - o.left - m.left,\n                l = n.pageY - o.top - m.top,\n                c = C({ left: i, top: l });\n              (c.pageX = n.pageX), (c.pageY = n.pageY);\n              var u = (function(e, t, n) {\n                var a,\n                  o,\n                  i,\n                  l = s.grid.mouseActiveRadius,\n                  c = l * l + 1,\n                  d = null;\n                for (a = r.length - 1; a >= 0; --a)\n                  if (n(r[a])) {\n                    var u = r[a],\n                      p = u.xaxis,\n                      h = u.yaxis,\n                      f = u.datapoints.points,\n                      m = p.c2p(e),\n                      g = h.c2p(t),\n                      v = l / p.scale,\n                      b = l / h.scale;\n                    if (\n                      ((i = u.datapoints.pointsize),\n                      p.options.inverseTransform && (v = Number.MAX_VALUE),\n                      h.options.inverseTransform && (b = Number.MAX_VALUE),\n                      u.lines.show || u.points.show)\n                    )\n                      for (o = 0; o < f.length; o += i) {\n                        var w = f[o],\n                          y = f[o + 1];\n                        if (null != w && !(w - m > v || w - m < -v || y - g > b || y - g < -b)) {\n                          var k = Math.abs(p.p2c(w) - e),\n                            S = Math.abs(h.p2c(y) - t),\n                            T = k * k + S * S;\n                          T < c && ((c = T), (d = [a, o / i]));\n                        }\n                      }\n                    if (u.bars.show && !d) {\n                      var C, P;\n                      switch (u.bars.align) {\n                        case \"left\":\n                          C = 0;\n                          break;\n                        case \"right\":\n                          C = -u.bars.barWidth;\n                          break;\n                        default:\n                          C = -u.bars.barWidth / 2;\n                      }\n                      for (P = C + u.bars.barWidth, o = 0; o < f.length; o += i) {\n                        (w = f[o]), (y = f[o + 1]);\n                        var A = f[o + 2];\n                        null != w &&\n                          (r[a].bars.horizontal\n                            ? m <= Math.max(A, w) && m >= Math.min(A, w) && g >= y + C && g <= y + P\n                            : m >= w + C &&\n                              m <= w + P &&\n                              g >= Math.min(A, y) &&\n                              g <= Math.max(A, y)) &&\n                          (d = [a, o / i]);\n                      }\n                    }\n                  }\n                return d\n                  ? ((a = d[0]),\n                    (o = d[1]),\n                    (i = r[a].datapoints.pointsize),\n                    {\n                      datapoint: r[a].datapoints.points.slice(o * i, (o + 1) * i),\n                      dataIndex: o,\n                      series: r[a],\n                      seriesIndex: a\n                    })\n                  : null;\n              })(i, l, a);\n              if (\n                (u &&\n                  ((u.pageX = parseInt(u.series.xaxis.p2c(u.datapoint[0]) + o.left + m.left, 10)),\n                  (u.pageY = parseInt(u.series.yaxis.p2c(u.datapoint[1]) + o.top + m.top, 10))),\n                s.grid.autoHighlight)\n              ) {\n                for (var p = 0; p < U.length; ++p) {\n                  var h = U[p];\n                  h.auto != e ||\n                    (u &&\n                      h.series == u.series &&\n                      h.point[0] == u.datapoint[0] &&\n                      h.point[1] == u.datapoint[1]) ||\n                    V(h.series, h.point);\n                }\n                u && W(u.series, u.datapoint, e);\n              }\n              t.trigger(e, [c, u]);\n            }\n            function N() {\n              var e = s.interaction.redrawOverlayInterval;\n              -1 != e ? L || (L = setTimeout(H, e)) : H();\n            }\n            function H() {\n              var e, t;\n              for (\n                L = null, p.save(), c.clear(), p.translate(m.left, m.top), e = 0;\n                e < U.length;\n                ++e\n              )\n                (t = U[e]).series.bars.show ? _(t.series, t.point) : q(t.series, t.point);\n              p.restore(), y(b.drawOverlay, [p]);\n            }\n            function W(e, t, n) {\n              if ((\"number\" == typeof e && (e = r[e]), \"number\" == typeof t)) {\n                var a = e.datapoints.pointsize;\n                t = e.datapoints.points.slice(a * t, a * (t + 1));\n              }\n              var o = Y(e, t);\n              -1 == o ? (U.push({ series: e, point: t, auto: n }), N()) : n || (U[o].auto = !1);\n            }\n            function V(e, t) {\n              if (null == e && null == t) return (U = []), void N();\n              if ((\"number\" == typeof e && (e = r[e]), \"number\" == typeof t)) {\n                var n = e.datapoints.pointsize;\n                t = e.datapoints.points.slice(n * t, n * (t + 1));\n              }\n              var a = Y(e, t);\n              -1 != a && (U.splice(a, 1), N());\n            }\n            function Y(e, t) {\n              for (var n = 0; n < U.length; ++n) {\n                var a = U[n];\n                if (a.series == e && a.point[0] == t[0] && a.point[1] == t[1]) return n;\n              }\n              return -1;\n            }\n            function q(t, n) {\n              var a = n[0],\n                o = n[1],\n                i = t.xaxis,\n                r = t.yaxis,\n                s =\n                  \"string\" == typeof t.highlightColor\n                    ? t.highlightColor\n                    : e.color\n                        .parse(t.color)\n                        .scale(\"a\", 0.5)\n                        .toString();\n              if (!(a < i.min || a > i.max || o < r.min || o > r.max)) {\n                var l = t.points.radius + t.points.lineWidth / 2;\n                (p.lineWidth = l), (p.strokeStyle = s);\n                var c = 1.5 * l;\n                (a = i.p2c(a)),\n                  (o = r.p2c(o)),\n                  p.beginPath(),\n                  \"circle\" == t.points.symbol\n                    ? p.arc(a, o, c, 0, 2 * Math.PI, !1)\n                    : t.points.symbol(p, a, o, c, !1),\n                  p.closePath(),\n                  p.stroke();\n              }\n            }\n            function _(t, n) {\n              var a,\n                o =\n                  \"string\" == typeof t.highlightColor\n                    ? t.highlightColor\n                    : e.color\n                        .parse(t.color)\n                        .scale(\"a\", 0.5)\n                        .toString(),\n                i = o;\n              switch (t.bars.align) {\n                case \"left\":\n                  a = 0;\n                  break;\n                case \"right\":\n                  a = -t.bars.barWidth;\n                  break;\n                default:\n                  a = -t.bars.barWidth / 2;\n              }\n              (p.lineWidth = t.bars.lineWidth),\n                (p.strokeStyle = o),\n                E(\n                  n[0],\n                  n[1],\n                  n[2] || 0,\n                  a,\n                  a + t.bars.barWidth,\n                  function() {\n                    return i;\n                  },\n                  t.xaxis,\n                  t.yaxis,\n                  p,\n                  t.bars.horizontal,\n                  t.bars.lineWidth\n                );\n            }\n            function G(t, n, a, o) {\n              if (\"string\" == typeof t) return t;\n              for (\n                var i = u.createLinearGradient(0, a, 0, n), r = 0, s = t.colors.length;\n                r < s;\n                ++r\n              ) {\n                var l = t.colors[r];\n                if (\"string\" != typeof l) {\n                  var c = e.color.parse(o);\n                  null != l.brightness && (c = c.scale(\"rgb\", l.brightness)),\n                    null != l.opacity && (c.a *= l.opacity),\n                    (l = c.toString());\n                }\n                i.addColorStop(r / (s - 1), l);\n              }\n              return i;\n            }\n          }\n          e.fn.detach ||\n            (e.fn.detach = function() {\n              return this.each(function() {\n                this.parentNode && this.parentNode.removeChild(this);\n              });\n            }),\n            (n.prototype.resize = function(e, t) {\n              if (e <= 0 || t <= 0)\n                throw new Error(\"Invalid dimensions for plot, width = \" + e + \", height = \" + t);\n              var n = this.element,\n                a = this.context,\n                o = this.pixelRatio;\n              this.width != e && ((n.width = e * o), (n.style.width = e + \"px\"), (this.width = e)),\n                this.height != t &&\n                  ((n.height = t * o), (n.style.height = t + \"px\"), (this.height = t)),\n                a.restore(),\n                a.save(),\n                a.scale(o, o);\n            }),\n            (n.prototype.clear = function() {\n              this.context.clearRect(0, 0, this.width, this.height);\n            }),\n            (n.prototype.render = function() {\n              var e = this._textCache;\n              for (var n in e)\n                if (t.call(e, n)) {\n                  var a = this.getTextLayer(n),\n                    o = e[n];\n                  for (var i in (a.hide(), o))\n                    if (t.call(o, i)) {\n                      var r = o[i];\n                      for (var s in r)\n                        if (t.call(r, s)) {\n                          for (var l, c = r[s].positions, d = 0; (l = c[d]); d++)\n                            l.active\n                              ? l.rendered || (a.append(l.element), (l.rendered = !0))\n                              : (c.splice(d--, 1), l.rendered && l.element.detach());\n                          0 == c.length && delete r[s];\n                        }\n                    }\n                  a.show();\n                }\n            }),\n            (n.prototype.getTextLayer = function(t) {\n              var n = this.text[t];\n              return (\n                null == n &&\n                  (null == this.textContainer &&\n                    (this.textContainer = e(\"<div class='flot-text'></div>\")\n                      .css({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        bottom: 0,\n                        right: 0,\n                        \"font-size\": \"smaller\",\n                        color: \"#545454\"\n                      })\n                      .insertAfter(this.element)),\n                  (n = this.text[t] = e(\"<div></div>\")\n                    .addClass(t)\n                    .css({ position: \"absolute\", top: 0, left: 0, bottom: 0, right: 0 })\n                    .appendTo(this.textContainer))),\n                n\n              );\n            }),\n            (n.prototype.getTextInfo = function(t, n, a, o, i) {\n              var r, s, l, c;\n              if (\n                ((n = \"\" + n),\n                (r =\n                  \"object\" == typeof a\n                    ? a.style +\n                      \" \" +\n                      a.variant +\n                      \" \" +\n                      a.weight +\n                      \" \" +\n                      a.size +\n                      \"px/\" +\n                      a.lineHeight +\n                      \"px \" +\n                      a.family\n                    : a),\n                null == (s = this._textCache[t]) && (s = this._textCache[t] = {}),\n                null == (l = s[r]) && (l = s[r] = {}),\n                null == (c = l[n]))\n              ) {\n                var d = e(\"<div></div>\")\n                  .html(n)\n                  .css({ position: \"absolute\", \"max-width\": i, top: -9999 })\n                  .appendTo(this.getTextLayer(t));\n                \"object\" == typeof a\n                  ? d.css({ font: r, color: a.color })\n                  : \"string\" == typeof a && d.addClass(a),\n                  (c = l[n] = {\n                    width: d.outerWidth(!0),\n                    height: d.outerHeight(!0),\n                    element: d,\n                    positions: []\n                  }),\n                  d.detach();\n              }\n              return c;\n            }),\n            (n.prototype.addText = function(e, t, n, a, o, i, r, s, l) {\n              var c = this.getTextInfo(e, a, o, i, r),\n                d = c.positions;\n              \"center\" == s ? (t -= c.width / 2) : \"right\" == s && (t -= c.width),\n                \"middle\" == l ? (n -= c.height / 2) : \"bottom\" == l && (n -= c.height);\n              for (var u, p = 0; (u = d[p]); p++)\n                if (u.x == t && u.y == n) return void (u.active = !0);\n              (u = {\n                active: !0,\n                rendered: !1,\n                element: d.length ? c.element.clone() : c.element,\n                x: t,\n                y: n\n              }),\n                d.push(u),\n                u.element.css({ top: Math.round(n), left: Math.round(t), \"text-align\": s });\n            }),\n            (n.prototype.removeText = function(e, n, a, o, i, r) {\n              if (null == o) {\n                var s = this._textCache[e];\n                if (null != s)\n                  for (var l in s)\n                    if (t.call(s, l)) {\n                      var c = s[l];\n                      for (var d in c)\n                        if (t.call(c, d))\n                          for (var u = c[d].positions, p = 0; (h = u[p]); p++) h.active = !1;\n                    }\n              } else {\n                var h;\n                for (u = this.getTextInfo(e, o, i, r).positions, p = 0; (h = u[p]); p++)\n                  h.x == n && h.y == a && (h.active = !1);\n              }\n            }),\n            (e.plot = function(t, n, o) {\n              return new a(e(t), n, o, e.plot.plugins);\n            }),\n            (e.plot.version = \"0.8.3\"),\n            (e.plot.plugins = []),\n            (e.fn.plot = function(t, n) {\n              return this.each(function() {\n                e.plot(this, t, n);\n              });\n            });\n        })(e);\n    }.call(this, n(1)));\n  },\n  function(e, t, n) {\n    (function(e) {\n      !(function(e) {\n        function t(e, t) {\n          return t * Math.floor(e / t);\n        }\n        function n(e, t, n, a) {\n          if (\"function\" == typeof e.strftime) return e.strftime(t);\n          var o,\n            i = function(e, t) {\n              return (e = \"\" + e), (t = \"\" + (null == t ? \"0\" : t)), 1 == e.length ? t + e : e;\n            },\n            r = [],\n            s = !1,\n            l = e.getHours(),\n            c = l < 12;\n          null == n &&\n            (n = [\n              \"Jan\",\n              \"Feb\",\n              \"Mar\",\n              \"Apr\",\n              \"May\",\n              \"Jun\",\n              \"Jul\",\n              \"Aug\",\n              \"Sep\",\n              \"Oct\",\n              \"Nov\",\n              \"Dec\"\n            ]),\n            null == a && (a = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]),\n            (o = l > 12 ? l - 12 : 0 == l ? 12 : l);\n          for (var d = 0; d < t.length; ++d) {\n            var u = t.charAt(d);\n            if (s) {\n              switch (u) {\n                case \"a\":\n                  u = \"\" + a[e.getDay()];\n                  break;\n                case \"b\":\n                  u = \"\" + n[e.getMonth()];\n                  break;\n                case \"d\":\n                  u = i(e.getDate());\n                  break;\n                case \"e\":\n                  u = i(e.getDate(), \" \");\n                  break;\n                case \"h\":\n                case \"H\":\n                  u = i(l);\n                  break;\n                case \"I\":\n                  u = i(o);\n                  break;\n                case \"l\":\n                  u = i(o, \" \");\n                  break;\n                case \"m\":\n                  u = i(e.getMonth() + 1);\n                  break;\n                case \"M\":\n                  u = i(e.getMinutes());\n                  break;\n                case \"q\":\n                  u = \"\" + (Math.floor(e.getMonth() / 3) + 1);\n                  break;\n                case \"S\":\n                  u = i(e.getSeconds());\n                  break;\n                case \"y\":\n                  u = i(e.getFullYear() % 100);\n                  break;\n                case \"Y\":\n                  u = \"\" + e.getFullYear();\n                  break;\n                case \"p\":\n                  u = c ? \"am\" : \"pm\";\n                  break;\n                case \"P\":\n                  u = c ? \"AM\" : \"PM\";\n                  break;\n                case \"w\":\n                  u = \"\" + e.getDay();\n              }\n              r.push(u), (s = !1);\n            } else \"%\" == u ? (s = !0) : r.push(u);\n          }\n          return r.join(\"\");\n        }\n        function a(e) {\n          function t(e, t, n, a) {\n            e[t] = function() {\n              return n[a].apply(n, arguments);\n            };\n          }\n          var n = { date: e };\n          void 0 != e.strftime && t(n, \"strftime\", e, \"strftime\"),\n            t(n, \"getTime\", e, \"getTime\"),\n            t(n, \"setTime\", e, \"setTime\");\n          for (\n            var a = [\n                \"Date\",\n                \"Day\",\n                \"FullYear\",\n                \"Hours\",\n                \"Milliseconds\",\n                \"Minutes\",\n                \"Month\",\n                \"Seconds\"\n              ],\n              o = 0;\n            o < a.length;\n            o++\n          )\n            t(n, \"get\" + a[o], e, \"getUTC\" + a[o]), t(n, \"set\" + a[o], e, \"setUTC\" + a[o]);\n          return n;\n        }\n        function o(e, t) {\n          if (\"browser\" == t.timezone) return new Date(e);\n          if (t.timezone && \"utc\" != t.timezone) {\n            if (\"undefined\" != typeof timezoneJS && void 0 !== timezoneJS.Date) {\n              var n = new timezoneJS.Date();\n              return n.setTimezone(t.timezone), n.setTime(e), n;\n            }\n            return a(new Date(e));\n          }\n          return a(new Date(e));\n        }\n        var i = {\n            second: 1e3,\n            minute: 6e4,\n            hour: 36e5,\n            day: 864e5,\n            month: 2592e6,\n            quarter: 7776e6,\n            year: 525949.2 * 60 * 1e3\n          },\n          r = [\n            [1, \"second\"],\n            [2, \"second\"],\n            [5, \"second\"],\n            [10, \"second\"],\n            [30, \"second\"],\n            [1, \"minute\"],\n            [2, \"minute\"],\n            [5, \"minute\"],\n            [10, \"minute\"],\n            [30, \"minute\"],\n            [1, \"hour\"],\n            [2, \"hour\"],\n            [4, \"hour\"],\n            [8, \"hour\"],\n            [12, \"hour\"],\n            [1, \"day\"],\n            [2, \"day\"],\n            [3, \"day\"],\n            [0.25, \"month\"],\n            [0.5, \"month\"],\n            [1, \"month\"],\n            [2, \"month\"]\n          ],\n          s = r.concat([[3, \"month\"], [6, \"month\"], [1, \"year\"]]),\n          l = r.concat([[1, \"quarter\"], [2, \"quarter\"], [1, \"year\"]]);\n        e.plot.plugins.push({\n          init: function(a) {\n            a.hooks.processOptions.push(function(a, r) {\n              e.each(a.getAxes(), function(e, a) {\n                var r = a.options;\n                \"time\" == r.mode &&\n                  ((a.tickGenerator = function(e) {\n                    var n = [],\n                      a = o(e.min, r),\n                      c = 0,\n                      d =\n                        (r.tickSize && \"quarter\" === r.tickSize[1]) ||\n                        (r.minTickSize && \"quarter\" === r.minTickSize[1])\n                          ? l\n                          : s;\n                    null != r.minTickSize &&\n                      (c =\n                        \"number\" == typeof r.tickSize\n                          ? r.tickSize\n                          : r.minTickSize[0] * i[r.minTickSize[1]]);\n                    for (\n                      var u = 0;\n                      u < d.length - 1 &&\n                      !(\n                        e.delta < (d[u][0] * i[d[u][1]] + d[u + 1][0] * i[d[u + 1][1]]) / 2 &&\n                        d[u][0] * i[d[u][1]] >= c\n                      );\n                      ++u\n                    );\n                    var p = d[u][0],\n                      h = d[u][1];\n                    if (\"year\" == h) {\n                      if (null != r.minTickSize && \"year\" == r.minTickSize[1])\n                        p = Math.floor(r.minTickSize[0]);\n                      else {\n                        var f = Math.pow(10, Math.floor(Math.log(e.delta / i.year) / Math.LN10)),\n                          m = e.delta / i.year / f;\n                        (p = m < 1.5 ? 1 : m < 3 ? 2 : m < 7.5 ? 5 : 10), (p *= f);\n                      }\n                      p < 1 && (p = 1);\n                    }\n                    e.tickSize = r.tickSize || [p, h];\n                    var g = e.tickSize[0];\n                    h = e.tickSize[1];\n                    var v = g * i[h];\n                    \"second\" == h\n                      ? a.setSeconds(t(a.getSeconds(), g))\n                      : \"minute\" == h\n                        ? a.setMinutes(t(a.getMinutes(), g))\n                        : \"hour\" == h\n                          ? a.setHours(t(a.getHours(), g))\n                          : \"month\" == h\n                            ? a.setMonth(t(a.getMonth(), g))\n                            : \"quarter\" == h\n                              ? a.setMonth(3 * t(a.getMonth() / 3, g))\n                              : \"year\" == h && a.setFullYear(t(a.getFullYear(), g)),\n                      a.setMilliseconds(0),\n                      v >= i.minute && a.setSeconds(0),\n                      v >= i.hour && a.setMinutes(0),\n                      v >= i.day && a.setHours(0),\n                      v >= 4 * i.day && a.setDate(1),\n                      v >= 2 * i.month && a.setMonth(t(a.getMonth(), 3)),\n                      v >= 2 * i.quarter && a.setMonth(t(a.getMonth(), 6)),\n                      v >= i.year && a.setMonth(0);\n                    var b,\n                      w = 0,\n                      y = Number.NaN;\n                    do {\n                      if (((b = y), (y = a.getTime()), n.push(y), \"month\" == h || \"quarter\" == h))\n                        if (g < 1) {\n                          a.setDate(1);\n                          var k = a.getTime();\n                          a.setMonth(a.getMonth() + (\"quarter\" == h ? 3 : 1));\n                          var S = a.getTime();\n                          a.setTime(y + w * i.hour + (S - k) * g),\n                            (w = a.getHours()),\n                            a.setHours(0);\n                        } else a.setMonth(a.getMonth() + g * (\"quarter\" == h ? 3 : 1));\n                      else \"year\" == h ? a.setFullYear(a.getFullYear() + g) : a.setTime(y + v);\n                    } while (y < e.max && y != b);\n                    return n;\n                  }),\n                  (a.tickFormatter = function(e, t) {\n                    var a = o(e, t.options);\n                    if (null != r.timeformat) return n(a, r.timeformat, r.monthNames, r.dayNames);\n                    var s =\n                        (t.options.tickSize && \"quarter\" == t.options.tickSize[1]) ||\n                        (t.options.minTickSize && \"quarter\" == t.options.minTickSize[1]),\n                      l = t.tickSize[0] * i[t.tickSize[1]],\n                      c = t.max - t.min,\n                      d = r.twelveHourClock ? \" %p\" : \"\",\n                      u = r.twelveHourClock ? \"%I\" : \"%H\";\n                    return n(\n                      a,\n                      l < i.minute\n                        ? u + \":%M:%S\" + d\n                        : l < i.day\n                          ? c < 2 * i.day\n                            ? u + \":%M\" + d\n                            : \"%b %d \" + u + \":%M\" + d\n                          : l < i.month\n                            ? \"%b %d\"\n                            : (s && l < i.quarter) || (!s && l < i.year)\n                              ? c < i.year\n                                ? \"%b\"\n                                : \"%b %Y\"\n                              : s && l < i.year\n                                ? c < i.year\n                                  ? \"Q%q\"\n                                  : \"Q%q %Y\"\n                                : \"%Y\",\n                      r.monthNames,\n                      r.dayNames\n                    );\n                  }));\n              });\n            });\n          },\n          options: {\n            xaxis: { timezone: null, timeformat: null, twelveHourClock: !1, monthNames: null }\n          },\n          name: \"time\",\n          version: \"1.0\"\n        }),\n          (e.plot.formatDate = n),\n          (e.plot.dateGenerator = o);\n      })(e);\n    }.call(this, n(1)));\n  },\n  function(e, t, n) {},\n  ,\n  ,\n  ,\n  function(e, t) {\n    \"undefined\" == typeof translations && (translations = {}),\n      (translations.nl_NL = {\n        Search: \"Zoeken\",\n        Add: \"Toevoegen\",\n        \"By URIs\": \"met URI\",\n        \"By Torrents\": \"met Torrents\",\n        \"By Metalinks\": \"met Metalinks\",\n        Manage: \"Beheren\",\n        \"Pause All\": \"Alles pauzeren\",\n        \"Resume Paused\": \"Hervatten\",\n        \"Purge Completed\": \"Verwijder de voleindigden\",\n        Settings: \"Instellingen\",\n        \"Connection Settings\": \"Verbindingsinstellingen\",\n        \"Global Settings\": \"Globale instellingen\",\n        \"Server info\": \"Informatie over de server\",\n        \"About and contribute\": \"Over het project en bijdragen\",\n        \"Toggle navigation\": \"Navigatie omschakelen\",\n        Language: \"Taal\",\n        Miscellaneous: \"Overig\",\n        \"Global Statistics\": \"Globale statistieken\",\n        About: \"Over het project\",\n        Displaying: \" \",\n        of: \"van\",\n        downloads: \"downloads weergegeven\",\n        \"Download Filters\": \"Download filters\",\n        Running: \"Bezig\",\n        Active: \"Actief\",\n        Waiting: \"Wachtend\",\n        Complete: \"Voleindigd\",\n        Error: \"Foutief\",\n        Paused: \"Gepauzeerd\",\n        Removed: \"Verwijderd\",\n        \"Hide linked meta-data\": \"Gekoppelde metadata verbergen\",\n        Toggle: \"Omschakelen\",\n        \"Reset filters\": \"Filters terugzetten\",\n        \"Quick Access Settings\": \"Snelle-toegang instellingen\",\n        \"Save settings\": \"Instellingen opslaan\",\n        \"Currently no download in line to display, use the\":\n          \"Momenteel geen downloads weer te geven, gebruik de \",\n        \"download button to start downloading files!\": \"knop om bestanden te gaan downloaden!\",\n        Peers: \"Peers\",\n        \"More Info\": \"Meer informatie\",\n        Remove: \"Verwijderen\",\n        \"# of\": \"Aantal\",\n        Length: \"Lengte\",\n        \"Add Downloads By URIs\": \"Downloads toevoegen met URI\",\n        \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n          \"- Je kunt meerdere downloads (bestanden) tezelfdertijd toevoegen door de URIs voor elk bestand op een aparte regel te zetten.\",\n        \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n          \"- Je kunt ook meerdere URIs (mirrors) voor *hetzelfde* bestand toevoegen. Scheidt hiervoor de URIs met een spatie.\",\n        \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\":\n          \"- Een URI kan HTTP(S)/FTP/BitTorrent-Magnet zijn.\",\n        \"Download settings\": \"Download instellingen\",\n        \"Advanced settings\": \"Geavanceerde instellingen\",\n        Cancel: \"Annuleren\",\n        Start: \"Starten\",\n        Choose: \"Kiezen\",\n        \"Quick Access (shown on the main page)\": \"Snelle toegang (op de hoofdpagina)\",\n        \"Add Downloads By Torrents\": \"Downloads toevoegen met torrents\",\n        \"- Select the torrent from the local filesystem to start the download.\":\n          \"- Selecteer de torrent van het locale bestandssysteem om de download te starten.\",\n        \"- You can select multiple torrents to start multiple downloads.\":\n          \"- Je kunt meerdere torrents selecteren voor meerdere downloads.\",\n        \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n          \"- Om een BitTorrent-Magnet URL toe te voegen, gebruik de Toevoegen met URI optie, en voeg het daar toe.\",\n        \"Select Torrents\": \"Selecteer torrents\",\n        \"Select a Torrent\": \"Selecteer een torrent\",\n        \"Add Downloads By Metalinks\": \"Download toevoegen met Metalinks\",\n        \"Select Metalinks\": \"Selecteer Metalinks\",\n        \"- Select the Metalink from the local filesystem to start the download.\":\n          \"- Selecteer de Metalink van het locale bestandssysteem om de download te starten.\",\n        \"- You can select multiple Metalinks to start multiple downloads.\":\n          \"- Selecter meerdere Metalinks om meerdere downloads te starten.\",\n        \"Select a Metalink\": \"Selecteer een Metalink\",\n        \"Choose files to start download for\":\n          \"Bestanden kiezen waarvoor het downloaden beginnen moet\",\n        \"Select to download\": \"Selecteer om te downloaden\",\n        \"Aria2 RPC host and port\": \"Aria2 RPC server en poort\",\n        \"Enter the host\": \"Server invoeren\",\n        \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n          \"Voer de IP of DNS naam van de server waarop de RPC van Aria2 loopt (standaard: localhost)\",\n        \"Enter the port\": \"Poort invoeren\",\n        \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n          \"Invoeren van de serverpoort waarop de RPC van Aria2 loopt (standaard: 6800)\",\n        \"Enter the RPC path\": \"Invoeren van het RPC pad\",\n        \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n          \"Invoeren van het eindpunt van het Aria2 RPC pad (standaard: /jsonrpc)\",\n        \"SSL/TLS encryption\": \"SSL/TLS versleuteling\",\n        \"Enable SSL/TLS encryption\": \"SSL/TLS versleuteling inschakelen\",\n        \"Enter the secret token (optional)\": \"Invoeren van het wachtwoord (facultatief)\",\n        \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n          \"Invoeren van het Aria2 RPC wachtwoord (niet invullen als authenticatie niet is ingeschakeld)\",\n        \"Enter the username (optional)\": \"Invoeren van de gebruikersnaam (facultatief)\",\n        \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n          \"Invoeren van de Aria2 RPC gebruikersnaam (niet invullen als authenticatie niet is ingeschakeld)\",\n        \"Enter the password (optional)\": \"Invoeren van het wachtwoord (facultatief)\",\n        \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n          \"Invoeren van het Aria2 RPC wachtwoord (niet invullen als authenticatie niet is ingeschakeld)\",\n        \"Enter base URL (optional)\": \"Invoeren van de basis URL (facultatief)\",\n        \"Direct Download\": \"Direct downloaden\",\n        \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n          \"Als ingevoerd dan worden links aangemaakt die het direct downloaden van de Aria2 server toestaan.\",\n        \"(Requires appropriate webserver to be configurured.)\":\n          \"Hiervoor moet een geschikte webserver worden ingericht.)\",\n        \"Save Connection configuration\": \"Verbindingsconfiguratie opslaan\",\n        Filter: \"Filter\",\n        \"Aria2 server info\": \"Aria2 server informatie\",\n        \"Aria2 Version\": \"Aria2 versie\",\n        \"Features Enabled\": \"Geactiveerde kenmerken\",\n        \"To download the latest version of the project, add issues or to contribute back, head on to\":\n          \"Om de nieuwste versie van het project te downloaden, problemen te rapporteren of bij te dragen, ga naar\",\n        \"Or you can open the latest version in the browser through\":\n          \"Of je kunt hier de nieuwste versie in je browser openen\",\n        Close: \"Afsluiten\"\n      });\n  },\n  function(e, t) {\n    \"undefined\" == typeof translations && (translations = {}),\n      (translations.en_US = {\n        Search: \"Search\",\n        Add: \"Add\",\n        \"By URIs\": \"By URIs\",\n        \"By Torrents\": \"By Torrents\",\n        \"By Metalinks\": \"By Metalinks\",\n        Manage: \"Manage\",\n        \"Pause All\": \"Pause All\",\n        \"Resume Paused\": \"Resume Paused\",\n        \"Purge Completed\": \"Purge Completed\",\n        Settings: \"Settings\",\n        \"Connection Settings\": \"Connection Settings\",\n        \"Global Settings\": \"Global Settings\",\n        \"Server info\": \"Server info\",\n        \"About and contribute\": \"About and contribute\",\n        \"Toggle navigation\": \"Toggle navigation\",\n        Miscellaneous: \"Miscellaneous\",\n        \"Global Statistics\": \"Global Statistics\",\n        About: \"About\",\n        Displaying: \"Displaying\",\n        of: \"of\",\n        downloads: \"downloads\",\n        Language: \"Language\",\n        \"Download Filters\": \"Download Filters\",\n        Running: \"Running\",\n        Active: \"Active\",\n        Waiting: \"Waiting\",\n        Complete: \"Complete\",\n        Error: \"Error\",\n        Paused: \"Paused\",\n        Removed: \"Removed\",\n        \"Hide linked meta-data\": \"Hide linked meta-data\",\n        Toggle: \"Toggle\",\n        \"Reset filters\": \"Reset filters\",\n        Verifying: \"Verifying\",\n        \"Verify Pending\": \"Verify Pending\",\n        \"Quick Access Settings\": \"Quick Access Settings\",\n        Save: \"Save\",\n        \"Save settings\": \"Save settings\",\n        \"Currently no download in line to display, use the\":\n          \"Currently no download in line to display, use the\",\n        \"download button to start downloading files!\":\n          \"download button to start downloading files!\",\n        Peers: \"Peers\",\n        \"More Info\": \"More Info\",\n        Remove: \"Remove\",\n        \"# of\": \"# of\",\n        Length: \"Length\",\n        \"Add Downloads By URIs\": \"Add Downloads By URIs\",\n        \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n          \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\",\n        \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n          \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\",\n        \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\":\n          \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\",\n        \"Download settings\": \"Download settings\",\n        \"Advanced settings\": \"Advanced settings\",\n        Cancel: \"Cancel\",\n        Start: \"Start\",\n        Choose: \"Choose\",\n        \"Quick Access (shown on the main page)\": \"Quick Access (shown on the main page)\",\n        \"Add Downloads By Torrents\": \"Add Downloads By Torrents\",\n        \"- Select the torrent from the local filesystem to start the download.\":\n          \"- Select the torrent from the local filesystem to start the download.\",\n        \"- You can select multiple torrents to start multiple downloads.\":\n          \"- You can select multiple torrents to start multiple downloads.\",\n        \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n          \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\",\n        \"Select Torrents\": \"Select Torrents\",\n        \"Select a Torrent\": \"Select a Torrent\",\n        \"Add Downloads By Metalinks\": \"Add Downloads By Metalinks\",\n        \"Select Metalinks\": \"Select Metalinks\",\n        \"- Select the Metalink from the local filesystem to start the download.\":\n          \"- Select the Metalink from the local filesystem to start the download.\",\n        \"- You can select multiple Metalinks to start multiple downloads.\":\n          \"- You can select multiple Metalinks to start multiple downloads.\",\n        \"Select a Metalink\": \"Select a Metalink\",\n        \"Choose files to start download for\": \"Choose files to start download for\",\n        \"Select to download\": \"Select to download\",\n        \"Aria2 RPC host and port\": \"Aria2 RPC host and port\",\n        \"Enter the host\": \"Enter the host\",\n        \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n          \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\",\n        \"Enter the port\": \"Enter the port\",\n        \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n          \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\",\n        \"Enter the RPC path\": \"Enter the RPC path\",\n        \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n          \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\",\n        \"SSL/TLS encryption\": \"SSL/TLS encryption\",\n        \"Enable SSL/TLS encryption\": \"Enable SSL/TLS encryption\",\n        \"Enter the secret token (optional)\": \"Enter the secret token (optional)\",\n        \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n          \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\",\n        \"Enter the username (optional)\": \"Enter the username (optional)\",\n        \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n          \"Enter the Aria2 RPC username (empty if authentication not enabled)\",\n        \"Enter the password (optional)\": \"Enter the password (optional)\",\n        \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n          \"Enter the Aria2 RPC password (empty if authentication not enabled)\",\n        \"Enter base URL (optional)\": \"Enter base URL (optional)\",\n        \"Direct Download\": \"Direct Download\",\n        \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n          \"If supplied, links will be created to enable direct download from the Aria2 server.\",\n        \"(Requires appropriate webserver to be configured.)\":\n          \"(Requires appropriate webserver to be configured.)\",\n        \"Save Connection configuration\": \"Save Connection configuration\",\n        Filter: \"Filter\",\n        \"Aria2 server info\": \"Aria2 server info\",\n        \"Aria2 Version\": \"Aria2 Version\",\n        \"Features Enabled\": \"Features Enabled\",\n        \"To download the latest version of the project, add issues or to contribute back, head on to\":\n          \"To download the latest version of the project, add issues or to contribute back, head on to\",\n        \"Or you can open the latest version in the browser through\":\n          \"Or you can open the latest version in the browser through\",\n        Close: \"Close\",\n        \"Download status\": \"Download status\",\n        \"Download Speed\": \"Download Speed\",\n        \"Upload Speed\": \"Upload Speed\",\n        \"Estimated time\": \"Estimated time\",\n        \"Download Size\": \"Download Size\",\n        Downloaded: \"Downloaded\",\n        Progress: \"Progress\",\n        \"Download Path\": \"Download Path\",\n        Uploaded: \"Uploaded\",\n        \"Download GID\": \"Download GID\",\n        \"Number of Pieces\": \"Number of Pieces\",\n        \"Piece Length\": \"Piece Length\",\n        \"Shutdown Server\": \"Shutdown Server\",\n        \"The last connection attempt was unsuccessful. Trying another configuration\":\n          \"The last connection attempt was unsuccessful. Trying another configuration\",\n        \"Oh Snap!\": \"Oh Snap!\",\n        \"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\":\n          \"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\",\n        \"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\":\n          \"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\",\n        \"Successfully connected to Aria2 through its remote RPC …\":\n          \"Successfully connected to Aria2 through its remote RPC …\",\n        \"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)\":\n          \"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)\",\n        \"Trying to connect to aria2 using the new connection configuration\":\n          \"Trying to connect to aria2 using the new connection configuration\",\n        \"Remove {{name}} and associated meta-data?\": \"Remove {{name}} and associated meta-data?\"\n      });\n  },\n  function(e, t) {\n    \"undefined\" == typeof translations && (translations = {}),\n      (translations.th_TH = {\n        Search: \"ค้นหา\",\n        Add: \"เพื่ม\",\n        \"By URIs\": \"ด้วยยูอาร์ไอ\",\n        \"By Torrents\": \"ด้วยทอร์เรนต์\",\n        \"By Metalinks\": \"ด้วยเมทาลิงค์\",\n        Manage: \"บริหาร\",\n        \"Pause All\": \"หยุดชั่วคราวหมด\",\n        \"Resume Paused\": \"ไปต่อหมด\",\n        \"Purge Completed\": \"ลบอันเสร็จ\",\n        Settings: \"ตั้งค่า\",\n        \"Connection Settings\": \"ตั้งค่าเชื่อมต่อ\",\n        \"Global Settings\": \"ตั้งค่าทั่วไป\",\n        \"Server info\": \"ข้อมูลเซอร์เวอร์\",\n        \"About and contribute\": \"เกี่ยวกับและช่วย\",\n        \"Toggle navigation\": \"สลับนำทาง\",\n        Language: \"ภาษา\",\n        Miscellaneous: \"เบ็ดเตล็ด\",\n        \"Global Statistics\": \"สถิติทั่วไป\",\n        About: \"เกี่ยวกับ\",\n        Displaying: \"แแสดงดาวน์โหลด\",\n        of: \"อันใน\",\n        downloads: \"อันทั้งหมด\",\n        \"Download Filters\": \"กรองดาวน์โหลด\",\n        Running: \"กำลังทำงาน\",\n        Active: \"ใช้งานอยู่\",\n        Waiting: \"กำลังรอ\",\n        Complete: \"เสร็จ\",\n        Error: \"ผิดพลาด\",\n        Paused: \"หยุดอยู่\",\n        Removed: \"ลบแล้ว\",\n        \"Hide linked meta-data\": \"ซ่อนข้อมูลเมตาที่เชื่อมโยง\",\n        Toggle: \"สลับ\",\n        \"Reset filters\": \"รีเซตตัวกรอง\",\n        \"Quick Access Settings\": \"ตั้งค่าอย่างรวดเร็ว\",\n        \"Save settings\": \"บันทึกการตั้งค่า\",\n        \"Currently no download in line to display, use the\":\n          \"ตอนนี้ไม่มีการดาวน์โหลดที่แสดงได้ ก็ใช้ปุ่ม\",\n        \"download button to start downloading files!\": \"ให้เริ่มดาวน์โหลดไฟล์\",\n        Peers: \"พีร์ส\",\n        \"More Info\": \"ข้อมูลเพิ่ม\",\n        Remove: \"ลบ\",\n        \"# of\": \"จำนวน\",\n        Length: \"ความยาว\",\n        \"Add Downloads By URIs\": \"เพิ่มดาวน์โหลดด้วยยูอาร์ไอ\",\n        \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n          \"\",\n        \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n          \"\",\n        \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\": \"\",\n        \"Download settings\": \"ตั้งค่าการดาวน์โหลด\",\n        \"Advanced settings\": \"ตั้งค่าขั้นสูง\",\n        Cancel: \"ยกเลิก\",\n        Start: \"เริ่มต้น\",\n        Choose: \"เลือก\",\n        \"Quick Access (shown on the main page)\": \"ใช้งานอย่างรวดเร็ว (แสดงที่เพจหลัก)\",\n        \"Add Downloads By Torrents\": \"เพิ่มดาวน์โหลดด้วยทอร์เรนต์\",\n        \"- Select the torrent from the local filesystem to start the download.\": \"\",\n        \"- You can select multiple torrents to start multiple downloads.\": \"\",\n        \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\": \"\",\n        \"Select Torrents\": \"เลือกทอร์เรนต์\",\n        \"Select a Torrent\": \"เลือกทอร์เรนต์\",\n        \"Add Downloads By Metalinks\": \"เพิ่มดาวน์โหลดด้วยเมทาลิงค์\",\n        \"Select Metalinks\": \"เลือกเมทาลิงค์\",\n        \"- Select the Metalink from the local filesystem to start the download.\": \"\",\n        \"- You can select multiple Metalinks to start multiple downloads.\": \"\",\n        \"Select a Metalink\": \"เลือกเมทาลิงค์\",\n        \"Choose files to start download for\": \"เลือกไฟล์ที่จะเริ่มดาวน์โหลด\",\n        \"Select to download\": \"เลือกให้ดาวน์โหลด\",\n        \"Aria2 RPC host and port\": \"โฮสต์และพอร์ตของ Aria2 RPC\",\n        \"Enter the host\": \"ป้อนโฮสต์\",\n        \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n          \"\",\n        \"Enter the port\": \"ป้อนพอร์ต\",\n        \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\": \"\",\n        \"Enter the RPC path\": \"ป้อนเส้นทาง RPC\",\n        \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\": \"\",\n        \"SSL/TLS encryption\": \"การเข้ารหัสลับ SSL/TLS\",\n        \"Enable SSL/TLS encryption\": \"เปิดใช้การเข้ารหัสลับ SSL/TLS\",\n        \"Enter the secret token (optional)\": \"ป้อนสัญลักษณ์ความลับ (เป็นตัวเลือก)\",\n        \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\": \"\",\n        \"Enter the username (optional)\": \"ป้อนเชื่อ (เป็นตัวเลือก)\",\n        \"Enter the Aria2 RPC username (empty if authentication not enabled)\": \"\",\n        \"Enter the password (optional)\": \"ป้อนรหัสผ่าน (เป็นตัวเลือก)\",\n        \"Enter the Aria2 RPC password (empty if authentication not enabled)\": \"\",\n        \"Enter base URL (optional)\": \"ป้อน URL หลัก (เป็นตัวเลือก)\",\n        \"Direct Download\": \"ดาวน์โหลดโดยตรง\",\n        \"If supplied, links will be created to enable direct download from the Aria2 server.\": \"\",\n        \"(Requires appropriate webserver to be configured.)\": \"\",\n        \"Save Connection configuration\": \"บันทึกการตั้งค่าการเชื่อมต่อ\",\n        Filter: \"กรอง\",\n        \"Aria2 server info\": \"ข้อมูลเซอร์เวอร์ Aria2\",\n        \"Aria2 Version\": \"รุ่น Aria2\",\n        \"Features Enabled\": \"คุณสมบัติที่เปิดใช้งาน\",\n        \"To download the latest version of the project, add issues or to contribute back, head on to\":\n          \"ให้ดาวน์โหลดรุ่นสุดท้ายของโครงการ เพิ่มปัญหา หรือช่วยเหลือมีส่วนร่วม ไปสู่\",\n        \"Or you can open the latest version in the browser through\":\n          \"หรือเปิดรุ่นสุดท้ายในเบราว์เซอร์โดยใช้\",\n        Close: \"ปิด\"\n      });\n  },\n  function(e, t) {\n    \"undefined\" == typeof translations && (translations = {}),\n      (translations.zh_CN = {\n        Search: \"搜索\",\n        Add: \"添加\",\n        \"By URIs\": \"使用链接\",\n        \"By Torrents\": \"使用种子\",\n        \"By Metalinks\": \"使用 Metalink\",\n        Manage: \"管理\",\n        \"Pause All\": \"暂停所有\",\n        \"Resume Paused\": \"恢复下载\",\n        \"Purge Completed\": \"清除已完成\",\n        \"Shutdown Server\": \"关闭服务器\",\n        Settings: \"设置\",\n        \"Connection Settings\": \"连接设置\",\n        \"Global Settings\": \"全局设置\",\n        \"Server info\": \"服务器信息\",\n        \"About and contribute\": \"关于和捐助\",\n        \"Toggle navigation\": \"切换导航\",\n        Miscellaneous: \"杂项\",\n        \"Global Statistics\": \"全局统计\",\n        About: \"关于\",\n        Displaying: \"正在显示\",\n        of: \"/\",\n        downloads: \"下载\",\n        Language: \"语言\",\n        \"Download Filters\": \"下载过滤器\",\n        Running: \"运行中\",\n        Active: \"活动的\",\n        Waiting: \"等待中\",\n        Complete: \"已完成\",\n        Error: \"出错的\",\n        Paused: \"已暂停\",\n        Removed: \"已删除\",\n        \"Hide linked meta-data\": \"隐藏连接的元数据\",\n        Toggle: \"反向选择\",\n        \"Reset filters\": \"重置过滤器\",\n        Verifying: \"正在验证\",\n        \"Verify Pending\": \"等待验证\",\n        \"Quick Access Settings\": \"快速访问设置\",\n        Save: \"保存\",\n        \"Save settings\": \"保存设置\",\n        \"Currently no download in line to display, use the\": \"当前没有可显示的下载项，使用\",\n        \"download button to start downloading files!\": \"按钮来开始下载！\",\n        Peers: \"Peers\",\n        \"More Info\": \"更多信息\",\n        Remove: \"删除\",\n        \"# of\": \"块数\",\n        Length: \"块大小\",\n        \"Add Downloads By URIs\": \"使用链接下载\",\n        \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n          \"- 你可以同时添加多个文件下载任务，每行下载一个文件；\",\n        \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n          \"- 你也可以给同一个下载任务添加多个镜像链接，写在一行并用空格分隔每条链接；\",\n        \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\": \"- 链接可以是 HTTP(S)、FTP 和磁力链接。\",\n        \"Download settings\": \"下载设置\",\n        \"Advanced settings\": \"高级设置\",\n        Cancel: \"取消\",\n        Start: \"开始\",\n        Choose: \"选择\",\n        \"Quick Access (shown on the main page)\": \"快速访问（在主页上显示）\",\n        \"Add Downloads By Torrents\": \"使用种子下载\",\n        \"- Select the torrent from the local filesystem to start the download.\":\n          \"- 从本地文件系统选择种子文件开始下载；\",\n        \"- You can select multiple torrents to start multiple downloads.\":\n          \"- 你可以同时选择多个种子来启动多个下载；\",\n        \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n          \"- 如果要添加磁力链接，请使用添加链接的方式。\",\n        \"Select Torrents\": \"选择种子文件\",\n        \"Select a Torrent\": \"选择种子文件\",\n        \"Add Downloads By Metalinks\": \"使用 Metalink 下载\",\n        \"Select Metalinks\": \"选择 Metalink 文件\",\n        \"- Select the Metalink from the local filesystem to start the download.\":\n          \"* 从本地文件系统选择 Metalink 文件开始下载；\",\n        \"- You can select multiple Metalinks to start multiple downloads.\":\n          \"* 你可以同时选择多个 Metalink 文件来启动多个下载。\",\n        \"Select a Metalink\": \"选择 Metalink 文件\",\n        \"Choose files to start download for\": \"请选择要下载的文件\",\n        \"Select to download\": \"选择以下载\",\n        \"Aria2 RPC host and port\": \"Aria2 RPC 主机和端口\",\n        \"Enter the host\": \"主机\",\n        \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n          \"输入 Aria2 RPC 所在服务器的 IP 或域名（默认：localhost）\",\n        \"Enter the port\": \"端口\",\n        \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n          \"输入 Aria2 RPC 端口号（默认：6800）\",\n        \"Enter the RPC path\": \"RPC 路径\",\n        \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n          \"输入 Aria2 RPC 路径（默认：/jsonrpc）\",\n        \"SSL/TLS encryption\": \"SSL/TLS 加密\",\n        \"Enable SSL/TLS encryption\": \"启用 SSL/TLS 加密\",\n        \"Enter the secret token (optional)\": \"密码令牌（可选）\",\n        \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n          \"输入 Aria2 RPC 密码令牌（如果未启用则留空）\",\n        \"Enter the username (optional)\": \"用户名（可选）\",\n        \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n          \"输入 Aria2 RPC 用户名（如果未启用身份验证则留空）\",\n        \"Enter the password (optional)\": \"密码（可选）\",\n        \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n          \"输入 Aria2 RPC 密码（如果未启用身份验证则留空）\",\n        \"Enter base URL (optional)\": \"基本链接地址（可选）\",\n        \"Direct Download\": \"直接下载\",\n        \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n          \"如果指定该选项，将会创建可以直接从 Aria2 服务器上下载文件的链接。\",\n        \"(Requires appropriate webserver to be configured.)\": \"（需要 WEB 服务器配置正确）\",\n        \"Save Connection configuration\": \"保存连接配置\",\n        Filter: \"过滤\",\n        \"Aria2 server info\": \"Aria2 服务器信息\",\n        \"Aria2 Version\": \"Aria2 版本\",\n        \"Features Enabled\": \"已启用功能\",\n        \"To download the latest version of the project, add issues or to contribute back, head on to\":\n          \"下载最新版本、提交问题或捐助，请访问\",\n        \"Or you can open the latest version in the browser through\":\n          \"直接在浏览器中使用最新版本，请访问\",\n        Close: \"关闭\",\n        \"Download status\": \"当前下载状态\",\n        \"Download Speed\": \"当前下载速度\",\n        \"Upload Speed\": \"当前上传速度\",\n        \"Estimated time\": \"预计剩余时间\",\n        \"Download Size\": \"下载总大小\",\n        Downloaded: \"已下载大小\",\n        Progress: \"当前下载进度\",\n        \"Download Path\": \"文件下载路径\",\n        Uploaded: \"已上传大小\",\n        \"Download GID\": \"下载的 GID\",\n        \"Number of Pieces\": \"文件块数量\",\n        \"Piece Length\": \"每块大小\",\n        \"The last connection attempt was unsuccessful. Trying another configuration\":\n          \"上次连接请求未成功，正在尝试使用另一个配置\",\n        \"Oh Snap!\": \"糟糕！\",\n        \"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\":\n          \"无法连接到 Aria2 RPC 服务器，将在10秒后重试。您可能需要检查连接设置，请前往 设置 > 连接设置\",\n        \"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\":\n          \"连接到 Aria2 RPC 服务器时认证失败，将在10秒后重试。您可能需要确认您的身份验证信息，请前往 设置 > 连接设置\",\n        \"Successfully connected to Aria2 through its remote RPC …\": \"通过 RPC 连接到 Aria2 成功！\",\n        \"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)\":\n          \"通过 RPC 连接到 Aria2 成功，但是连接并不安全。要想使用安全连接，尝试在启动 Aria2 时添加一个授权密码令牌（通过 --rpc-secret 参数）\",\n        \"Trying to connect to aria2 using the new connection configuration\":\n          \"正在尝试使用新的连接配置来连接到 Aria2 ……\",\n        \"Remove {{name}} and associated meta-data?\": \"是否删除 {{name}} 和关联的元数据？\"\n      });\n  },\n  function(e, t) {\n    \"undefined\" == typeof translations && (translations = {}),\n      (translations.zh_TW = {\n        Search: \"搜尋\",\n        Add: \"新增\",\n        \"By URIs\": \"使用連結\",\n        \"By Torrents\": \"使用種子\",\n        \"By Metalinks\": \"使用 Metalink\",\n        Manage: \"管理\",\n        \"Pause All\": \"暫停所有\",\n        \"Resume Paused\": \"恢復下載\",\n        \"Purge Completed\": \"清除已完成\",\n        \"Shutdown Server\": \"關閉伺服器\",\n        Settings: \"設定\",\n        \"Connection Settings\": \"連線設定\",\n        \"Global Settings\": \"全域性設定\",\n        \"Server info\": \"伺服器資訊\",\n        \"About and contribute\": \"關於和捐助\",\n        \"Toggle navigation\": \"切換導航\",\n        Miscellaneous: \"雜項\",\n        \"Global Statistics\": \"全域性統計\",\n        About: \"關於\",\n        Displaying: \"正在顯示\",\n        of: \"/\",\n        downloads: \"下載\",\n        Language: \"語言\",\n        \"Download Filters\": \"下載過濾器\",\n        Running: \"執行中\",\n        Active: \"活動的\",\n        Waiting: \"等待中\",\n        Complete: \"已完成\",\n        Error: \"出錯的\",\n        Paused: \"已暫停\",\n        Removed: \"已刪除\",\n        \"Hide linked meta-data\": \"隱藏連線的元資料\",\n        Toggle: \"反向選擇\",\n        \"Reset filters\": \"重置過濾器\",\n        Verifying: \"正在驗證\",\n        \"Verify Pending\": \"等待驗證\",\n        \"Quick Access Settings\": \"快速訪問設定\",\n        Save: \"儲存\",\n        \"Save settings\": \"儲存設定\",\n        \"Currently no download in line to display, use the\": \"當前沒有可顯示的下載項，使用\",\n        \"download button to start downloading files!\": \"按鈕來開始下載！\",\n        Peers: \"Peers\",\n        \"More Info\": \"更多資訊\",\n        Remove: \"刪除\",\n        \"# of\": \"塊數\",\n        Length: \"塊大小\",\n        \"Add Downloads By URIs\": \"使用連結下載\",\n        \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n          \"- 你可以同時新增多個檔案下載任務，每行下載一個檔案；\",\n        \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n          \"- 你也可以給同一個下載任務新增多個映象連結，寫在一行並用空格分隔每條連結；\",\n        \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\": \"- 連結可以是 HTTP(S)、FTP 和磁力連結。\",\n        \"Download settings\": \"下載設定\",\n        \"Advanced settings\": \"高階設定\",\n        Cancel: \"取消\",\n        Start: \"開始\",\n        Choose: \"選擇\",\n        \"Quick Access (shown on the main page)\": \"快速訪問（在主頁上顯示）\",\n        \"Add Downloads By Torrents\": \"使用種子下載\",\n        \"- Select the torrent from the local filesystem to start the download.\":\n          \"- 從本地檔案系統選擇種子檔案開始下載；\",\n        \"- You can select multiple torrents to start multiple downloads.\":\n          \"- 你可以同時選擇多個種子來啟動多個下載；\",\n        \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n          \"- 如果要新增磁力連結，請使用新增連結的方式。\",\n        \"Select Torrents\": \"選擇種子檔案\",\n        \"Select a Torrent\": \"選擇種子檔案\",\n        \"Add Downloads By Metalinks\": \"使用 Metalink 下載\",\n        \"Select Metalinks\": \"選擇 Metalink 檔案\",\n        \"- Select the Metalink from the local filesystem to start the download.\":\n          \"* 從本地檔案系統選擇 Metalink 檔案開始下載；\",\n        \"- You can select multiple Metalinks to start multiple downloads.\":\n          \"* 你可以同時選擇多個 Metalink 檔案來啟動多個下載。\",\n        \"Select a Metalink\": \"選擇 Metalink 檔案\",\n        \"Choose files to start download for\": \"請選擇要下載的檔案\",\n        \"Select to download\": \"選擇以下載\",\n        \"Aria2 RPC host and port\": \"Aria2 RPC 主機和埠\",\n        \"Enter the host\": \"主機\",\n        \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n          \"輸入 Aria2 RPC 所在伺服器的 IP 或域名（預設：localhost）\",\n        \"Enter the port\": \"埠號\",\n        \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n          \"輸入 Aria2 RPC 埠號（預設：6800）\",\n        \"Enter the RPC path\": \"RPC 路徑\",\n        \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n          \"輸入 Aria2 RPC 路徑（預設：/jsonrpc）\",\n        \"SSL/TLS encryption\": \"SSL/TLS 加密\",\n        \"Enable SSL/TLS encryption\": \"啟用 SSL/TLS 加密\",\n        \"Enter the secret token (optional)\": \"密碼令牌（可選）\",\n        \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n          \"輸入 Aria2 RPC 密碼令牌（如果未啟用則留空）\",\n        \"Enter the username (optional)\": \"使用者名稱（可選）\",\n        \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n          \"輸入 Aria2 RPC 使用者名稱（如果未啟用身份驗證則留空）\",\n        \"Enter the password (optional)\": \"密碼（可選）\",\n        \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n          \"輸入 Aria2 RPC 密碼（如果未啟用身份驗證則留空）\",\n        \"Enter base URL (optional)\": \"基本連結地址（可選）\",\n        \"Direct Download\": \"直接下載\",\n        \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n          \"如果指定該選項，將會建立可以直接從 Aria2 伺服器上下載檔案的連結。\",\n        \"(Requires appropriate webserver to be configured.)\": \"（需要 WEB 伺服器配置正確）\",\n        \"Save Connection configuration\": \"儲存連線配置\",\n        Filter: \"過濾\",\n        \"Aria2 server info\": \"Aria2 伺服器資訊\",\n        \"Aria2 Version\": \"Aria2 版本\",\n        \"Features Enabled\": \"已啟用功能\",\n        \"To download the latest version of the project, add issues or to contribute back, head on to\":\n          \"下載最新版本、提交問題或捐助，請訪問\",\n        \"Or you can open the latest version in the browser through\":\n          \"直接在瀏覽器中使用最新版本，請訪問\",\n        Close: \"關閉\",\n        \"Download status\": \"當前下載狀態\",\n        \"Download Speed\": \"當前下載速度\",\n        \"Upload Speed\": \"當前上傳速度\",\n        \"Estimated time\": \"預計剩餘時間\",\n        \"Download Size\": \"下載總大小\",\n        Downloaded: \"已下載大小\",\n        Progress: \"當前下載進度\",\n        \"Download Path\": \"檔案下載路徑\",\n        Uploaded: \"已上傳大小\",\n        \"Download GID\": \"下載的 GID\",\n        \"Number of Pieces\": \"檔案塊數量\",\n        \"Piece Length\": \"每塊大小\",\n        \"The last connection attempt was unsuccessful. Trying another configuration\":\n          \"上次連線請求未成功，正在嘗試使用另一個配置\",\n        \"Oh Snap!\": \"糟糕！\",\n        \"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\":\n          \"無法連線到 Aria2 RPC 伺服器，將在10秒後重試。您可能需要檢查連線設定，請前往 設定 > 連線設定\",\n        \"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\":\n          \"連線到 Aria2 RPC 伺服器時認證失敗，將在10秒後重試。您可能需要確認您的身份驗證資訊，請前往 設定 > 連線設定\",\n        \"Successfully connected to Aria2 through its remote RPC …\": \"通過 RPC 連線到 Aria2 成功！\",\n        \"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)\":\n          \"通過 RPC 連線到 Aria2 成功，但是連線並不安全。要想使用安全連線，嘗試在啟動 Aria2 時新增一個授權密碼令牌（通過 --rpc-secret 引數）\",\n        \"Trying to connect to aria2 using the new connection configuration\":\n          \"正在嘗試使用新的連線配置來連線到 Aria2 ……\",\n        \"Remove {{name}} and associated meta-data?\": \"是否刪除 {{name}} 和關聯的元資料？\"\n      });\n  },\n  function(e, t) {\n    \"undefined\" == typeof translations && (translations = {}),\n      (translations.pl_PL = {\n        Search: \"Szukaj\",\n        Add: \"Dodaj\",\n        \"By URIs\": \"Przez URL\",\n        \"By Torrents\": \"Przez Torrenty\",\n        \"By Metalinks\": \"Przez Metalinki\",\n        Manage: \"Zarządzaj\",\n        \"Pause All\": \"Zatrzymaj wszystkie\",\n        \"Resume Paused\": \"Wznów zatrzymane\",\n        \"Purge Completed\": \"Czyść zakończone\",\n        Settings: \"Ustawienia\",\n        \"Connection Settings\": \"Ustawienia połączenia\",\n        \"Global Settings\": \"Ustawienia globalne\",\n        \"Server info\": \"Informacje o serwerze\",\n        \"About and contribute\": \"O projekcie\",\n        \"Toggle navigation\": \"Przełącz nawigację\",\n        Miscellaneous: \"Różne\",\n        \"Global Statistics\": \"Statystyki globalne\",\n        About: \"O\",\n        Displaying: \"Wyświetlanie\",\n        of: \"z\",\n        downloads: \"pobranych plików\",\n        Language: \"Język\",\n        \"Download Filters\": \"Filtry ściągania\",\n        Running: \"Uruchomione\",\n        Active: \"Aktywne\",\n        Waiting: \"Oczekujące\",\n        Complete: \"Zakończone\",\n        Error: \"Błąd\",\n        Paused: \"Zatrzymane\",\n        Removed: \"Usunięte\",\n        \"Hide linked meta-data\": \"Ukryj zalinkowane meta-dane\",\n        Toggle: \"Przełącz\",\n        \"Reset filters\": \"Reset filtrów\",\n        \"Quick Access Settings\": \"Ustawienia szybkiego dostępu\",\n        \"Save settings\": \"Zapisz ustawienia\",\n        \"Currently no download in line to display, use the\":\n          \"Obecnie nie można wyświetlić żadnych pobieranych plików. Użyj przycisku\",\n        \"download button to start downloading files!\": \"aby rozpocząć ściąganie plików!\",\n        Peers: \"Peerów\",\n        \"More Info\": \"Więcej info\",\n        Remove: \"Usuń\",\n        \"# of\": \"# z\",\n        Length: \"Długość\",\n        \"Add Downloads By URIs\": \"Dodaj pobieranie przez URI\",\n        \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n          \"- Możesz dodać wiele pobrań (plików) w tym samym czasie przez wprowadzenie URI dla każdego w oddzielnej linii.\",\n        \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n          \"- Możesz także dodać wiele URI (luster) dla tego *samego* pliku. Zrób to, poprzez oddzielenie URI od siebie spacją.\",\n        \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\":\n          \"- URI może być HTTP(S)/FTP/BitTorrent-Magnet.\",\n        \"Download settings\": \"Ustawienia pobierania\",\n        \"Advanced settings\": \"Zaawansowane ustawienia\",\n        Cancel: \"Anuluj\",\n        Start: \"Rozpocznij\",\n        Choose: \"Wybierz\",\n        \"Quick Access (shown on the main page)\": \"Szybki dostęp (pokazywane na głównej stronie)\",\n        \"Add Downloads By Torrents\": \"Dodaj pobierania przez Torrenty\",\n        \"- Select the torrent from the local filesystem to start the download.\":\n          \"- Wybierz torrent z lokalnego systemu plików, aby rozpocząć pobieranie.\",\n        \"- You can select multiple torrents to start multiple downloads.\":\n          \"- Możesz wybrać wiele torrentów do rozpoczęcia wiele pobrań.\",\n        \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n          \"- Aby dodać BitTorrent-URL Magnetyczny, użyj opcji dodawania przez URI i dodaj to tutaj.\",\n        \"Select Torrents\": \"Wybierz Torrenty\",\n        \"Select a Torrent\": \"Wybierz Torrent\",\n        \"Add Downloads By Metalinks\": \"Dodaj pobierania przez Metalinki\",\n        \"Select Metalinks\": \"Wybierz Metalinki\",\n        \"- Select the Metalink from the local filesystem to start the download.\":\n          \"- Wybierz Metalinki z lokalnego systemu plików, aby rozpocząć pobieranie.\",\n        \"- You can select multiple Metalinks to start multiple downloads.\":\n          \"- Możesz wybrać wiele Metalinków, aby rozpocząć wiele pobrań.\",\n        \"Select a Metalink\": \"Wybierz Metalink\",\n        \"Choose files to start download for\": \"Wybierz pliki, aby rozpocząć pobieranie dla\",\n        \"Select to download\": \"Wybierz do pobierania\",\n        \"Aria2 RPC host and port\": \"Aria2 RPC host i port\",\n        \"Enter the host\": \"Wprowadź host\",\n        \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n          \"Wprowadź IP lub nazwę DNS serwera, na którym jest uruchomiona Aria2 z RPC (domyślnie: localhost)\",\n        \"Enter the port\": \"Wprowadź port\",\n        \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n          \"Wprowadź port serwera, na którym Aria2 z RPC jest uruchomiona (domyślnie 6800)\",\n        \"Enter the RPC path\": \"Wprowadź ścieżkę RPC\",\n        \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n          \"Wprowadź ścieżkę dla punktu końcowego Aria2 RPC (domyślnie: /jsonrpc)\",\n        \"SSL/TLS encryption\": \"szyfrowanie SSL/TLS\",\n        \"Enable SSL/TLS encryption\": \"Włącz szyfrowanie SSL/TLS\",\n        \"Enter the secret token (optional)\": \"Wprowadź sekretny token (opcja dodatkowa)\",\n        \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n          \"Wprowadź sekretny token Aria2 RPC (pozostaw puste, jeżeli uwierzytelnienie nie jest włączone)\",\n        \"Enter the username (optional)\": \"Wprowadź nazwę użytkownika (opcja dodatkowa)\",\n        \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n          \"Wprowadź nazwę użytkownika Aria2 RPC (pozostaw puste, jeżeli uwierzytelnienie nie jest włączone)\",\n        \"Enter the password (optional)\": \"Wprowadź hasło (opcja dodatkowa)\",\n        \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n          \"Wprowadź hasło Aria2 RPC (pozostaw puste, jeżeli uwierzytelnienie nie jest włączone)\",\n        \"Enter base URL (optional)\": \"Wprowadź podstawowy URL (opcja dodatkowa)\",\n        \"Direct Download\": \"Bezpośrednie pobieranie\",\n        \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n          \"Jeżeli zaznaczone, linki mogą być utworzone do włączenia bezpośredniego pobierania z serwera Aria2\",\n        \"(Requires appropriate webserver to be configured.)\":\n          \"(Wymaga właściwej konfiguracji serwera WWW)\",\n        \"Save Connection configuration\": \"Zapisz konfigurację połączenia\",\n        Filter: \"Filtr\",\n        \"Aria2 server info\": \"Info o serwerze Aria2\",\n        \"Aria2 Version\": \"Wersja Aria2\",\n        \"Features Enabled\": \"Włączone funkcje\",\n        \"To download the latest version of the project, add issues or to contribute back, head on to\":\n          \"Aby ściągnąć najnowszą wersję projektu, dodać zgłodzenia lub wspomagać projekt, udaj się do\",\n        \"Or you can open the latest version in the browser through\":\n          \"Lub otwórz najnowszą wersję przez przeglądarkę\",\n        Close: \"Zamknij\",\n        \"Download status\": \"Status pobierania\",\n        \"Download Speed\": \"Szybkość pobierania\",\n        \"Upload Speed\": \"Szybkość wysyłania\",\n        \"Estimated time\": \"Pozostały czas\",\n        \"Download Size\": \"Rozmiar pobierania\",\n        Downloaded: \"Pobrane\",\n        Progress: \"Postęp\",\n        \"Download Path\": \"Ścieżka pobierania\",\n        Uploaded: \"Załadowany\",\n        \"Download GID\": \"GID pobierania\",\n        \"Number of Pieces\": \"Liczba kawałków\",\n        \"Piece Length\": \"Rozmiar kawałka\",\n        \"Shutdown Server\": \"Wyłącz serwer\",\n        \"The last connection attempt was unsuccessful. Trying another configuration\":\n          \"Ostatnia próba połączenia nie powiodła się. Spróbuj innej konfiguracji\",\n        \"Oh Snap!\": \"O kurczę!\",\n        \"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\":\n          \"Nie można połączyć się z serwerem aria2 przez RPC. Kolejna próba za 10 sekund. Być może potrzebujesz sprawdzić ustawienie połączenia poprzez Ustawienia > Ustawienia połączenia\",\n        \"Successfully connected to Aria2 through its remote RPC …\":\n          \"Pomyślnie połączono się z Aria2 przez RPC ...\",\n        \"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)\":\n          \"Pomyślnie połączono się z Aria2 przez RPC, jednakże połączenie nie jest bezpieczne. Aby zabezpieczyć dodaj sekretny token autoryzacji podczas startu Aria2 (przez użycie flagi --rpc-secret)\",\n        \"Trying to connect to aria2 using the new connection configuration\":\n          \"Próba połączenia się z Aria2 poprzez użycie nowej konfiguracji połączenia\"\n      });\n  },\n  function(e, t) {\n    \"undefined\" == typeof translations && (translations = {}),\n      (translations.fr_FR = {\n        Search: \"Rechercher\",\n        Add: \"Ajouter\",\n        \"By URIs\": \"Par URIs\",\n        \"By Torrents\": \"Par Torrents\",\n        \"By Metalinks\": \"Par Metaliens\",\n        Manage: \"Gérer\",\n        \"Pause All\": \"Tout suspendre\",\n        \"Resume Paused\": \"Reprendre\",\n        \"Purge Completed\": \"Nettoyer les fichiers complétés\",\n        Settings: \"Paramètres\",\n        \"Connection Settings\": \"Paramètres de connexion\",\n        \"Global Settings\": \"Paramètres globaux\",\n        \"Server info\": \"Informations serveur\",\n        \"About and contribute\": \"À propos et contribuer\",\n        \"Toggle navigation\": \"Basculer la navigation\",\n        Miscellaneous: \"Autres\",\n        \"Global Statistics\": \"Statistiques globales\",\n        About: \"À propos\",\n        Displaying: \"Affichage de\",\n        of: \"parmi\",\n        downloads: \"téléchargements\",\n        Language: \"Langue\",\n        \"Download Filters\": \"Filtres de téléchargement\",\n        Running: \"En cours\",\n        Active: \"Actifs\",\n        Waiting: \"En attente\",\n        Complete: \"Complétés\",\n        Error: \"Erreurs\",\n        Paused: \"En pause\",\n        Removed: \"Supprimés\",\n        \"Hide linked meta-data\": \"Cacher les métadonnées liées\",\n        Toggle: \"Basculer\",\n        \"Reset filters\": \"Réinitialiser les filtres\",\n        Verifying: \"Vérification\",\n        \"Verify Pending\": \"Vérification en attente\",\n        \"Quick Access Settings\": \"Paramètres d'accès rapide\",\n        Save: \"Sauvegarder\",\n        \"Save settings\": \"Sauvegarder les paramètres\",\n        \"Currently no download in line to display, use the\":\n          \"Aucun téléchargement dans la file d'attente, utilisez le bouton de téléchargement\",\n        \"download button to start downloading files!\":\n          \"pour commencer à télécharger des fichiers !\",\n        Peers: \"Pairs\",\n        \"More Info\": \"Plus d'infos\",\n        Remove: \"Supprimer\",\n        \"# of\": \"# parmi\",\n        Length: \"Longueur\",\n        \"Add Downloads By URIs\": \"Ajouter des téléchargements depuis des URIs\",\n        \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n          \"Vous pouvez ajouter plusieurs téléchargements (fichiers) en même temps, en mettant une URI pour chaque fichier sur une nouvelle ligne\",\n        \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n          \"Vous pouvez aussi ajouter plusieurs URIs (mirroirs) pour le *même* fichier. Pour ce faire, séparez les URIs par un espace.\",\n        \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\":\n          \"Une URI peut être HTTP(S)/FTP/BitTorrent-Magnet.\",\n        \"Download settings\": \"Paramètres de téléchargement\",\n        \"Advanced settings\": \"Paramètres avancés\",\n        Cancel: \"Annuler\",\n        Start: \"Démarrer\",\n        Choose: \"Choisir\",\n        \"Quick Access (shown on the main page)\": \"Accès rapide (affiché sur la page principale\",\n        \"Add Downloads By Torrents\": \"Ajouter des téléchargements à partir de fichiers Torrent\",\n        \"- Select the torrent from the local filesystem to start the download.\":\n          \"- Sélectionnez le torrent depuis votre système de fichier local pour commencer le téléchargement.\",\n        \"- You can select multiple torrents to start multiple downloads.\":\n          \"Vous pouvez sélectionner plusieurs torrents pour commencer plusieurs téléchargements.\",\n        \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n          \"Pour ajouter une URL BitTorrent-Magnet, utilisez l'option Ajouter par URIs et ajoutez-la à ce niveau.\",\n        \"Select Torrents\": \"Sélectionner des Torrents\",\n        \"Select a Torrent\": \"Sélectionner un Torrent\",\n        \"Add Downloads By Metalinks\": \"Ajouter des téléchargements par Metaliens\",\n        \"Select Metalinks\": \"Sélectionner des Métaliens\",\n        \"- Select the Metalink from the local filesystem to start the download.\":\n          \"Sélectionner le Métalien depuis votre système de fichier local pour commencer le téléchargement.\",\n        \"- You can select multiple Metalinks to start multiple downloads.\":\n          \"Vous pouvez sélectionner plusieurs Métaliens pour commencer plusieurs téléchargements.\",\n        \"Select a Metalink\": \"Sélectionner un Métalien\",\n        \"Choose files to start download for\":\n          \"Sélectionner les fichiers pour lesquels commencer le téléchargement.\",\n        \"Select to download\": \"Sélectionner pour télécharger\",\n        \"Aria2 RPC host and port\": \"Hôte et ports Aria2 RPC\",\n        \"Enter the host\": \"Entrer l'hôte\",\n        \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n          \"Entrer l'IP ou le nom DNS du serveur sur lequel est lancé le RPC pour Aria2 (défaut : localhost)\",\n        \"Enter the port\": \"Entrer le port\",\n        \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n          \"Entrer le port du serveur sur lequel tourne le RPC pour Aria2 (défaut : 6800)\",\n        \"Enter the RPC path\": \"Entrer le chemin vers le RPC\",\n        \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n          \"Entrer le chemin final pour le RPC Aria2 (défaut : /jsonrpc)\",\n        \"SSL/TLS encryption\": \"Chiffrage SSL/TLS\",\n        \"Enable SSL/TLS encryption\": \"Activer le chiffrage SSL/TLS\",\n        \"Enter the secret token (optional)\": \"Entrer le token secret (optionnel)\",\n        \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n          \"Entrer le token secret pour le RPC Aria2 (laisser vide si l'authentification n'est pas activée)\",\n        \"Enter the username (optional)\": \"Entrer le nom d'utilisateur (optionnel)\",\n        \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n          \"Entrer le nom d'utilisateur RPC Aria2 (laisser vide si l'authentification n'est pas activée)\",\n        \"Enter the password (optional)\": \"Entrer le mot de passe (optionnel)\",\n        \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n          \"Entrer le mot de passe RPC Aria2 (laisser vide si l'authentification n'est pas activée)\",\n        \"Enter base URL (optional)\": \"Entrez l'URL de base\",\n        \"Direct Download\": \"Téléchargement direct\",\n        \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n          \"S'ils sont fournis, les liens seront créés pour activer le téléchargement direct depuis le serveur Aria2\",\n        \"(Requires appropriate webserver to be configured.)\":\n          \"(Nécessite un serveur web approprié pour être configuré)\",\n        \"Save Connection configuration\": \"Sauvegarder la configuration de connexion\",\n        Filter: \"Filtre\",\n        \"Aria2 server info\": \"Infos serveur Aria2\",\n        \"Aria2 Version\": \"Version Aria2\",\n        \"Features Enabled\": \"Fonctionnalités activées\",\n        \"To download the latest version of the project, add issues or to contribute back, head on to\":\n          \"Pour télécharger la dernière version du projet, signaler des problèmes ou pour contribuer, aller à l'adresse\",\n        \"Or you can open the latest version in the browser through\":\n          \"Ou vous pouvez ouvrir la dernière version dans le navigateur depuis\",\n        Close: \"Fermer\",\n        \"Download status\": \"Statut de téléchargement\",\n        \"Download Speed\": \"Vitesse de téléchargement\",\n        \"Upload Speed\": \"Vitesse d'envoi\",\n        \"Estimated time\": \"Temps estimé\",\n        \"Download Size\": \"Taille du téléchargement\",\n        Downloaded: \"Téléchargé\",\n        Progress: \"Avancement\",\n        \"Download Path\": \"Chemin de téléchargement\",\n        Uploaded: \"Envoyé\",\n        \"Download GID\": \"GID du téléchargement\",\n        \"Number of Pieces\": \"Nombre de pièces\",\n        \"Piece Length\": \"Taille de la pièce\",\n        \"Shutdown Server\": \"Arrêter le serveur\",\n        \"The last connection attempt was unsuccessful. Trying another configuration\":\n          \"La dernière tentative de connexion a échoué. Essai d'une autre configuration\",\n        \"Oh Snap!\": \"Oh non !\",\n        \"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\":\n          \"Impossible de se connecter au serveur RPC d'aria2. Nouvel essai dans 10 secondes. Vous voudrez peut-être vérifier les paramètres de connexion en allant dans Paramètres > Paramètres de connexion\",\n        \"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\":\n          \"Erreur d'authentification lors de la connexion au serveur RPC d'aria2. Nouvel essai dans 10 secondes. Vous voudrez peut-être confirmer les renseignements d'authentification en allant dans Paramètres > Paramètres de connexion\",\n        \"Successfully connected to Aria2 through its remote RPC …\":\n          \"Connexion réussie à aria2 via son interface RPC …\",\n        \"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)\":\n          \"Connexion réussie à aria2 via l'interface RPC, cependant la connexion n'est toujours pas sécurisée. Pour une sécurité complète, essayez d'ajouter un token secret d'autorisation en lançant aria2 (à l'aide de l'option --rpc-secret)\",\n        \"Trying to connect to aria2 using the new connection configuration\":\n          \"Tentative de connexion à aria2 avec la nouvelle configuration\",\n        \"Remove {{name}} and associated meta-data?\":\n          \"Supprimer {{name}} et les métadonnées associées\"\n      });\n  },\n  function(e, t) {\n    \"undefined\" == typeof translations && (translations = {}),\n      (translations.de_DE = {\n        Search: \"Suche\",\n        Add: \"Hinzufügen\",\n        \"By URIs\": \"mit URIs\",\n        \"By Torrents\": \"mit Torrents\",\n        \"By Metalinks\": \"mit Metalinks\",\n        Manage: \"Verwalten\",\n        \"Pause All\": \"Alle anhalten\",\n        \"Resume Paused\": \"Angehaltene fortsetzen\",\n        \"Purge Completed\": \"Fertige entfernen\",\n        Settings: \"Einstellungen\",\n        \"Connection Settings\": \"Verbindungseinstellungen\",\n        \"Global Settings\": \"Globale Einstellungen\",\n        \"Server info\": \"Server Information\",\n        \"About and contribute\": \"Über webui-aria2\",\n        \"Toggle navigation\": \"Navigation an/ausschalten\",\n        Miscellaneous: \"Verschiedenes\",\n        \"Global Statistics\": \"Globale Statistiken\",\n        About: \"Über\",\n        Displaying: \"Anzeige\",\n        of: \"von\",\n        downloads: \"Downloads\",\n        Language: \"Sprache\",\n        \"Download Filters\": \"Download Filter\",\n        Running: \"Laufende\",\n        Active: \"Aktive\",\n        Waiting: \"Wartende\",\n        Complete: \"Fertige\",\n        Error: \"Fehler\",\n        Paused: \"Angehaltene\",\n        Removed: \"Gelöschte\",\n        \"Hide linked meta-data\": \"Blende verlinkte Meta-Daten aus\",\n        Toggle: \"Umschalten\",\n        \"Reset filters\": \"Filter zurücksetzen\",\n        \"Quick Access Settings\": \"Ausgewählte Einstellungen\",\n        \"Save settings\": \"Einstellungen speichern\",\n        \"Currently no download in line to display, use the\":\n          \"Aktuell sind keine Downloads vorhanden, bitte benutz den\",\n        \"download button to start downloading files!\":\n          \"Download Link um den Download von Dateien zu beginnen!\",\n        Peers: \"Peers\",\n        \"More Info\": \"Mehr Infos\",\n        Remove: \"Entfernen\",\n        \"# of\": \"# von\",\n        Length: \"Länge\",\n        \"Add Downloads By URIs\": \"Downloads anhand von URIs hinzufügen\",\n        \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n          \"- Es können mehrere Downloads (Dateien) gleichzeitig hinzugefügt werden, indem jede URI in eine separate Zeile eingegeben wird.\",\n        \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n          \"- Es können auch mehrere URIs (Spiegelserver) für *dieselbe* Datei durch Leerzeichen getrennt angegeben werden.\",\n        \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\":\n          \"- Eine URI kann folgende Protokolle besitzen: HTTP(S)/FTP/BitTorrent-Magnet.\",\n        \"Download settings\": \"Download Einstellungen\",\n        \"Advanced settings\": \"Erweiterte Einstellungen\",\n        Cancel: \"Abbrechen\",\n        Start: \"Beginnen\",\n        Choose: \"Auswählen\",\n        \"Quick Access (shown on the main page)\": \"Schnellzugriff (Anzeige auf der Hauptseite)\",\n        \"Add Downloads By Torrents\": \"Downloads mit Torrents hinzufügen\",\n        \"- Select the torrent from the local filesystem to start the download.\":\n          \"- Wähle ein Torrent vom lokalen Dateisystem um den Download zu starten\",\n        \"- You can select multiple torrents to start multiple downloads.\":\n          \"- Es können mehrere Torrents ausgewählt werden um mehrere Downloads zu starten\",\n        \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n          \"- Für BitTorrent-Magnet URLs benutz die Option 'Mit URIs hinzufügen'\",\n        \"Select Torrents\": \"Wähle Torrents\",\n        \"Select a Torrent\": \"Wähle ein Torrent\",\n        \"Add Downloads By Metalinks\": \"Download mit Metalinks hinzufügen\",\n        \"Select Metalinks\": \"Wähle Metalinks\",\n        \"- Select the Metalink from the local filesystem to start the download.\":\n          \"- Wähle ein Metalink vom lokalen Dateisystem um den Download zu starten\",\n        \"- You can select multiple Metalinks to start multiple downloads.\":\n          \"- Es können mehrere Metalinks ausgewählt werden um mehrere Downloads zu starten\",\n        \"Select a Metalink\": \"Wähle einen Metalink\",\n        \"Choose files to start download for\": \"Wähle Dateien für den Download aus\",\n        \"Select to download\": \"Wähle zum Download\",\n        \"Aria2 RPC host and port\": \"Aria2 RPC host und port\",\n        \"Enter the host\": \"Host\",\n        \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n          \"Gib die IP oder den DNS Namen des Servers ein, auf dem Aria2 läuft und mit dem du eine RPC-Verbindung etablieren willst (Standard: localhost)\",\n        \"Enter the port\": \"Port\",\n        \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n          \"Gib den Port des Servers ein, auf dem der RPC-Dienst von Aria2 läuft (Standard: 6800)\",\n        \"Enter the RPC path\": \"RPC Pfad\",\n        \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n          \"Gib den Pfad zum Aria2 RPC Endpunkt an (Standard: /jsonrpc)\",\n        \"SSL/TLS encryption\": \"SSL/TLS\",\n        \"Enable SSL/TLS encryption\": \"Aktiviere SSL/TLS Verschlüsselung\",\n        \"Enter the secret token (optional)\": \"Secret Token (optional)\",\n        \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n          \"Gib den Aria2 RPC secret Token ein (leer lassen falls keine Authentifizierung aktiv)\",\n        \"Enter the username (optional)\": \"Benutzername (optional)\",\n        \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n          \"Gib den Aria2 RPC Benutzernamen ein (leer lassen falls keine Authentifizierung aktiv)\",\n        \"Enter the password (optional)\": \"Passwort (optional)\",\n        \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n          \"Gib das Aria2 RPC Passwort ein (leer lassen falls keine Authentifizierung aktiv)\",\n        \"Enter base URL (optional)\": \"Base URL (optional)\",\n        \"Direct Download\": \"Direkter Download\",\n        \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n          \"Falls angegeben, werden Links erstellt um einen direkten Download vom Aria2 Server zu ermöglichen\",\n        \"(Requires appropriate webserver to be configured.)\":\n          \"(Es wird ein entsprechend konfigurierter WebServer benötigt.)\",\n        \"Save Connection configuration\": \"Speichern der Verbindungseinstellung\",\n        Filter: \"Filter\",\n        \"Aria2 server info\": \"Aria2 Server Info\",\n        \"Aria2 Version\": \"Aria2 Version\",\n        \"Features Enabled\": \"Aktive Funktionen\",\n        \"To download the latest version of the project, add issues or to contribute back, head on to\":\n          \"Um die neuste Version des Projects zu laden, Fehler zu melden oder sich zu beteiligen, besuch\",\n        \"Or you can open the latest version in the browser through\":\n          \"Oder du kannst die neueste Version direkt in deinem Browser verwenden\",\n        Close: \"Schließen\",\n        \"Download status\": \"Download Status\",\n        \"Download Speed\": \"Download Geschwindigkeit\",\n        \"Upload Speed\": \"Upload Geschwindigkeit\",\n        \"Estimated time\": \"Geschätzte Zeit\",\n        \"Download Size\": \"Download Größe\",\n        Downloaded: \"Heruntergeladen\",\n        Progress: \"Fortschritt\",\n        \"Download Path\": \"Download Pfad\",\n        Uploaded: \"Hochgeladen\",\n        \"Download GID\": \"Download GID\",\n        \"Number of Pieces\": \"Anzahl der Stücken\",\n        \"Piece Length\": \"Größe der Stücken\"\n      });\n  },\n  function(e, t) {\n    \"undefined\" == typeof translations && (translations = {}),\n      (translations.es_ES = {\n        Search: \"Buscar\",\n        Add: \"Añadir\",\n        \"By URIs\": \"URIs\",\n        \"By Torrents\": \"Torrents\",\n        \"By Metalinks\": \"Metalinks\",\n        Manage: \"Administrar\",\n        \"Pause All\": \"Pausar Todos\",\n        \"Resume Paused\": \"Reanudar Pausados\",\n        \"Purge Completed\": \"Purgar Completados\",\n        \"Shutdown Server\": \"Desactivar servidor\",\n        Settings: \"Ajustes\",\n        \"Connection Settings\": \"Ajustes de Conexión\",\n        \"Global Settings\": \"Ajustes Globales\",\n        \"Server info\": \"Info de Servidor\",\n        \"About and contribute\": \"Acerca y Colaborar\",\n        \"Toggle navigation\": \"Conmutar Navegación\",\n        Miscellaneous: \"Otros\",\n        \"Global Statistics\": \"Estadísticas Globales\",\n        About: \"Acerca de\",\n        Displaying: \"Mostrando\",\n        of: \"de\",\n        downloads: \"descargas\",\n        Language: \"Idioma\",\n        \"Download Filters\": \"Filtros de Descargas\",\n        Running: \"Procesando\",\n        Active: \"Activo\",\n        Waiting: \"Esperando\",\n        Complete: \"Completo\",\n        Error: \"Error\",\n        Paused: \"En Pausa\",\n        Removed: \"Eliminado\",\n        \"Hide linked meta-data\": \"Ocultar metadatos adjuntos\",\n        Toggle: \"Conmutar\",\n        \"Reset filters\": \"Restablecer Filtros\",\n        Verifying: \"Verificando\",\n        \"Verify Pending\": \"Pendiente de verificación\",\n        \"Quick Access Settings\": \"Ajustes Rápidos\",\n        Save: \"Guardar\",\n        \"Save settings\": \"Guardar Ajustes\",\n        \"Currently no download in line to display, use the\":\n          \"En este momento no hay descargas para mostrar. ¡Use la opción\",\n        \"download button to start downloading files!\": \"para empezar a descargar sus archivos!\",\n        Peers: \"Pares\",\n        \"More Info\": \"Mas Info\",\n        Remove: \"Eliminar\",\n        \"# of\": \"# de\",\n        Length: \"Longitud\",\n        \"Add Downloads By URIs\": \"Añadir descargas por URIs\",\n        \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n          \"Añada varias descargas colocando la URI de cada descarga en una línea separada.\",\n        \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n          \"Puede añadir URIs de espejo para *el mismo* archivo. Separe cada URI con un espacio.\",\n        \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\":\n          \"Una URI puede ser HTTP(S), FTP, BitTorrent o Magnet.\",\n        \"Download settings\": \"Ajustes de Descargas\",\n        \"Advanced settings\": \"Ajustes Avanzados\",\n        Cancel: \"Cancelar\",\n        Start: \"Iniciar\",\n        Choose: \"Escoja\",\n        \"Quick Access (shown on the main page)\": \"Acceso Rápido (Se muestra en la pág principal)\",\n        \"Add Downloads By Torrents\": \"Añadir descargas Torrent\",\n        \"- Select the torrent from the local filesystem to start the download.\":\n          \"Seleccione el archivo Torrent de su equipo para iniciar la descarga\",\n        \"- You can select multiple torrents to start multiple downloads.\":\n          \"Puede seleccionar varios torrents\",\n        \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n          \"Para los enlaces Magnet, salga de este cuadro y use la opción Añadir  URI\",\n        \"Select Torrents\": \"Escoja los Torrents\",\n        \"Select a Torrent\": \"Escoja el Torrent\",\n        \"Add Downloads By Metalinks\": \"Añadir descargas Metalink\",\n        \"Select Metalinks\": \"Seleccione el Metalink\",\n        \"- Select the Metalink from the local filesystem to start the download.\":\n          \"Escoja el archivo Metalink de su equipo para iniciar la descarga\",\n        \"- You can select multiple Metalinks to start multiple downloads.\":\n          \"Puede escoger varios archivos Metalink\",\n        \"Select a Metalink\": \"Escoja el archivo Metalink\",\n        \"Choose files to start download for\": \"Escoja los archivos que desea descargar\",\n        \"Select to download\": \"Escoja que descargar\",\n        \"Aria2 RPC host and port\": \"Servidor Aria2 y puerto\",\n        \"Enter the host\": \"Escriba la dirección\",\n        \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n          \"Escriba la dirección o nombre DNS del servidor Aria2 (por defecto: localhost)\",\n        \"Enter the port\": \"Escriba el puerto\",\n        \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n          \"Escriba el número del puerto del servidor Aria2 (por defecto: 6800)\",\n        \"Enter the RPC path\": \"Escriba la ruta RPC\",\n        \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n          \"Escriba la ruta de acceso RPC de Aria2 (por defecto: /jsonrpc)\",\n        \"SSL/TLS encryption\": \"Cifrado SSL/TLS\",\n        \"Enable SSL/TLS encryption\": \"Habilitar Cifrado SSL/TLS\",\n        \"Enter the secret token (optional)\": \"Escriba la frase Token (opcional)\",\n        \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n          \"Escriba la frase Token secreta (vacío si la autenticación está deshabilitada)\",\n        \"Enter the username (optional)\": \"Usuario (opcional)\",\n        \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n          \"Escriba el nombre de usuario (vacío si la autenticación está deshabilitada)\",\n        \"Enter the password (optional)\": \"Escriba la contraseña\",\n        \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n          \"Escriba la contraseña RPC (vacío si la autenticación está deshabilitada)\",\n        \"Enter base URL (optional)\": \"Escriba la URL base (opcional)\",\n        \"Direct Download\": \"Descarga Directa\",\n        \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n          \"Esto permite crear enlaces de descarga de los archivos desde el servidor Aria2\",\n        \"(Requires appropriate webserver to be configured.)\":\n          \"(Requiere configuración apropiada del servidor web)\",\n        \"Save Connection configuration\": \"Guardar Configuración\",\n        Filter: \"Filrar\",\n        \"Aria2 server info\": \"Información de servidor Aria2\",\n        \"Aria2 Version\": \"Aria2 versión\",\n        \"Features Enabled\": \"Funcionalidad disponible\",\n        \"To download the latest version of the project, add issues or to contribute back, head on to\":\n          \"Para obtener la última versión del proyecto, reportar problemas o colaborar, vaya a\",\n        \"Or you can open the latest version in the browser through\":\n          \"Puede abrir la última versión en su navegador, directamente\",\n        Close: \"Cerrar\",\n        \"Download status\": \"Estado de descarga\",\n        \"Download Speed\": \"Velocidad de descarga\",\n        \"Upload Speed\": \"Vel. Subida\",\n        \"Estimated time\": \"Tiempo estimado\",\n        \"Download Size\": \"Tamaño de descarga\",\n        Downloaded: \"Descargado\",\n        Progress: \"Progreso\",\n        \"Download Path\": \"Carpeta de descarga\",\n        Uploaded: \"Subido\",\n        \"Download GID\": \"GID de Descarga\",\n        \"Number of Pieces\": \"N° de Piezas\",\n        \"Piece Length\": \"Tamaño de pieza\",\n        \"The last connection attempt was unsuccessful. Trying another configuration\":\n          \"El último intento de conexión falló. Probando otra configuración\",\n        \"Oh Snap!\": \"Rayos…\",\n        \"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\":\n          \"No se pudo establecer una conexión al servidor Aria2. Reintentando en 10 segundos. Pruebe revisando la configuración en Ajustes > Ajustes de Conexión\",\n        \"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\":\n          \"Autenticación fallida con el servior Aria2 RPC. Reintentando en 10 segundos. Puede que sea necesario revisar su info de autenticación en Ajustes > Ajustes de Conexión\",\n        \"Successfully connected to Aria2 through its remote RPC …\":\n          \"Conexión exitosa con el servidor Aria2 mediante la interfaz RPC\",\n        \"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)\":\n          \"Conexión exitosa con el servidor Aria2 mediante la interfaz RPC, sin embargo la conexión no es segura. Para mejorar la seguridad, añada un token de autorización al iniciar Aria2 (con la opción --rpc-secret)\",\n        \"Trying to connect to aria2 using the new connection configuration\":\n          \"Intentando conectar con el servidor Aria2 usando los nuevos Ajustes de Conexión\"\n      });\n  },\n  function(e, t) {\n    \"undefined\" == typeof translations && (translations = {}),\n      (translations.ru_RU = {\n        Search: \"Поиск\",\n        Add: \"Добавить\",\n        \"By URIs\": \"URL-адреса\",\n        \"By Torrents\": \"Torrent-файлы\",\n        \"By Metalinks\": \"Metalink-файлы\",\n        Manage: \"Управление\",\n        \"Pause All\": \"Приостановить всё\",\n        \"Resume Paused\": \"Возобновить всё\",\n        \"Purge Completed\": \"Удалить завершенные\",\n        Settings: \"Настройки\",\n        \"Connection Settings\": \"Настройки соединения\",\n        \"Global Settings\": \"Глобальные настройки\",\n        \"Server info\": \"Информация о сервере\",\n        \"About and contribute\": \"Информация и сотрудничество\",\n        \"Toggle navigation\": \"Переключение навигации\",\n        Miscellaneous: \"Разное\",\n        \"Global Statistics\": \"Глобальная статистика\",\n        About: \"Об\",\n        Displaying: \"Показано\",\n        of: \"из\",\n        downloads: \"загрузок\",\n        Language: \"Язык\",\n        \"Download Filters\": \"Фильтр загрузок\",\n        Running: \"Запущенные\",\n        Active: \"Активные\",\n        Waiting: \"Ожидающие\",\n        Complete: \"Завершенные\",\n        Error: \"С ошибками\",\n        Paused: \"Приостановленные\",\n        Removed: \"Удаленные\",\n        \"Hide linked meta-data\": \"Скрыть связанные метаданные\",\n        Toggle: \"Переключить\",\n        \"Reset filters\": \"Сбросить фильтры\",\n        \"Quick Access Settings\": \"Настройки быстрого доступа\",\n        \"Save settings\": \"Сохранить настройки\",\n        \"Currently no download in line to display, use the\":\n          \"На данный момент ничего не загружается, используйте кнопку\",\n        \"download button to start downloading files!\": \"чтобы начать загрузку файла!\",\n        Peers: \"Пиры\",\n        \"More Info\": \"Информация\",\n        Remove: \"Удалить\",\n        \"# of\": \"# из\",\n        Length: \"Размер\",\n        \"Add Downloads By URIs\": \"Добавить загрузки из URL-адресов\",\n        \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n          \"- Вы можете добавить несколько загрузок (файлов) одновременно, помещая URL-адреса для каждого файла на отдельной строке.\",\n        \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n          \"- Можно также добавить несколько URL-адресов (зеркал) для *одного* файла. Для этого отделите URL-адреса пробелом.\",\n        \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\":\n          \"- URL-адрес может быть HTTP(S)/FTP/BitTorrent-Magnet.\",\n        \"Download settings\": \"Настройки загрузки\",\n        \"Advanced settings\": \"Расширенные настройки\",\n        Cancel: \"Отмена\",\n        Start: \"Начать\",\n        Choose: \"Выбрать\",\n        \"Quick Access (shown on the main page)\": \"Простой доступ (смотреть на главной странице)\",\n        \"Add Downloads By Torrents\": \"Добавить загрузку из Torrent-файлов\",\n        \"- Select the torrent from the local filesystem to start the download.\":\n          \"- Выберите Torrent-файлы из локальной файловой системы для начала загрузку.\",\n        \"- You can select multiple torrents to start multiple downloads.\":\n          \"- Вы можете выбрать несколько Torrent-файлы для запуска нескольких загрузок.\",\n        \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n          \"- Для добавления BitTorrent-Magnet ссылки воспользуйтесь пунктом меню *Добавить из URL-адреса*\",\n        \"Select Torrents\": \"Выберите торренты\",\n        \"Select a Torrent\": \"Выберите торрент\",\n        \"Add Downloads By Metalinks\": \"Добавить загрузку из Metalink-файлов\",\n        \"Select Metalinks\": \"Выбрать Metalink-файлы\",\n        \"- Select the Metalink from the local filesystem to start the download.\":\n          \"- Выберите Metalink-файлы из локальной файловой системы для начала загрузки\",\n        \"- You can select multiple Metalinks to start multiple downloads.\":\n          \"- Вы можете выбрать несколько Metalink-файлов для запуска нескольких загрузок.\",\n        \"Select a Metalink\": \"Выберите Metalink\",\n        \"Choose files to start download for\": \"Выберите файлы чтобы начать загрузку для\",\n        \"Select to download\": \"Выберите для загрузки\",\n        \"Aria2 RPC host and port\": \"Aria2 RPC хост и порт\",\n        \"Enter the host\": \"Укажите хост\",\n        \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n          \"Укажите IP или DNS-имя сервера, на котором запущена Aria2 со включенным RPC (по умолчанию: localhost)\",\n        \"Enter the port\": \"Укажите порт\",\n        \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n          \"Укажите порт сервера, на котором запущена Aria2 со включенным RPC (по умолчанию: 6800)\",\n        \"Enter the RPC path\": \"Укажите путь RPC\",\n        \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n          \"Укажите конечный путь для Aria2 RPC (по умолчанию: /jsonrpc)\",\n        \"SSL/TLS encryption\": \"SSL/TLS шифрование\",\n        \"Enable SSL/TLS encryption\": \"Разрешить SSL/TLS шифрование\",\n        \"Enter the secret token (optional)\": \"Укажите секретный токен (необязательно)\",\n        \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n          \"Укажите секретный токен Aria2 RPC (оставьте пустым, если авторизация не включена)\",\n        \"Enter the username (optional)\": \"Укажите имя пользователя (необязательно)\",\n        \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n          \"Укажите имя пользователя Aria2 RPC (оставьте пустым, если авторизация не включена)\",\n        \"Enter the password (optional)\": \"Укажите пароль (необязательно)\",\n        \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n          \"Укажите пароль для Aria2 RPC (оставьте пустым, если авторизация не включена)\",\n        \"Enter base URL (optional)\": \"Укажите базовый URL-адрес (необязательно)\",\n        \"Direct Download\": \"Прямая загрузка\",\n        \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n          \"Ссылки (при наличии) будут созданы для загрузки непосредственно с сервера Aria2.\",\n        \"(Requires appropriate webserver to be configured.)\":\n          \"(Требуется соответствующий веб-сервер для настройки.)\",\n        \"Save Connection configuration\": \"Сохранить настройки соединения\",\n        Filter: \"Фильтр\",\n        \"Aria2 server info\": \"Информация о сервере Aria2\",\n        \"Aria2 Version\": \"Версия Aria2\",\n        \"Features Enabled\": \"Имеющийся функционал\",\n        \"To download the latest version of the project, add issues or to contribute back, head on to\":\n          \"Чтобы загрузить последнюю версию проекта, добавить вопросы или внести свой вклад, передите на\",\n        \"Or you can open the latest version in the browser through\":\n          \"Или вы можете открыть последнюю версию в браузере через\",\n        Close: \"Закрыть\",\n        \"Download status\": \"Статус загрузки\",\n        \"Download Speed\": \"Скорость загрузки\",\n        \"Upload Speed\": \"Скорость отдачи\",\n        \"Estimated time\": \"Оставшееся время\",\n        \"Download Size\": \"Размер загрузки\",\n        Downloaded: \"Загружено\",\n        Progress: \"Прогресс\",\n        \"Download Path\": \"Путь к загружаемым файлам\",\n        Uploaded: \"Отдано\",\n        \"Download GID\": \"Загруженый GID\",\n        \"Number of Pieces\": \"Количество частей\",\n        \"Piece Length\": \"Размер частей\",\n        \"Shutdown Server\": \"Выключить сервер\",\n        \"The last connection attempt was unsuccessful. Trying another configuration\":\n          \"Последняя попытка подключения была неудачной. Попробуйте другую конфигурацию\",\n        \"Oh Snap!\": \"Опаньки!\",\n        \"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\":\n          \"Не удалось подключиться к серверу Aria2 RPC. Попытка будет повторена в течение 10 секунд. Вы можете проверить параметры подключения, перейдя в меню Настройки > Настройки соединения\",\n        \"Successfully connected to Aria2 through its remote RPC …\":\n          \"Успешное подключение к Aria2 через удаленный RPC …\",\n        \"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)\":\n          \"Успешное подключение к Aria2 через удаленный RPC, однако соединение все еще небезопасно. Для обеспечения лучшей безопасности добавьте секретный токен авторизации при запуске aria2 (через флаг --rpc-secret)\",\n        \"Trying to connect to aria2 using the new connection configuration\":\n          \"Попытка подключиться к aria2 с использованием новой конфигурации\"\n      });\n  },\n  function(e, t) {\n    \"undefined\" == typeof translations && (translations = {}),\n      (translations.it_IT = {\n        Search: \"Cerca\",\n        Add: \"Aggiungi\",\n        \"By URIs\": \"Da URIs\",\n        \"By Torrents\": \"Da Torrent\",\n        \"By Metalinks\": \"Da Metalink\",\n        Manage: \"Gestione\",\n        \"Pause All\": \"Ferma tutto\",\n        \"Resume Paused\": \"Riprendi fermati\",\n        \"Purge Completed\": \"Togli i completi\",\n        Settings: \"Impostazioni\",\n        \"Connection Settings\": \"Impostazioni di connessione\",\n        \"Global Settings\": \"Impostazioni globali\",\n        \"Server info\": \"Informazioni sul server\",\n        \"About and contribute\": \"Crediti e informazioni\",\n        \"Toggle navigation\": \"Cambia navigazione\",\n        Miscellaneous: \"Varie\",\n        \"Global Statistics\": \"Statistiche globali\",\n        About: \"Info\",\n        Displaying: \"Mostra\",\n        of: \"di\",\n        downloads: \"downloads\",\n        Language: \"Lingua\",\n        \"Download Filters\": \"Filtri download\",\n        Running: \"In corso\",\n        Active: \"Attivi\",\n        Waiting: \"In attesa\",\n        Complete: \"Completi\",\n        Error: \"Errore\",\n        Paused: \"In pausa\",\n        Removed: \"Rimossi\",\n        \"Hide linked meta-data\": \"Nascondi i meta-data collegati\",\n        Toggle: \"Cambia\",\n        \"Reset filters\": \"Reimposta filtri\",\n        \"Quick Access Settings\": \"Accesso rapido\",\n        \"Save settings\": \"Salva impostazioni\",\n        \"Currently no download in line to display, use the\":\n          \"Attualmente non c'è nessun download da mostrare, usa il pulsante \",\n        \"download button to start downloading files!\": \"dowload per cominciare a scaricare!\",\n        Peers: \"Peers\",\n        \"More Info\": \"Altre informazioni\",\n        Remove: \"Rimuovi\",\n        \"# of\": \"# di\",\n        Length: \"Lunghezza\",\n        \"Add Downloads By URIs\": \"Aggiungi Downloads da URIs\",\n        \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n          \"- Puoi aggungere più download(files) allo stesso tempo mettendo un'URI per riga.\",\n        \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n          \"- Puoi anche aggiungere più URI di download(mirror) per uno *stesso* file separando i vari mirror da uno spazio.\",\n        \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\":\n          \"- Un URI può essere un indirizzo HTTP(S)/FTP o un BitTorrent Magnet link.\",\n        \"Download settings\": \"Impostazioni download\",\n        \"Advanced settings\": \"Impostazioni avanzate\",\n        Cancel: \"Cancella\",\n        Start: \"Aggiungi\",\n        Choose: \"Scegli\",\n        \"Quick Access (shown on the main page)\":\n          \"Accesso rapido (mostrato nella pagina principale)\",\n        \"Add Downloads By Torrents\": \"Aggiungi Torrent\",\n        \"- Select the torrent from the local filesystem to start the download.\":\n          \"- Seleziona il file torrent dal tuo computer per iniziare a scaricare.\",\n        \"- You can select multiple torrents to start multiple downloads.\":\n          \"- Puoi aggiungere anche più file contemporaneamente per iniziare più dowload insieme.\",\n        \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n          \"- Per aggiungere un  Magnet Link BitTorrent utilizza l'opzione Aggiungi da URI.\",\n        \"Select Torrents\": \"Seleziona Torrents\",\n        \"Select a Torrent\": \"Seleziona un Torrent\",\n        \"Add Downloads By Metalinks\": \"Aggiungi Torrent da Metalink\",\n        \"Select Metalinks\": \"Seleziona Metalink\",\n        \"- Select the Metalink from the local filesystem to start the download.\":\n          \"- Seleziona un Metalink dal tuo computer per iniziare il download.\",\n        \"- You can select multiple Metalinks to start multiple downloads.\":\n          \"- Puoi iniziare anche più download selezionando più Metalink.\",\n        \"Select a Metalink\": \"Seleziona un Metalink\",\n        \"Choose files to start download for\": \"Scegli i file da scaricare\",\n        \"Select to download\": \"Seleziona per scaricare\",\n        \"Aria2 RPC host and port\": \"Host e porta del server RPC di Aria2\",\n        \"Enter the host\": \"Inserisci l'host\",\n        \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n          \"Inserisci l'IP o il nome DNS del server dov'è in esecuzione l'RPC per Aria2 (default: localhost)\",\n        \"Enter the port\": \"Inserisci la porta\",\n        \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n          \"Inserisci la porta del server dov'è in esecuzione l'RPC per Aria2  (default: 6800)\",\n        \"Enter the RPC path\": \"Inserisci la path RPC\",\n        \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n          \"Inserisci la path per l'endpoint RPC di Aria2 (default: /jsonrpc)\",\n        \"SSL/TLS encryption\": \"Cifratura SSL/TLS\",\n        \"Enable SSL/TLS encryption\": \"Abilita la cifratura SSL/TLS\",\n        \"Enter the secret token (optional)\": \"Inserisci il token segreto (opzionale)\",\n        \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n          \"Inserisci il token segreto per Aria2 (lascia vuoto se non è abilitato)\",\n        \"Enter the username (optional)\": \"Inserisci l'username (opzionale)\",\n        \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n          \"Inserisci l'username per l'RPC di Aria2 (lascia vuoto se non è abilitato)\",\n        \"Enter the password (optional)\": \"Inserisci la password (opzionale)\",\n        \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n          \"Inserisci la password per l'RPC di Aria2 (vuota se l'autenticazione non è abilitata)\",\n        \"Enter base URL (optional)\": \"Inserisci l'URL di base(opzionale)\",\n        \"Direct Download\": \"Downaload diretto\",\n        \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n          \"Se inserito, verrano creati dei link per scaricare direttamente i file dal server Aria2.\",\n        \"(Requires appropriate webserver to be configured.)\":\n          \"(Richiede un webserver correttamente configurato)\",\n        \"Save Connection configuration\": \"Salva la configurazione di connessione\",\n        Filter: \"Filtro\",\n        \"Aria2 server info\": \"Informazioni sul server Aria2\",\n        \"Aria2 Version\": \"Versione di Aria2\",\n        \"Features Enabled\": \"Funzionalità abilitate\",\n        \"To download the latest version of the project, add issues or to contribute back, head on to\":\n          \"Per scaricare l'ultima versione del progetto, aggiungere problemi o contribuire, visita \",\n        \"Or you can open the latest version in the browser through\":\n          \"Oppure puoi aprire l'ultima versione direttamente nel browser\",\n        Close: \"Chiudi\",\n        \"Download status\": \"Stato download\",\n        \"Download Speed\": \"Velocità download\",\n        \"Upload Speed\": \"Velocità upload\",\n        \"Estimated time\": \"Tempo stimato\",\n        \"Download Size\": \"Dimensione del download\",\n        Downloaded: \"Scaricato\",\n        Progress: \"Progresso\",\n        \"Download Path\": \"Percorso di download\",\n        Uploaded: \"Caricato\",\n        \"Download GID\": \"GID Download\",\n        \"Number of Pieces\": \"Numero di segmenti\",\n        \"Piece Length\": \"Lunghezza segmenti\",\n        \"Shutdown Server\": \"Spegni Server\",\n        \"The last connection attempt was unsuccessful. Trying another configuration\":\n          \"L'ultimo tentativo di connessione non è riuscito. Provo un'altra connessione\",\n        \"Oh Snap!\": \"Mannaggia!\",\n        \"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\":\n          \"Non riesco a connettermi al server RPC di Aria2. Riprovo tra 10 secondi. Forse vuoi controllare le impostazioni di connessione in Impostazioni > Impostazioni di connessione\",\n        \"Successfully connected to Aria2 through its remote RPC …\":\n          \"Connesso con successo a Aria2 mediante RPC remoto …\",\n        \"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)\":\n          \"Correttamente connesso al server Aria2 mediante RPC, ma in modo non sicuro. Per una completa sicurezza prova ad aggiungere un token di autorizzazione segreto all'avvio di Aria2 (mediante il flag --rpc-secret)\",\n        \"Trying to connect to aria2 using the new connection configuration\":\n          \"Provo a connettermi a Aria2 attraverso le nuove impostazioni\"\n      });\n  },\n  function(e, t) {\n    \"undefined\" == typeof translations && (translations = {}),\n      (translations.tr_TR = {\n        Search: \"Arama\",\n        Add: \"Ekle\",\n        \"By URIs\": \"URI ile\",\n        \"By Torrents\": \"Torrent ile\",\n        \"By Metalinks\": \"Metalink ile\",\n        Manage: \"Yönet\",\n        \"Pause All\": \"Hepsini Duraklat\",\n        \"Resume Paused\": \"Devam Et\",\n        \"Purge Completed\": \"Temizleme Tamamlandı\",\n        Settings: \"Ayarlar\",\n        \"Connection Settings\": \"Bağlantı Ayarları\",\n        \"Global Settings\": \"Genel Ayarlar\",\n        \"Server info\": \"Sunucu bilgisi\",\n        \"About and contribute\": \"Hakkında ve katkıda bulunanlar\",\n        \"Toggle navigation\": \"Gezinmeyi aç / kapat\",\n        Miscellaneous: \"Çeşitli\",\n        \"Global Statistics\": \"Genel İstatistikler\",\n        About: \"Hakkında\",\n        Displaying: \"Gösteriliyor\",\n        of: \" / \",\n        downloads: \"Indirme\",\n        Language: \"Dil\",\n        \"Download Filters\": \"İndirme Filtreleri\",\n        Running: \"Çalışıyor\",\n        Active: \"Aktif\",\n        Waiting: \"Bekliyor\",\n        Complete: \"Tamamlandı\",\n        Error: \"Hata\",\n        Paused: \"Duraklatıldı\",\n        Removed: \"Silindi\",\n        \"Hide linked meta-data\": \"Bağlı meta verileri gizle\",\n        Toggle: \"aç/kapat\",\n        \"Reset filters\": \"Filtreleri sıfırla\",\n        \"Quick Access Settings\": \"Hızlı Erişim Ayarları\",\n        \"Save settings\": \"Ayarları kaydet\",\n        \"Currently no download in line to display, use the\":\n          \"Şu anda görüntülenebilecek bir indirme yok,\",\n        \"download button to start downloading files!\":\n          \"butonu aracılığı ile dosya indirebilirsiniz!\",\n        Peers: \"Peers\",\n        \"More Info\": \"Daha fazla bilgi\",\n        Remove: \"Kaldır\",\n        \"# of\": \"# dan\",\n        Length: \"Uzunluk\",\n        \"Add Downloads By URIs\": \"URI kullanarak indirmelere ekle\",\n        \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n          \"- Ayrı bir satıra her dosya için URI koyarak aynı anda birden fazla dosya indirebilirsiniz.\",\n        \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n          \"- Aynı dosyalar için birden fazla URI (ayna) da ekleyebilirsiniz. Bunu yapmak için URIları bir boşlukla ayırın.\",\n        \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\":\n          \"- Bir URI, HTTP(S)/FTP/BitTorrent-Magnet olabilir.\",\n        \"Download settings\": \"İndirme ayarları\",\n        \"Advanced settings\": \"Gelişmiş Ayarlar\",\n        Cancel: \"İptal et\",\n        Start: \"Başlat\",\n        Choose: \"Seçiniz\",\n        \"Quick Access (shown on the main page)\": \"Hızlı Erişim (ana sayfada gösterilir)\",\n        \"Add Downloads By Torrents\": \"Torrent kullanarak indirmelere ekle\",\n        \"- Select the torrent from the local filesystem to start the download.\":\n          \"- İndirmeyi başlatmak için yerel dosya sisteminden torrenti seçin.\",\n        \"- You can select multiple torrents to start multiple downloads.\":\n          \"- Birden çok indirmeyi başlatmak için birden çok torrent seçebilirsiniz.\",\n        \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n          \"- BitTorrent-Magnetli bir URL eklemek için, İstek Üzerine Ekle seçeneğini kullanın ve oraya ekleyin.\",\n        \"Select Torrents\": \"Torrentleri seçin\",\n        \"Select a Torrent\": \"Bir Torrent seçin\",\n        \"Add Downloads By Metalinks\": \"Metalink kullanarak indirmelere ekle\",\n        \"Select Metalinks\": \"Metalinkleri seçin\",\n        \"- Select the Metalink from the local filesystem to start the download.\":\n          \"- İndirmeyi başlatmak için yerel dosya sisteminden Metalinki seçin.\",\n        \"- You can select multiple Metalinks to start multiple downloads.\":\n          \"- Birden fazla yüklemeye başlamak için birden fazla Metalink seçebilirsiniz.\",\n        \"Select a Metalink\": \"Bir Metalink Seç\",\n        \"Choose files to start download for\": \"Için indirmeye başlamak için dosyaları seçin\",\n        \"Select to download\": \"Indirmek için seçin\",\n        \"Aria2 RPC host and port\": \"Aria2 RPC ana bilgisayar ve bağlantı noktası\",\n        \"Enter the host\": \"Ana bilgisayar(host) girin\",\n        \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n          \"Aria2 için RPC'nin çalıştığı sunucunun IP veya DNS adını girin (varsayılan: localhost)\",\n        \"Enter the port\": \"Bağlantı noktasını gir\",\n        \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n          \"Aria2 için RPC'nin çalıştığı sunucunun bağlantı noktasını girin (varsayılan: 6800)\",\n        \"Enter the RPC path\": \"RPC yolunu girin\",\n        \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n          \"Aria2 RPC bitiş noktası için yolu girin (varsayılan: / jsonrpc)\",\n        \"SSL/TLS encryption\": \"SSL / TLS şifreleme\",\n        \"Enable SSL/TLS encryption\": \"SSL / TLS şifrelemeyi etkinleştir\",\n        \"Enter the secret token (optional)\": \"Gizli simge girin (isteğe bağlı)\",\n        \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n          \"Aria2 RPC gizli simgesini girin (kimlik doğrulama etkin değilse boş bırakın)\",\n        \"Enter the username (optional)\": \"Kullanıcı adını girin (isteğe bağlı)\",\n        \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n          \"Aria2 RPC kullanıcı adını girin (kimlik doğrulama etkin değilse boş bırakın)\",\n        \"Enter the password (optional)\": \"Parolayı girin (isteğe bağlı)\",\n        \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n          \"Aria2 RPC şifresini girin (kimlik doğrulama etkin değilse boş bırakın)\",\n        \"Enter base URL (optional)\": \"Temel URL'yi girin (isteğe bağlı)\",\n        \"Direct Download\": \"Direkt indirme\",\n        \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n          \"Verilen, bağlantıları aria2 sunucudan doğrudan indirmeyi etkinleştirmek için oluşturulur.\",\n        \"(Requires appropriate webserver to be configured.)\":\n          \"(Uygun web sunucusunun yapılandırılmasını gerektirir.)\",\n        \"Save Connection configuration\": \"Bağlantı yapılandırmasını kaydedin\",\n        Filter: \"Filtre\",\n        \"Aria2 server info\": \"Aria2 sunucu bilgisi\",\n        \"Aria2 Version\": \"Aria2 Sürümü\",\n        \"Features Enabled\": \"Aşağıdaki Özellikler Etkin\",\n        \"To download the latest version of the project, add issues or to contribute back, head on to\":\n          \"Projenin en son sürümünü indirmek için sorun ekleyin veya katkıda bulunun;\",\n        \"Or you can open the latest version in the browser through\":\n          \"Veya en son sürümü tarayıcınız aracılığıyla açabilirsiniz.\",\n        Close: \"Kapat\",\n        \"Download status\": \"İndirme durumu\",\n        \"Download Speed\": \"İndirme hızı\",\n        \"Upload Speed\": \"Yükleme hızı\",\n        \"Estimated time\": \"Tahmini süre\",\n        \"Download Size\": \"İndirme Boyutu\",\n        Downloaded: \"İndirildi\",\n        Progress: \"İlerleme\",\n        \"Download Path\": \"İndirme Yolu\",\n        Uploaded: \"Yüklendi\",\n        \"Download GID\": \"GID'yi indirin\",\n        \"Number of Pieces\": \"Parça sayısı\",\n        \"Piece Length\": \"Parça Uzunluğu\",\n        \"Shutdown Server\": \"Sunucuyu Kapat\",\n        \"The last connection attempt was unsuccessful. Trying another configuration\":\n          \"Son bağlantı girişimi başarısız oldu. Başka bir yapılandırma deneyin\",\n        \"Oh Snap!\": \"HAydaaaaa!\",\n        \"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\":\n          \"Aria2 RPC sunucusuna bağlanılamadı. 10 saniye içinde tekrar deneyecek. Bağlantı ayarlarını, Ayarlar> Bağlantı Ayarları bölümüne giderek kontrol etmek isteyebilirsiniz.\",\n        \"Successfully connected to Aria2 through its remote RPC …\":\n          \"Uzak RPC aracılığıyla Aria2'ye başarıyla bağlandı ...\",\n        \"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)\":\n          \"Uzak RPC aracılığıyla Aria2'ye başarıyla bağlandı ancak bağlantı hala güvende değil. Tam güvenlik için, Aria2'yi başlatırken (--rpc-secret bayrağını kullanın) ve bir yetkilendirme gizli simgesi eklemeyi deneyin.\",\n        \"Trying to connect to aria2 using the new connection configuration\":\n          \"Yeni bağlantı yapılandırmasını kullanarak aria2'ye bağlanmaya çalışılıyor\"\n      });\n  },\n  function(e, t) {\n    \"undefined\" == typeof translations && (translations = {}),\n      (translations.cs_CZ = {\n        Search: \"Hledat\",\n        Add: \"Přidat\",\n        \"By URIs\": \"Z URI\",\n        \"By Torrents\": \"Z torrentu\",\n        \"By Metalinks\": \"Z metalinku\",\n        Manage: \"Spravovat\",\n        \"Pause All\": \"Zastavit vše\",\n        \"Resume Paused\": \"Obnovit zastavené\",\n        \"Purge Completed\": \"Odstranit hotové\",\n        \"Shutdown Server\": \"Vypnout server\",\n        Settings: \"Nastavení\",\n        \"Connection Settings\": \"Nastavení připojení\",\n        \"Global Settings\": \"Obecné nastavení\",\n        \"Server info\": \"Informace o serveru\",\n        \"About and contribute\": \"Informace\",\n        \"Toggle navigation\": \"Přepnout ovládání\",\n        Miscellaneous: \"Různé\",\n        \"Global Statistics\": \"Globální statistika\",\n        About: \"Informace\",\n        Displaying: \"Zobrazuji\",\n        of: \"z\",\n        downloads: \"stahování\",\n        Language: \"Jazyk\",\n        \"Download Filters\": \"Filtry stahování\",\n        Running: \"Stahují se\",\n        Active: \"Aktivní\",\n        Waiting: \"Čekající\",\n        Complete: \"Hotové\",\n        Error: \"Chyba\",\n        Paused: \"Zastavené\",\n        Removed: \"Odstraněné\",\n        \"Hide linked meta-data\": \"Skrýt připojená meta-data\",\n        Toggle: \"Prohodit\",\n        \"Reset filters\": \"Smazat filtry\",\n        Verifying: \"Ověřování\",\n        \"Verify Pending\": \"Čekání na ověření\",\n        \"Quick Access Settings\": \"Rychlé nastavení\",\n        Save: \"Uložit\",\n        \"Save settings\": \"Uložit nastavení\",\n        \"Currently no download in line to display, use the\": \"Není co zobrazit, použijte\",\n        \"download button to start downloading files!\": \"tlačítko pro stáhnutí souborů!\",\n        Peers: \"Zdroje\",\n        \"More Info\": \"Víc informací\",\n        Remove: \"Odstranit\",\n        \"# of\": \"# z\",\n        Length: \"Délka\",\n        \"Add Downloads By URIs\": \"Přidat stahování z URI\",\n        \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n          \"- Můžete začít stahovat více souborů v jeden okamžik, tak že na každý řádek dáte jinou URI\",\n        \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n          \"- Také můžete přidat více URI (Zrcadel) pro *stejný* soubor, tak že je dáte na jeden řádek oddělené mezerou \",\n        \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\":\n          \"- URI může být HTTP(S)/FTP/BitTorrent-Magnet.\",\n        \"Download settings\": \"Nastavení stahování\",\n        \"Advanced settings\": \"Pokročilé nastavení\",\n        Cancel: \"Zrušit\",\n        Start: \"Spustit\",\n        Choose: \"Zvolit\",\n        \"Quick Access (shown on the main page)\": \"Rychlý přístup (Zobrazení na hlavní stránce)\",\n        \"Add Downloads By Torrents\": \"Přidat stahování z torrentu\",\n        \"- Select the torrent from the local filesystem to start the download.\":\n          \"- Pro stahování vyberte torrent soubor z disku\",\n        \"- You can select multiple torrents to start multiple downloads.\":\n          \" - Můžete zvolit víc torrentů pro spuštění více stahování\",\n        \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n          '- Pro stahování pomocí BitTorrent-Magnet URL, použijte možnost \"Z URI\"',\n        \"Select Torrents\": \"Vyberte torrenty\",\n        \"Select a Torrent\": \"Vyberte torrent\",\n        \"Add Downloads By Metalinks\": \"Přidat stahovní pomocí metalinku\",\n        \"Select Metalinks\": \"Výběr metalinků\",\n        \"- Select the Metalink from the local filesystem to start the download.\":\n          \"- Pro stahování vyberte metalink soubor z disku\",\n        \"- You can select multiple Metalinks to start multiple downloads.\":\n          \"- Můžete zvolit víc mentalinků pro spuštění více stahování\",\n        \"Select a Metalink\": \"Vyberte metalink\",\n        \"Choose files to start download for\": \"Vyberte soubory pro stažení\",\n        \"Select to download\": \"Vyberte ke stažení\",\n        \"Aria2 RPC host and port\": \"Aria2 RPC host a port\",\n        \"Enter the host\": \"Zadejte hosta\",\n        \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n          \"Zadejte IP nebo DNS jméno serveru na kterém běží Aria2 RPC (výchozí: localhost)\",\n        \"Enter the port\": \"Zadejte port\",\n        \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n          \"Zadejte port serveru na kterém běží Aria2 RPC (výchozí: 6800)\",\n        \"Enter the RPC path\": \"Zadejte cestu k RPC\",\n        \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n          \"Zadejte cestu k endpointu Aria2 RPC (výchozí: /jsonrpc)\",\n        \"SSL/TLS encryption\": \"SSL/TLS šifrování\",\n        \"Enable SSL/TLS encryption\": \"Zapnout SSL/TLS šifrování\",\n        \"Enter the secret token (optional)\": \"Zadejte bezpečnostní token (volitelné)\",\n        \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n          \"Zadejte bezpečnostní token k Aria2 RPC (nechte prázné pokud autentifikace není nastavena)\",\n        \"Enter the username (optional)\": \"Zadejte uživatelské jméno (volitelné)\",\n        \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n          \"Zadejte uživatelské jméno pro Aria2 RPC (nechte prázné pokud autentifikace není nastavena)\",\n        \"Enter the password (optional)\": \"Zadejte heslo (volitelné)\",\n        \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n          \"Zadej heslo k Aria2 RPC (nechte prázné pokud autentifikace není nastavena)\",\n        \"Enter base URL (optional)\": \"Zadejte kořenovou URL serveru (volitelné)\",\n        \"Direct Download\": \"Přímé stažení\",\n        \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n          \"Jestliže je nastaveno, je možné stáhnout soubor přímo z Aria2 serveru.\",\n        \"(Requires appropriate webserver to be configured.)\":\n          \"(Je třeba udělat patřičnou konfiguraci webserveru)\",\n        \"Save Connection configuration\": \"Uložit nastavení\",\n        Filter: \"Filtr\",\n        \"Aria2 server info\": \"Informace o Aria2 serveru\",\n        \"Aria2 Version\": \"Verze Aria2\",\n        \"Features Enabled\": \"Zapnuté funkce\",\n        \"To download the latest version of the project, add issues or to contribute back, head on to\":\n          \"Ke stažení aktuální verze, nahlášení problému či přispění, zamiřte na\",\n        \"Or you can open the latest version in the browser through\":\n          \"Nebo můžete spustit aktuální verzi pomocí:\",\n        Close: \"Zavřít\",\n        \"Download status\": \"Stav stahování\",\n        \"Download Speed\": \"Rychlost stahování\",\n        \"Upload Speed\": \"Rychlost nahrávání\",\n        \"Estimated time\": \"Odhadovaný čas\",\n        \"Download Size\": \"Velikost\",\n        Downloaded: \"Staženo\",\n        Progress: \"Průběh\",\n        \"Download Path\": \"Cesta\",\n        Uploaded: \"Nahráno\",\n        \"Download GID\": \"GID\",\n        \"Number of Pieces\": \"Počet fragmentů\",\n        \"Piece Length\": \"Délka fragmentu\",\n        \"The last connection attempt was unsuccessful. Trying another configuration\":\n          \"Poslední pokus o připojení se nezdařil. Zkuste jiné nastavení\",\n        \"Oh Snap!\": \"A sakra!\",\n        \"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\":\n          \"Nemohu se připojit k Aria2 RPC serveru. Zkusím to znovu za 10 sekund. Možná by se to chtělo podívat do Nastavení > Nastavení připojení\",\n        \"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\":\n          \"Během připojování k Aria2 RPC serveru selhala autentifikace. Zkusím to znovu za 10 sekund. Možná by se to chtělo podívat do Nastavení > Nastavení připojení\",\n        \"Successfully connected to Aria2 through its remote RPC …\":\n          \"Úspěšně připojeno k Aria2 pomocí RPC...\",\n        \"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)\":\n          \"Úspěšně připojeno k Aria2 pomocí RPC, ale připojení není zabezpečené. Pro úplné zabezpečení přidejte bezpečnostní token při spuštění Aria2 (pomocí možnosti --rpc-secret) \",\n        \"Trying to connect to aria2 using the new connection configuration\":\n          \"Zkouším se připojit k Aria2 za pomocí nového nastavení\",\n        \"Remove {{name}} and associated meta-data?\": \"Odstranit {{name}} a příslušná meta-data?\"\n      });\n  },\n  function(e, t) {\n    \"undefined\" == typeof translations && (translations = {}),\n      (translations.fa_IR = {\n        Search: \"جستجو\",\n        Add: \"اضافه کردن\",\n        \"By URIs\": \"بر اساس مسیر سایت\",\n        \"By Torrents\": \"بر اساس تورنت\",\n        \"By Metalinks\": \"بر اساس متا لینک\",\n        Manage: \"مدیریت\",\n        \"Pause All\": \"توقف همه\",\n        \"Resume Paused\": \"ادامه متوقف شده ها\",\n        \"Purge Completed\": \"حذف تکمیل شده ها\",\n        \"Shutdown Server\": \"خاموش کردن سرور\",\n        Settings: \"تنظیمات\",\n        \"Connection Settings\": \"تنظیمات ارتباط\",\n        \"Global Settings\": \"تنظیمات سراسری\",\n        \"Server info\": \"اطلاعات سرور\",\n        \"About and contribute\": \"درباره و مشارکت\",\n        \"Toggle navigation\": \"تغییر ناوبری\",\n        Miscellaneous: \"متفرقه\",\n        \"Global Statistics\": \"آمار سراسری\",\n        About: \"درباره\",\n        Displaying: \"نمایش\",\n        of: \"از\",\n        downloads: \"دانلودها\",\n        Language: \"زبان\",\n        \"Download Filters\": \"دانلود فیلترها\",\n        Running: \"در حال اجرا\",\n        Active: \"فعال\",\n        Waiting: \"در انتظار\",\n        Complete: \"تمام شده\",\n        Error: \"خطا\",\n        Paused: \"متوقف شده\",\n        Removed: \"حذف شده\",\n        \"Hide linked meta-data\": \"مخفی کردن متا داده مرتبط\",\n        Toggle: \"تغییر وضعیت\",\n        \"Reset filters\": \"حذف فیلترها\",\n        Verifying: \"تأیید کردن\",\n        \"Verify Pending\": \"تأیید کردن در انتظارها\",\n        \"Quick Access Settings\": \"تنظیمات دسترسی سریع\",\n        Save: \"ذخیره\",\n        \"Save settings\": \"ذخیره تنظیمات\",\n        \"Currently no download in line to display, use the\":\n          \"در حال حاضر هیچ دانلودی برای نمایش وجود ندارد، استفاده از\",\n        \"download button to start downloading files!\": \"دکمه دانلود برای شروع دانلود فایل ها!\",\n        Peers: \"همتایان\",\n        \"More Info\": \"اطلاعات بیشتر\",\n        Remove: \"حذف\",\n        \"# of\": \"از #\",\n        Length: \"طول\",\n        \"Add Downloads By URIs\": \"اضافه کردن دانلود توسط لینک ها\",\n        \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n          \"- شما می توانید چند بار دانلود (فایل ها) را همزمان با قرار دادن URI ها برای هر فایل در یک خط جداگانه اضافه کنید.\",\n        \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n          \"- شما همچنین می توانید URI های متعدد (آینه ها) را برای فایل *همان* اضافه کنید. برای انجام این کار، URI ها را با یک فضای جداگانه جدا کنید.\",\n        \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\":\n          \"- یک URI می تواند HTTP (S) / FTP / BitTorrent-Magnet باشد.\",\n        \"Download settings\": \"تنظیمات دانلود\",\n        \"Advanced settings\": \"تنظیمات پیشرفته\",\n        Cancel: \"لغو\",\n        Start: \"شروع\",\n        Choose: \"انتخاب\",\n        \"Quick Access (shown on the main page)\": \"دسترسی سریع (نشان داده شده در صفحه اصلی)\",\n        \"Add Downloads By Torrents\": \"اضافه کردن دانلود توسط تورنت\",\n        \"- Select the torrent from the local filesystem to start the download.\":\n          \"- تورنت را از سیستم فایل محلی انتخاب کنید تا دانلود را شروع کنید.\",\n        \"- You can select multiple torrents to start multiple downloads.\":\n          \"- شما می توانید چندین تورنت را برای شروع بارگیری چندگانه انتخاب کنید.\",\n        \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n          \"- برای اضافه کردن URL BitTorrent-Magnet، از گزینه بر اساس مسیر سایت استفاده کنید و آن را در آنجا اضافه کنید.\",\n        \"Select Torrents\": \"تورنت ها را انتخاب کنید\",\n        \"Select a Torrent\": \"تورنتی را انتخاب کنید\",\n        \"Add Downloads By Metalinks\": \"متالینک ها را انتخاب کنید\",\n        \"Select Metalinks\": \"Metalinks را انتخاب کنید\",\n        \"- Select the Metalink from the local filesystem to start the download.\":\n          \"- Metalink را از سیستم فایل محلی انتخاب کنید تا دانلود را شروع کنید.\",\n        \"- You can select multiple Metalinks to start multiple downloads.\":\n          \"- شما می توانید چندین Metalinks را برای شروع چندین بار انتخاب کنید.\",\n        \"Select a Metalink\": \"Metalink را انتخاب کنید\",\n        \"Choose files to start download for\": \"فایل را برای شروع دانلود انتخاب کنید\",\n        \"Select to download\": \"برای دانلود انتخاب کنید\",\n        \"Aria2 RPC host and port\": \"میزبان و پورت Aria2 RPC\",\n        \"Enter the host\": \"میزبان را وارد کنید\",\n        \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n          \"نام IP یا DNS سرور که RPC برای Aria2 در حال اجرا است را وارد کنید (به طور پیش فرض: localhost)\",\n        \"Enter the port\": \"پورت را وارد کنید\",\n        \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n          \"پورت سرور که RPC برای Aria2 اجرا می شود را وارد کنید (به طور پیش فرض: 6800)\",\n        \"Enter the RPC path\": \"مسیر RPC را وارد کنید\",\n        \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n          \"مسیر نقطه پایانی Aria2 RPC را وارد کنید (default: / jsonrpc)\",\n        \"SSL/TLS encryption\": \"SSL / TLS رمزگذاری\",\n        \"Enable SSL/TLS encryption\": \"SSL / TLS رمزگذاری را فعال کنید\",\n        \"Enter the secret token (optional)\": \"رمز نشانه (اختیاری) را وارد کنید\",\n        \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n          \"کد مخفی Aria2 RPC را وارد کنید (اگر احراز هویت فعال نمی شود خالی بگذارید)\",\n        \"Enter the username (optional)\": \"نام کاربری (اختیاری) را وارد کنید\",\n        \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n          \"نام کاربری Aria2 RPC را وارد کنید (خالی اگر احراز هویت غیر فعال شود)\",\n        \"Enter the password (optional)\": \"رمز عبور را وارد کنید (اختیاری)\",\n        \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n          \"گذرواژه Aria2 RPC را وارد کنید (اگر احراز هویت فعال نمی شود خالی بگذارید)\",\n        \"Enter base URL (optional)\": \"URL پایه را وارد کنید (اختیاری)\",\n        \"Direct Download\": \"دانلود مستقیم\",\n        \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n          \"در صورت عرضه، لینک برای ایجاد مستقیم دانلود از سرور Aria2 ایجاد خواهد شد.\",\n        \"(Requires appropriate webserver to be configured.)\":\n          \"(نیاز به وب سرور مناسب برای پیکربندی.)\",\n        \"Save Connection configuration\": \"ذخیره پیکربندی اتصال\",\n        Filter: \"فیلتر\",\n        \"Aria2 server info\": \"مشخصات سرور Aria2\",\n        \"Aria2 Version\": \"نسخه Aria2\",\n        \"Features Enabled\": \"ویژگی های فعال\",\n        \"To download the latest version of the project, add issues or to contribute back, head on to\":\n          \"برای دانلود آخرين نسخه پروژه، مسائل را اضافه کنيد يا به پشتيبانی بپردازيد بروید به\",\n        \"Or you can open the latest version in the browser through\":\n          \"یا شما می توانید آخرین نسخه را از طریق مرورگر باز کنید\",\n        Close: \"بستن\",\n        \"Download status\": \"وضعیت دانلود\",\n        \"Download Speed\": \"سرعت دانلود\",\n        \"Upload Speed\": \"سرعت آپلود\",\n        \"Estimated time\": \"زمان تخمین زده شده\",\n        \"Download Size\": \"اندازه دانلود\",\n        Downloaded: \"دانلود شده\",\n        Progress: \"پیشرفت\",\n        \"Download Path\": \"مسیر دانلود\",\n        Uploaded: \"آپلود شده\",\n        \"Download GID\": \"دانلود GID\",\n        \"Number of Pieces\": \"تعداد قطعات\",\n        \"Piece Length\": \"طول قطعه\",\n        \"The last connection attempt was unsuccessful. Trying another configuration\":\n          \"آخرین تلاش اتصال ناموفق بود. تلاش برای تنظیم دیگر\",\n        \"Oh Snap!\": \"اوه نه!\",\n        \"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\":\n          \"نمی توان به سرور aria2 RPC متصل شد. در 10 ثانیه دوباره تلاش خواهیم کرد ممکن است بخواهید تنظیمات اتصال را با رفتن به تنظیمات > تنظیمات اتصال بررسی کنید\",\n        \"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\":\n          \"در هنگام اتصال به سرور Aria2 RPC تأییدیه شکست خورد. در 10 ثانیه دوباره تلاش خواهیم کرد ممکن است بخواهید جزئیات احراز هویت خود را با رفتن به تنظیمات > تنظیمات اتصال تایید کنید\",\n        \"Successfully connected to Aria2 through its remote RPC …\":\n          \"با موفقیت از طریق RPC از راه دور به Aria2 متصل شد ...\",\n        \"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)\":\n          \"با موفقیت به Aria2 از طریق RPC راه دور متصل شد، اما اتصال هنوز ناامن است. برای امنیت کامل سعی کنید مجوز نشانه مجوز را در هنگام شروع Aria2 (از طریق پرچم --rpc-secret)\",\n        \"Trying to connect to aria2 using the new connection configuration\":\n          \"تلاش برای اتصال به aria2 با استفاده از پیکربندی اتصال جدید\",\n        \"Remove {{name}} and associated meta-data?\": \"حذف {{name}} و متا داده های مرتبط\"\n      });\n  },\n  function(e, t) {\n    \"undefined\" == typeof translations && (translations = {}),\n      (translations.id_ID = {\n        Search: \"Telusuri\",\n        Add: \"Tambah\",\n        \"By URIs\": \"Dari URI\",\n        \"By Torrents\": \"Dari Torrent\",\n        \"By Metalinks\": \"Dari Metalink\",\n        Manage: \"Kelola\",\n        \"Pause All\": \"Jeda Semua\",\n        \"Resume Paused\": \"Lanjut yang Dijeda\",\n        \"Purge Completed\": \"Hapus yang Terunduh\",\n        \"Shutdown Server\": \"Matikan Peladen\",\n        Settings: \"Pengaturan\",\n        \"Connection Settings\": \"Pengaturan Koneksi\",\n        \"Global Settings\": \"Pengaturan Global\",\n        \"Server info\": \"Info peladen\",\n        \"About and contribute\": \"Tentang dan kontribusi\",\n        \"Toggle navigation\": \"Alihkan navigasi\",\n        Miscellaneous: \"Lain-lain\",\n        \"Global Statistics\": \"Statistik Global\",\n        About: \"Tentang\",\n        Displaying: \"Tampilan\",\n        of: \"dari\",\n        downloads: \"unduhan\",\n        Language: \"Bahasa\",\n        \"Download Filters\": \"Saring Unduhan\",\n        Running: \"Berjalan\",\n        Active: \"Aktif\",\n        Waiting: \"Menunggu\",\n        Complete: \"Selesai\",\n        Error: \"Galat\",\n        Paused: \"Dijeda\",\n        Removed: \"Dihapus\",\n        \"Hide linked meta-data\": \"Sembunyikan tautan meta-data\",\n        Toggle: \"Tombol alihan\",\n        \"Reset filters\": \"Reset penyaring\",\n        Verifying: \"Memverifikasi\",\n        \"Verify Pending\": \"Verifikasi Ditunda\",\n        \"Quick Access Settings\": \"Pengaturan Akses Cepat\",\n        Save: \"Simpan\",\n        \"Save settings\": \"Simpan pengaturan\",\n        \"Currently no download in line to display, use the\":\n          \"Sekarang tak ada unduhan yang ditampilkan, gunakan\",\n        \"download button to start downloading files!\": \"tombol unduh untuk mulai mengunduh berkas!\",\n        Peers: \"Peer\",\n        \"More Info\": \"Info Lengkap\",\n        Remove: \"Hapus\",\n        \"# of\": \"# dari\",\n        Length: \"Ukuran\",\n        \"Add Downloads By URIs\": \"Unduh dari URI\",\n        \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n          \"- Anda dapat menambah banyak unduhan (berkas) sekali waktu dg menaruh URI setiap berkas dlm baris terpisah.\",\n        \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n          \"- Anda juga dapat menambah banyak URI (cermin) untuk berkas yang *sama*. Pisahkan URI dengan spasi.\",\n        \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\":\n          \"- URI dapat berbentuk HTTP(S)/FTP/BitTorrent-Magnet.\",\n        \"Download settings\": \"Pengaturan unduhan\",\n        \"Advanced settings\": \"Pengaturan mahir\",\n        Cancel: \"Batal\",\n        Start: \"Mulai\",\n        Choose: \"Pilih\",\n        \"Quick Access (shown on the main page)\": \"Akses Cepat (terlihat di laman utama)\",\n        \"Add Downloads By Torrents\": \"Unduh dari Torrent\",\n        \"- Select the torrent from the local filesystem to start the download.\":\n          \"- Pilih torrent dari sistem berkas lokal untuk mulai mengunduh.\",\n        \"- You can select multiple torrents to start multiple downloads.\":\n          \"Anda dapat memilih banyak torrent untuk memulai multi unduh.\",\n        \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n          \"Untuk menambah BitTorrent-Magnet URL, pakai opsi Tambah dari URI dan tambahkan di situ.\",\n        \"Select Torrents\": \"Pilih Torrent\",\n        \"Select a Torrent\": \"Pilih Torrent\",\n        \"Add Downloads By Metalinks\": \"Unduh dari Metalink\",\n        \"Select Metalinks\": \"Pilih Metalink\",\n        \"- Select the Metalink from the local filesystem to start the download.\":\n          \"- Pilih Metalink dari sistem berkas lokal untuk mulai mengunduh.\",\n        \"- You can select multiple Metalinks to start multiple downloads.\":\n          \"- Anda dapat memilih banyak Metalink untuk mulai multi unduh.\",\n        \"Select a Metalink\": \"Pilih Metalink\",\n        \"Choose files to start download for\": \"Pilih berkas untuk mulai mengunduh\",\n        \"Select to download\": \"Pilih untuk mengunduh\",\n        \"Aria2 RPC host and port\": \"Port dan host RPC Aria2\",\n        \"Enter the host\": \"Masukkan host\",\n        \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n          \"Masukkan IP atau nama DNS peladen tempat RPC Aria2 berjalan (asali: localhost)\",\n        \"Enter the port\": \"Masukkan porta\",\n        \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n          \"Masukkan porta peladen tempat RPC Aria2 berjalan (asali: 6800)\",\n        \"Enter the RPC path\": \"Masukkan path RPC\",\n        \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n          \"Masukkan path untuk endpoint RPC Aria2 (asali: /jsonrpc)\",\n        \"SSL/TLS encryption\": \"Enkripsi SSL/TLS\",\n        \"Enable SSL/TLS encryption\": \"Aktifkan enkripsi SSL/TLS\",\n        \"Enter the secret token (optional)\": \"Masukkan token rahasia (opsional)\",\n        \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n          \"Masukkan token rahasia RPC Aria2 (kosongkan jika otentifikasi tidak aktif)\",\n        \"Enter the username (optional)\": \"Masukkan username (opsional)\",\n        \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n          \"Masukkan username RPC Aria2 (kosongkan jika otentifikasi tidak aktif)\",\n        \"Enter the password (optional)\": \"Masukkan kata sandi (opsional)\",\n        \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n          \"Masukkan kata sandi RPC Aria2 (kosongkan jika otentifikasi tidak aktif)\",\n        \"Enter base URL (optional)\": \"Masukkan URL dasar (opsional)\",\n        \"Direct Download\": \"Unduh Langsung\",\n        \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n          \"Jika tersedia, tautan akan dibuat untuk mengaktifkan unduhan langsung dari peladen Aria2.\",\n        \"(Requires appropriate webserver to be configured.)\":\n          \"(Mewajibkan webserver yang perlu dikonfigurasi)\",\n        \"Save Connection configuration\": \"Simpan konfigurasi Koneksi\",\n        Filter: \"Saring\",\n        \"Aria2 server info\": \"Info peladen Aria2\",\n        \"Aria2 Version\": \"Versi Aria2\",\n        \"Features Enabled\": \"Fitur yang Aktif\",\n        \"To download the latest version of the project, add issues or to contribute back, head on to\":\n          \"Untuk mengunduh versi terkini proyek, tambahkan isu atau kontribusi balik ke\",\n        \"Or you can open the latest version in the browser through\":\n          \"Atau Anda dapat membuka versi terkini via peramban lewat\",\n        Close: \"Tutup\",\n        \"Download status\": \"Status unduh\",\n        \"Download Speed\": \"Kecepatan unduh\",\n        \"Upload Speed\": \"Kecepatan unggah\",\n        \"Estimated time\": \"Waktu estimasi\",\n        \"Download Size\": \"Ukuran unduh\",\n        Downloaded: \"Terunduh\",\n        Progress: \"Proses\",\n        \"Download Path\": \"Path unduh\",\n        Uploaded: \"Terunggah\",\n        \"Download GID\": \"GID unduh\",\n        \"Number of Pieces\": \"Jumlah Bagian\",\n        \"Piece Length\": \"Ukuran Bagian\",\n        \"The last connection attempt was unsuccessful. Trying another configuration\":\n          \"Usaha koneksi terakhir gagal. Coba konfigurasi lain\",\n        \"Oh Snap!\": \"Oh Sial!\",\n        \"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\":\n          \"Tak dapat terkoneksi ke peladen RPC aria2. Akan diulang dalam 10 detik. Anda mungkin ingin menguji pengaturan koneksi melalui Pengaturan > Pengaturan Koneksi\",\n        \"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\":\n          \"Otentifikasi gagal saat membuka koneksi ke peladen RPC Aria2. Akan diulang dalam 10 detik. Anda mungkin ingin mengonfirmasi detail otentifikasi di Pengaturan > Pengaturan Koneksi\",\n        \"Successfully connected to Aria2 through its remote RPC …\":\n          \"Sukses terkoneksi ke Aria2 melalui remot RPC …\",\n        \"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)\":\n          \"Sukses terkoneksi ke Aria2 melalui remot RPC, bagaimanapun koneksi masih tidak aman. Untuk melengkapi keamanan coba tambahkan token rahasia otorisasi saat memulai Aria2 (lewat flag --rpc-secret)\",\n        \"Trying to connect to aria2 using the new connection configuration\":\n          \"Mencoba koneksi ke aria2 menggunakan konfigurasi koneksi baru\",\n        \"Remove {{name}} and associated meta-data?\":\n          \"Hapus {{name}} dan meta-data yang berhubungan?\"\n      });\n  },\n  function(e, t) {\n    \"undefined\" == typeof translations && (translations = {}),\n      (translations.pt_BR = {\n        Search: \"Buscar\",\n        Add: \"Adicionar\",\n        \"By URIs\": \"Por URIs\",\n        \"By Torrents\": \"Por Torrents\",\n        \"By Metalinks\": \"Por Metalinks\",\n        Manage: \"Gerenciar\",\n        \"Pause All\": \"Pausar Todos\",\n        \"Resume Paused\": \"Retomar Pausados\",\n        \"Purge Completed\": \"Remover Completados\",\n        \"Shutdown Server\": \"Desligar Servidor\",\n        Settings: \"Configurações\",\n        \"Connection Settings\": \"Configurações de Conexão\",\n        \"Global Settings\": \"Configurações Globais\",\n        \"Server info\": \"Informações do Servidor\",\n        \"About and contribute\": \"Sobre e contribuições\",\n        \"Toggle navigation\": \"Alternar navegação\",\n        Miscellaneous: \"Miscelânia\",\n        \"Global Statistics\": \"Estatísticas Globais\",\n        About: \"Sobre\",\n        Displaying: \"Mostrando\",\n        of: \"de\",\n        downloads: \"downloads\",\n        Language: \"Linguagem\",\n        \"Download Filters\": \"Filtros de Download\",\n        Running: \"Rodando\",\n        Active: \"Ativo\",\n        Waiting: \"Esperando\",\n        Complete: \"Completo\",\n        Error: \"Erro\",\n        Paused: \"Pausado\",\n        Removed: \"Removido\",\n        \"Hide linked meta-data\": \"Esconder metadados ligados\",\n        Toggle: \"Alternar\",\n        \"Reset filters\": \"Limpar filtros\",\n        Verifying: \"Verificando\",\n        \"Verify Pending\": \"Verificação Pendente\",\n        \"Quick Access Settings\": \"Acesso Rápido às Configurações\",\n        Save: \"Salvar\",\n        \"Save settings\": \"Salvar configurações\",\n        \"Currently no download in line to display, use the\":\n          \"No momento não existem downloads para mostrar, utilize botão\",\n        \"download button to start downloading files!\": \"pra iniciar a transferência de arquivos!\",\n        Peers: \"Peers\",\n        \"More Info\": \"Mais informações\",\n        Remove: \"Remover\",\n        \"# of\": \" de\",\n        Length: \"Tamanho\",\n        \"Add Downloads By URIs\": \"Adicionar Downloads por URIs\",\n        \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n          \"- Você pode adicionar múltiplos downloads (arquivos) ao mesmo tempo inserindo a URI de cada arquivo em uma linha separada.\",\n        \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n          \"- Você também pode adicionar múltiplas URIs (mirrors) para o *mesmo* arquivo. Para fazer isto, separe as URIs por um espaço.\",\n        \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\":\n          \"- Uma URI pode ser HTTP(S)/FTP/BitTorrent-Magnet.\",\n        \"Download settings\": \"Configurações de download\",\n        \"Advanced settings\": \"Configurações avançadas\",\n        Cancel: \"Cancelar\",\n        Start: \"Iniciar\",\n        Choose: \"Escolher\",\n        \"Quick Access (shown on the main page)\": \"Acesso Rápido (exibido na página principal)\",\n        \"Add Downloads By Torrents\": \"Adicionar Downloads por Torrents\",\n        \"- Select the torrent from the local filesystem to start the download.\":\n          \"- Selecione o torrent de seu sistema de arquivos local para iniciar o download.\",\n        \"- You can select multiple torrents to start multiple downloads.\":\n          \"- Você pode selecionar múltiplos torrents para iniciar múltiplos downloads.\",\n        \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n          \"- Para adicionar uma URL BitTorrent-Magnet, utilize a opção Adicionar por URI.\",\n        \"Select Torrents\": \"Selecione Torrents\",\n        \"Select a Torrent\": \"Selecione um Torrent\",\n        \"Add Downloads By Metalinks\": \"Adicionar Downloads por Metalinks\",\n        \"Select Metalinks\": \"Selecione Metalinks\",\n        \"- Select the Metalink from the local filesystem to start the download.\":\n          \"- Selecione o Metalink do seu sistema de arquivos local para iniciar o download.\",\n        \"- You can select multiple Metalinks to start multiple downloads.\":\n          \"- Você pode selecionar múltiplos Metalinks para iniciar múltiplos downloads.\",\n        \"Select a Metalink\": \"Selecione um Metalink\",\n        \"Choose files to start download for\": \"Selecione os arquvos para serem baixados\",\n        \"Select to download\": \"Selecione para baixar\",\n        \"Aria2 RPC host and port\": \"Host e porta do RPC Aria2\",\n        \"Enter the host\": \"Informe o host\",\n        \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n          \"Informe o IP ou nome DNS do servidor no qual o RPC do Aria2 está rodando (default: localhost)\",\n        \"Enter the port\": \"Informe a porta\",\n        \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n          \"Informe a porta do servidor no qual o RPC do Aria2 está rodando (default: 6800)\",\n        \"Enter the RPC path\": \"Informe o caminho RPC\",\n        \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n          \"Informe o caminho para o endpoint RPC do Aria2 (default: /jasonrpc)\",\n        \"SSL/TLS encryption\": \"Criptografia SSL/TLS\",\n        \"Enable SSL/TLS encryption\": \"Habilita criptografia SSL/TLS\",\n        \"Enter the secret token (optional)\": \"Informe o token secreto (opcional)\",\n        \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n          \"Informe o token secreto do RPC Aria2 (deixe vazio se a autenticação não estiver habilitada)\",\n        \"Enter the username (optional)\": \"Informe o usuário (opcional)\",\n        \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n          \"Informe o usuário RPC do Aria2 (vazio se a autenticação não estiver habilitada)\",\n        \"Enter the password (optional)\": \"Informe a senha (opcional)\",\n        \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n          \"Informe a senha RPC do Aria2 (vazio se a autenticação não estiver habilitada)\",\n        \"Enter base URL (optional)\": \"Informe a URL base (opcional)\",\n        \"Direct Download\": \"Download Direto\",\n        \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n          \"Se fornecido, links serão criados para permitir download direto do servidor Aria2.\",\n        \"(Requires appropriate webserver to be configured.)\":\n          \"(Requer servidor web apropriado a ser configurado.)\",\n        \"Save Connection configuration\": \"Salvar Configuração de conexão\",\n        Filter: \"Filtrar\",\n        \"Aria2 server info\": \"Informações do servidor Aria2\",\n        \"Aria2 Version\": \"Verão do Aria2\",\n        \"Features Enabled\": \"Opções Habilitadas\",\n        \"To download the latest version of the project, add issues or to contribute back, head on to\":\n          \"Para baixar a última versão do projeto, reportar problemas ou contribuir, acesse\",\n        \"Or you can open the latest version in the browser through\":\n          \"Ou você pode acessar a última versão pelo navegador através\",\n        Close: \"Fechar\",\n        \"Download status\": \"Status do download\",\n        \"Download Speed\": \"Velocidade de download\",\n        \"Upload Speed\": \"Velocidade de upload\",\n        \"Estimated time\": \"Tempo estimado\",\n        \"Download Size\": \"Tamanho do download\",\n        Downloaded: \"Baixado\",\n        Progress: \"Progresso\",\n        \"Download Path\": \"Caminho do download\",\n        Uploaded: \"Enviado\",\n        \"Download GID\": \"GID do download\",\n        \"Number of Pieces\": \"Número de partes\",\n        \"Piece Length\": \"Tamanho das partes\",\n        \"The last connection attempt was unsuccessful. Trying another configuration\":\n          \"A última tentativa de conexão não teve sucesso. Tentando outra configuração\",\n        \"Oh Snap!\": \"Ah Droga!\",\n        \"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\":\n          \"Não foi possível conectar no servidor RPC aria2. Tententando em 10 seg. Você pode querer verificar as configurações da conexão em Configurações > Configurações de Conexão\",\n        \"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\":\n          \"Autenticação falhou enquanto conectando ao servidor RPC Aria2. Tentando em 10 seg. Você pode querer confirmar os detalhes de autenticação acessando Configurações > Configurações de Conexão\",\n        \"Successfully connected to Aria2 through its remote RPC …\":\n          \"Conectado com sucesso ao Aria2 através de seu RPC remoto …\",\n        \"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)\":\n          \"Conectado com sucesso ao Aria2 através de seu RPC remoto, contudo a conexão é insegura. Para uma completa segurança tente adicionar um token secreto de autorização quando iniciar o Aria2 (através da opção --rpc-secret)\",\n        \"Trying to connect to aria2 using the new connection configuration\":\n          \"Tentando conectar-se ao aria2 utilizando a nova configuração de conexão\",\n        \"Remove {{name}} and associated meta-data?\": \"Remover {{name}} e os metadados associados?\"\n      });\n  }\n]);\n"
  },
  {
    "path": "docs/index.html",
    "content": "<!doctype html>\n<html>\n\n<!-- {{{ head -->\n<head>\n  <link rel=\"icon\" href=\"../favicon.ico\" />\n\n  <meta charset=\"utf-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <meta name=\"theme-color\" content=\"#0A8476\">\n\n  <title ng-bind=\"$root.pageTitle\">Aria2 WebUI</title>\n\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"https://fonts.googleapis.com/css?family=Lato:400,700\">\n\n<link href=\"app.css\" rel=\"stylesheet\"><script type=\"text/javascript\" src=\"vendor.js\"></script><script type=\"text/javascript\" src=\"app.js\"></script></head>\n<!-- }}} -->\n\n<body ng-controller=\"MainCtrl\" ng-cloak>\n\n<!-- {{{ Icons -->\n<svg aria-hidden=\"true\" style=\"position: absolute; width: 0; height: 0; overflow: hidden;\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n  <defs>\n    <symbol id=\"icon-times\" viewBox=\"0 0 22 28\">\n      <title>times</title>\n      <path d=\"M20.281 20.656c0 0.391-0.156 0.781-0.438 1.062l-2.125 2.125c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-4.594-4.594-4.594 4.594c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-2.125-2.125c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l4.594-4.594-4.594-4.594c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.594 4.594-4.594c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062s-0.156 0.781-0.438 1.062l-4.594 4.594 4.594 4.594c0.281 0.281 0.438 0.672 0.438 1.062z\"></path>\n    </symbol>\n    <symbol id=\"icon-power-off\" viewBox=\"0 0 24 28\">\n      <title>power-off</title>\n      <path d=\"M24 14c0 6.609-5.391 12-12 12s-12-5.391-12-12c0-3.797 1.75-7.297 4.797-9.578 0.891-0.672 2.141-0.5 2.797 0.391 0.672 0.875 0.484 2.141-0.391 2.797-2.031 1.531-3.203 3.859-3.203 6.391 0 4.406 3.594 8 8 8s8-3.594 8-8c0-2.531-1.172-4.859-3.203-6.391-0.875-0.656-1.062-1.922-0.391-2.797 0.656-0.891 1.922-1.062 2.797-0.391 3.047 2.281 4.797 5.781 4.797 9.578zM14 2v10c0 1.094-0.906 2-2 2s-2-0.906-2-2v-10c0-1.094 0.906-2 2-2s2 0.906 2 2z\"></path>\n    </symbol>\n    <symbol id=\"icon-cog\" viewBox=\"0 0 24 28\">\n      <title>cog</title>\n      <path d=\"M16 14c0-2.203-1.797-4-4-4s-4 1.797-4 4 1.797 4 4 4 4-1.797 4-4zM24 12.297v3.469c0 0.234-0.187 0.516-0.438 0.562l-2.891 0.438c-0.172 0.5-0.359 0.969-0.609 1.422 0.531 0.766 1.094 1.453 1.672 2.156 0.094 0.109 0.156 0.25 0.156 0.391s-0.047 0.25-0.141 0.359c-0.375 0.5-2.484 2.797-3.016 2.797-0.141 0-0.281-0.063-0.406-0.141l-2.156-1.687c-0.453 0.234-0.938 0.438-1.422 0.594-0.109 0.953-0.203 1.969-0.453 2.906-0.063 0.25-0.281 0.438-0.562 0.438h-3.469c-0.281 0-0.531-0.203-0.562-0.469l-0.438-2.875c-0.484-0.156-0.953-0.344-1.406-0.578l-2.203 1.672c-0.109 0.094-0.25 0.141-0.391 0.141s-0.281-0.063-0.391-0.172c-0.828-0.75-1.922-1.719-2.578-2.625-0.078-0.109-0.109-0.234-0.109-0.359 0-0.141 0.047-0.25 0.125-0.359 0.531-0.719 1.109-1.406 1.641-2.141-0.266-0.5-0.484-1.016-0.641-1.547l-2.859-0.422c-0.266-0.047-0.453-0.297-0.453-0.562v-3.469c0-0.234 0.187-0.516 0.422-0.562l2.906-0.438c0.156-0.5 0.359-0.969 0.609-1.437-0.531-0.75-1.094-1.453-1.672-2.156-0.094-0.109-0.156-0.234-0.156-0.375s0.063-0.25 0.141-0.359c0.375-0.516 2.484-2.797 3.016-2.797 0.141 0 0.281 0.063 0.406 0.156l2.156 1.672c0.453-0.234 0.938-0.438 1.422-0.594 0.109-0.953 0.203-1.969 0.453-2.906 0.063-0.25 0.281-0.438 0.562-0.438h3.469c0.281 0 0.531 0.203 0.562 0.469l0.438 2.875c0.484 0.156 0.953 0.344 1.406 0.578l2.219-1.672c0.094-0.094 0.234-0.141 0.375-0.141s0.281 0.063 0.391 0.156c0.828 0.766 1.922 1.734 2.578 2.656 0.078 0.094 0.109 0.219 0.109 0.344 0 0.141-0.047 0.25-0.125 0.359-0.531 0.719-1.109 1.406-1.641 2.141 0.266 0.5 0.484 1.016 0.641 1.531l2.859 0.438c0.266 0.047 0.453 0.297 0.453 0.562z\"></path>\n    </symbol>\n    <symbol id=\"icon-clock-o\" viewBox=\"0 0 24 28\">\n      <title>clock-o</title>\n      <path d=\"M14 8.5v7c0 0.281-0.219 0.5-0.5 0.5h-5c-0.281 0-0.5-0.219-0.5-0.5v-1c0-0.281 0.219-0.5 0.5-0.5h3.5v-5.5c0-0.281 0.219-0.5 0.5-0.5h1c0.281 0 0.5 0.219 0.5 0.5zM20.5 14c0-4.688-3.813-8.5-8.5-8.5s-8.5 3.813-8.5 8.5 3.813 8.5 8.5 8.5 8.5-3.813 8.5-8.5zM24 14c0 6.625-5.375 12-12 12s-12-5.375-12-12 5.375-12 12-12 12 5.375 12 12z\"></path>\n    </symbol>\n    <symbol id=\"icon-download\" viewBox=\"0 0 26 28\">\n      <title>download</title>\n      <path d=\"M20 21c0-0.547-0.453-1-1-1s-1 0.453-1 1 0.453 1 1 1 1-0.453 1-1zM24 21c0-0.547-0.453-1-1-1s-1 0.453-1 1 0.453 1 1 1 1-0.453 1-1zM26 17.5v5c0 0.828-0.672 1.5-1.5 1.5h-23c-0.828 0-1.5-0.672-1.5-1.5v-5c0-0.828 0.672-1.5 1.5-1.5h7.266l2.109 2.125c0.578 0.562 1.328 0.875 2.125 0.875s1.547-0.313 2.125-0.875l2.125-2.125h7.25c0.828 0 1.5 0.672 1.5 1.5zM20.922 8.609c0.156 0.375 0.078 0.812-0.219 1.094l-7 7c-0.187 0.203-0.453 0.297-0.703 0.297s-0.516-0.094-0.703-0.297l-7-7c-0.297-0.281-0.375-0.719-0.219-1.094 0.156-0.359 0.516-0.609 0.922-0.609h4v-7c0-0.547 0.453-1 1-1h4c0.547 0 1 0.453 1 1v7h4c0.406 0 0.766 0.25 0.922 0.609z\"></path>\n    </symbol>\n    <symbol id=\"icon-arrow-circle-o-down\" viewBox=\"0 0 24 28\">\n      <title>arrow-circle-o-down</title>\n      <path d=\"M17.5 14.5c0 0.141-0.063 0.266-0.156 0.375l-4.984 4.984c-0.109 0.094-0.234 0.141-0.359 0.141s-0.25-0.047-0.359-0.141l-5-5c-0.141-0.156-0.187-0.359-0.109-0.547s0.266-0.313 0.469-0.313h3v-5.5c0-0.281 0.219-0.5 0.5-0.5h3c0.281 0 0.5 0.219 0.5 0.5v5.5h3c0.281 0 0.5 0.219 0.5 0.5zM12 5.5c-4.688 0-8.5 3.813-8.5 8.5s3.813 8.5 8.5 8.5 8.5-3.813 8.5-8.5-3.813-8.5-8.5-8.5zM24 14c0 6.625-5.375 12-12 12s-12-5.375-12-12 5.375-12 12-12v0c6.625 0 12 5.375 12 12z\"></path>\n    </symbol>\n    <symbol id=\"icon-arrow-circle-o-up\" viewBox=\"0 0 24 28\">\n      <title>arrow-circle-o-up</title>\n      <path d=\"M17.469 13.687c-0.078 0.187-0.266 0.313-0.469 0.313h-3v5.5c0 0.281-0.219 0.5-0.5 0.5h-3c-0.281 0-0.5-0.219-0.5-0.5v-5.5h-3c-0.281 0-0.5-0.219-0.5-0.5 0-0.141 0.063-0.266 0.156-0.375l4.984-4.984c0.109-0.094 0.234-0.141 0.359-0.141s0.25 0.047 0.359 0.141l5 5c0.141 0.156 0.187 0.359 0.109 0.547zM12 5.5c-4.688 0-8.5 3.813-8.5 8.5s3.813 8.5 8.5 8.5 8.5-3.813 8.5-8.5-3.813-8.5-8.5-8.5zM24 14c0 6.625-5.375 12-12 12s-12-5.375-12-12 5.375-12 12-12v0c6.625 0 12 5.375 12 12z\"></path>\n    </symbol>\n    <symbol id=\"icon-repeat\" viewBox=\"0 0 24 28\">\n      <title>repeat</title>\n      <path d=\"M24 4v7c0 0.547-0.453 1-1 1h-7c-0.406 0-0.766-0.25-0.922-0.625-0.156-0.359-0.078-0.797 0.219-1.078l2.156-2.156c-1.469-1.359-3.406-2.141-5.453-2.141-4.406 0-8 3.594-8 8s3.594 8 8 8c2.484 0 4.781-1.125 6.312-3.109 0.078-0.109 0.219-0.172 0.359-0.187 0.141 0 0.281 0.047 0.391 0.141l2.141 2.156c0.187 0.172 0.187 0.469 0.031 0.672-2.281 2.75-5.656 4.328-9.234 4.328-6.609 0-12-5.391-12-12s5.391-12 12-12c3.078 0 6.062 1.234 8.266 3.313l2.031-2.016c0.281-0.297 0.719-0.375 1.094-0.219 0.359 0.156 0.609 0.516 0.609 0.922z\"></path>\n    </symbol>\n    <symbol id=\"icon-list\" viewBox=\"0 0 28 28\">\n      <title>list</title>\n      <path d=\"M4 20.5v3c0 0.266-0.234 0.5-0.5 0.5h-3c-0.266 0-0.5-0.234-0.5-0.5v-3c0-0.266 0.234-0.5 0.5-0.5h3c0.266 0 0.5 0.234 0.5 0.5zM4 14.5v3c0 0.266-0.234 0.5-0.5 0.5h-3c-0.266 0-0.5-0.234-0.5-0.5v-3c0-0.266 0.234-0.5 0.5-0.5h3c0.266 0 0.5 0.234 0.5 0.5zM4 8.5v3c0 0.266-0.234 0.5-0.5 0.5h-3c-0.266 0-0.5-0.234-0.5-0.5v-3c0-0.266 0.234-0.5 0.5-0.5h3c0.266 0 0.5 0.234 0.5 0.5zM28 20.5v3c0 0.266-0.234 0.5-0.5 0.5h-21c-0.266 0-0.5-0.234-0.5-0.5v-3c0-0.266 0.234-0.5 0.5-0.5h21c0.266 0 0.5 0.234 0.5 0.5zM4 2.5v3c0 0.266-0.234 0.5-0.5 0.5h-3c-0.266 0-0.5-0.234-0.5-0.5v-3c0-0.266 0.234-0.5 0.5-0.5h3c0.266 0 0.5 0.234 0.5 0.5zM28 14.5v3c0 0.266-0.234 0.5-0.5 0.5h-21c-0.266 0-0.5-0.234-0.5-0.5v-3c0-0.266 0.234-0.5 0.5-0.5h21c0.266 0 0.5 0.234 0.5 0.5zM28 8.5v3c0 0.266-0.234 0.5-0.5 0.5h-21c-0.266 0-0.5-0.234-0.5-0.5v-3c0-0.266 0.234-0.5 0.5-0.5h21c0.266 0 0.5 0.234 0.5 0.5zM28 2.5v3c0 0.266-0.234 0.5-0.5 0.5h-21c-0.266 0-0.5-0.234-0.5-0.5v-3c0-0.266 0.234-0.5 0.5-0.5h21c0.266 0 0.5 0.234 0.5 0.5z\"></path>\n    </symbol>\n    <symbol id=\"icon-check-square-o\" viewBox=\"0 0 26 28\">\n      <title>check-square-o</title>\n      <path d=\"M22 14.531v4.969c0 2.484-2.016 4.5-4.5 4.5h-13c-2.484 0-4.5-2.016-4.5-4.5v-13c0-2.484 2.016-4.5 4.5-4.5h13c0.625 0 1.25 0.125 1.828 0.391 0.141 0.063 0.25 0.203 0.281 0.359 0.031 0.172-0.016 0.328-0.141 0.453l-0.766 0.766c-0.094 0.094-0.234 0.156-0.359 0.156-0.047 0-0.094-0.016-0.141-0.031-0.234-0.063-0.469-0.094-0.703-0.094h-13c-1.375 0-2.5 1.125-2.5 2.5v13c0 1.375 1.125 2.5 2.5 2.5h13c1.375 0 2.5-1.125 2.5-2.5v-3.969c0-0.125 0.047-0.25 0.141-0.344l1-1c0.109-0.109 0.234-0.156 0.359-0.156 0.063 0 0.125 0.016 0.187 0.047 0.187 0.078 0.313 0.25 0.313 0.453zM25.609 6.891l-12.719 12.719c-0.5 0.5-1.281 0.5-1.781 0l-6.719-6.719c-0.5-0.5-0.5-1.281 0-1.781l1.719-1.719c0.5-0.5 1.281-0.5 1.781 0l4.109 4.109 10.109-10.109c0.5-0.5 1.281-0.5 1.781 0l1.719 1.719c0.5 0.5 0.5 1.281 0 1.781z\"></path>\n    </symbol>\n    <symbol id=\"icon-play\" viewBox=\"0 0 22 28\">\n      <title>play</title>\n      <path d=\"M21.625 14.484l-20.75 11.531c-0.484 0.266-0.875 0.031-0.875-0.516v-23c0-0.547 0.391-0.781 0.875-0.516l20.75 11.531c0.484 0.266 0.484 0.703 0 0.969z\"></path>\n    </symbol>\n    <symbol id=\"icon-pause\" viewBox=\"0 0 24 28\">\n      <title>pause</title>\n      <path d=\"M24 3v22c0 0.547-0.453 1-1 1h-8c-0.547 0-1-0.453-1-1v-22c0-0.547 0.453-1 1-1h8c0.547 0 1 0.453 1 1zM10 3v22c0 0.547-0.453 1-1 1h-8c-0.547 0-1-0.453-1-1v-22c0-0.547 0.453-1 1-1h8c0.547 0 1 0.453 1 1z\"></path>\n    </symbol>\n    <symbol id=\"icon-stop\" viewBox=\"0 0 24 28\">\n      <title>stop</title>\n      <path d=\"M24 3v22c0 0.547-0.453 1-1 1h-22c-0.547 0-1-0.453-1-1v-22c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1z\"></path>\n    </symbol>\n    <symbol id=\"icon-chevron-right\" viewBox=\"0 0 19 28\">\n      <title>chevron-right</title>\n      <path d=\"M17.297 13.703l-11.594 11.594c-0.391 0.391-1.016 0.391-1.406 0l-2.594-2.594c-0.391-0.391-0.391-1.016 0-1.406l8.297-8.297-8.297-8.297c-0.391-0.391-0.391-1.016 0-1.406l2.594-2.594c0.391-0.391 1.016-0.391 1.406 0l11.594 11.594c0.391 0.391 0.391 1.016 0 1.406z\"></path>\n    </symbol>\n    <symbol id=\"icon-close-circle\" viewBox=\"0 0 24 28\">\n      <title>close-circle</title>\n      <path d=\"M17.953 17.531c0-0.266-0.109-0.516-0.297-0.703l-2.828-2.828 2.828-2.828c0.187-0.187 0.297-0.438 0.297-0.703s-0.109-0.531-0.297-0.719l-1.406-1.406c-0.187-0.187-0.453-0.297-0.719-0.297s-0.516 0.109-0.703 0.297l-2.828 2.828-2.828-2.828c-0.187-0.187-0.438-0.297-0.703-0.297s-0.531 0.109-0.719 0.297l-1.406 1.406c-0.187 0.187-0.297 0.453-0.297 0.719s0.109 0.516 0.297 0.703l2.828 2.828-2.828 2.828c-0.187 0.187-0.297 0.438-0.297 0.703s0.109 0.531 0.297 0.719l1.406 1.406c0.187 0.187 0.453 0.297 0.719 0.297s0.516-0.109 0.703-0.297l2.828-2.828 2.828 2.828c0.187 0.187 0.438 0.297 0.703 0.297s0.531-0.109 0.719-0.297l1.406-1.406c0.187-0.187 0.297-0.453 0.297-0.719zM24 14c0 6.625-5.375 12-12 12s-12-5.375-12-12 5.375-12 12-12 12 5.375 12 12z\"></path>\n    </symbol>\n    <symbol id=\"icon-question-circle\" viewBox=\"0 0 24 28\">\n      <title>question-circle</title>\n      <path d=\"M14 21.5v-3c0-0.281-0.219-0.5-0.5-0.5h-3c-0.281 0-0.5 0.219-0.5 0.5v3c0 0.281 0.219 0.5 0.5 0.5h3c0.281 0 0.5-0.219 0.5-0.5zM18 11c0-2.859-3-5-5.688-5-2.547 0-4.453 1.094-5.797 3.328-0.141 0.219-0.078 0.5 0.125 0.656l2.063 1.563c0.078 0.063 0.187 0.094 0.297 0.094 0.141 0 0.297-0.063 0.391-0.187 0.734-0.938 1.047-1.219 1.344-1.437 0.266-0.187 0.781-0.375 1.344-0.375 1 0 1.922 0.641 1.922 1.328 0 0.812-0.422 1.219-1.375 1.656-1.109 0.5-2.625 1.797-2.625 3.313v0.562c0 0.281 0.219 0.5 0.5 0.5h3c0.281 0 0.5-0.219 0.5-0.5v0c0-0.359 0.453-1.125 1.188-1.547 1.188-0.672 2.812-1.578 2.812-3.953zM24 14c0 6.625-5.375 12-12 12s-12-5.375-12-12 5.375-12 12-12 12 5.375 12 12z\"></path>\n    </symbol>\n    <symbol id=\"icon-info-circle\" viewBox=\"0 0 24 28\">\n      <title>info-circle</title>\n      <path d=\"M16 21.5v-2.5c0-0.281-0.219-0.5-0.5-0.5h-1.5v-8c0-0.281-0.219-0.5-0.5-0.5h-5c-0.281 0-0.5 0.219-0.5 0.5v2.5c0 0.281 0.219 0.5 0.5 0.5h1.5v5h-1.5c-0.281 0-0.5 0.219-0.5 0.5v2.5c0 0.281 0.219 0.5 0.5 0.5h7c0.281 0 0.5-0.219 0.5-0.5zM14 7.5v-2.5c0-0.281-0.219-0.5-0.5-0.5h-3c-0.281 0-0.5 0.219-0.5 0.5v2.5c0 0.281 0.219 0.5 0.5 0.5h3c0.281 0 0.5-0.219 0.5-0.5zM24 14c0 6.625-5.375 12-12 12s-12-5.375-12-12 5.375-12 12-12 12 5.375 12 12z\"></path>\n    </symbol>\n    <symbol id=\"icon-magnet\" viewBox=\"0 0 24 28\">\n      <title>magnet</title>\n      <path d=\"M24 13v2c0 6.375-5.047 11-12 11s-12-4.625-12-11v-2c0-0.547 0.453-1 1-1h6c0.547 0 1 0.453 1 1v2c0 2.859 3.328 3 4 3s4-0.141 4-3v-2c0-0.547 0.453-1 1-1h6c0.547 0 1 0.453 1 1zM8 3v6c0 0.547-0.453 1-1 1h-6c-0.547 0-1-0.453-1-1v-6c0-0.547 0.453-1 1-1h6c0.547 0 1 0.453 1 1zM24 3v6c0 0.547-0.453 1-1 1h-6c-0.547 0-1-0.453-1-1v-6c0-0.547 0.453-1 1-1h6c0.547 0 1 0.453 1 1z\"></path>\n    </symbol>\n    <symbol id=\"icon-folder-open\" viewBox=\"0 0 29 28\">\n      <title>folder-open</title>\n      <path d=\"M29.359 14.875c0 0.375-0.234 0.75-0.484 1.031l-5.25 6.188c-0.906 1.062-2.75 1.906-4.125 1.906h-17c-0.562 0-1.359-0.172-1.359-0.875 0-0.375 0.234-0.75 0.484-1.031l5.25-6.188c0.906-1.062 2.75-1.906 4.125-1.906h17c0.562 0 1.359 0.172 1.359 0.875zM24 9.5v2.5h-13c-1.953 0-4.375 1.109-5.641 2.609l-5.344 6.281c0-0.125-0.016-0.266-0.016-0.391v-15c0-1.922 1.578-3.5 3.5-3.5h5c1.922 0 3.5 1.578 3.5 3.5v0.5h8.5c1.922 0 3.5 1.578 3.5 3.5z\"></path>\n    </symbol>\n    <symbol id=\"icon-cogs\" viewBox=\"0 0 30 28\">\n      <title>cogs</title>\n      <path d=\"M14 14c0-2.203-1.797-4-4-4s-4 1.797-4 4 1.797 4 4 4 4-1.797 4-4zM26 22c0-1.094-0.906-2-2-2s-2 0.906-2 2c0 1.109 0.906 2 2 2 1.109 0 2-0.906 2-2zM26 6c0-1.094-0.906-2-2-2s-2 0.906-2 2c0 1.109 0.906 2 2 2 1.109 0 2-0.906 2-2zM20 12.578v2.891c0 0.203-0.156 0.438-0.359 0.469l-2.422 0.375c-0.125 0.406-0.297 0.797-0.5 1.188 0.438 0.625 0.906 1.203 1.406 1.797 0.063 0.094 0.109 0.187 0.109 0.313 0 0.109-0.031 0.219-0.109 0.297-0.313 0.422-2.063 2.328-2.516 2.328-0.125 0-0.234-0.047-0.328-0.109l-1.797-1.406c-0.391 0.203-0.781 0.359-1.203 0.484-0.078 0.797-0.156 1.656-0.359 2.422-0.063 0.219-0.25 0.375-0.469 0.375h-2.906c-0.219 0-0.438-0.172-0.469-0.391l-0.359-2.391c-0.406-0.125-0.797-0.297-1.172-0.484l-1.844 1.391c-0.078 0.078-0.203 0.109-0.313 0.109-0.125 0-0.234-0.047-0.328-0.125-0.406-0.375-2.25-2.047-2.25-2.5 0-0.109 0.047-0.203 0.109-0.297 0.453-0.594 0.922-1.172 1.375-1.781-0.219-0.422-0.406-0.844-0.547-1.281l-2.375-0.375c-0.219-0.031-0.375-0.234-0.375-0.453v-2.891c0-0.203 0.156-0.438 0.359-0.469l2.422-0.375c0.125-0.406 0.297-0.797 0.5-1.188-0.438-0.625-0.906-1.203-1.406-1.797-0.063-0.094-0.109-0.203-0.109-0.313s0.031-0.219 0.109-0.313c0.313-0.422 2.063-2.312 2.516-2.312 0.125 0 0.234 0.047 0.328 0.109l1.797 1.406c0.391-0.203 0.781-0.359 1.203-0.5 0.078-0.781 0.156-1.641 0.359-2.406 0.063-0.219 0.25-0.375 0.469-0.375h2.906c0.219 0 0.438 0.172 0.469 0.391l0.359 2.391c0.406 0.125 0.797 0.297 1.172 0.484l1.844-1.391c0.094-0.078 0.203-0.109 0.313-0.109 0.125 0 0.234 0.047 0.328 0.125 0.406 0.375 2.25 2.063 2.25 2.5 0 0.109-0.047 0.203-0.109 0.297-0.453 0.609-0.922 1.172-1.359 1.781 0.203 0.422 0.391 0.844 0.531 1.281l2.375 0.359c0.219 0.047 0.375 0.25 0.375 0.469zM30 20.906v2.188c0 0.234-2.016 0.453-2.328 0.484-0.125 0.297-0.281 0.562-0.469 0.812 0.141 0.313 0.797 1.875 0.797 2.156 0 0.047-0.016 0.078-0.063 0.109-0.187 0.109-1.859 1.109-1.937 1.109-0.203 0-1.375-1.563-1.531-1.797-0.156 0.016-0.313 0.031-0.469 0.031s-0.313-0.016-0.469-0.031c-0.156 0.234-1.328 1.797-1.531 1.797-0.078 0-1.75-1-1.937-1.109-0.047-0.031-0.063-0.078-0.063-0.109 0-0.266 0.656-1.844 0.797-2.156-0.187-0.25-0.344-0.516-0.469-0.812-0.313-0.031-2.328-0.25-2.328-0.484v-2.188c0-0.234 2.016-0.453 2.328-0.484 0.125-0.281 0.281-0.562 0.469-0.812-0.141-0.313-0.797-1.891-0.797-2.156 0-0.031 0.016-0.078 0.063-0.109 0.187-0.094 1.859-1.094 1.937-1.094 0.203 0 1.375 1.547 1.531 1.781 0.156-0.016 0.313-0.031 0.469-0.031s0.313 0.016 0.469 0.031c0.438-0.609 0.906-1.219 1.437-1.75l0.094-0.031c0.078 0 1.75 0.984 1.937 1.094 0.047 0.031 0.063 0.078 0.063 0.109 0 0.281-0.656 1.844-0.797 2.156 0.187 0.25 0.344 0.531 0.469 0.812 0.313 0.031 2.328 0.25 2.328 0.484zM30 4.906v2.187c0 0.234-2.016 0.453-2.328 0.484-0.125 0.297-0.281 0.562-0.469 0.812 0.141 0.313 0.797 1.875 0.797 2.156 0 0.047-0.016 0.078-0.063 0.109-0.187 0.109-1.859 1.109-1.937 1.109-0.203 0-1.375-1.563-1.531-1.797-0.156 0.016-0.313 0.031-0.469 0.031s-0.313-0.016-0.469-0.031c-0.156 0.234-1.328 1.797-1.531 1.797-0.078 0-1.75-1-1.937-1.109-0.047-0.031-0.063-0.078-0.063-0.109 0-0.266 0.656-1.844 0.797-2.156-0.187-0.25-0.344-0.516-0.469-0.812-0.313-0.031-2.328-0.25-2.328-0.484v-2.188c0-0.234 2.016-0.453 2.328-0.484 0.125-0.281 0.281-0.562 0.469-0.812-0.141-0.313-0.797-1.891-0.797-2.156 0-0.031 0.016-0.078 0.063-0.109 0.187-0.094 1.859-1.094 1.937-1.094 0.203 0 1.375 1.547 1.531 1.781 0.156-0.016 0.313-0.031 0.469-0.031s0.313 0.016 0.469 0.031c0.438-0.609 0.906-1.219 1.437-1.75l0.094-0.031c0.078 0 1.75 0.984 1.937 1.094 0.047 0.031 0.063 0.078 0.063 0.109 0 0.281-0.656 1.844-0.797 2.156 0.187 0.25 0.344 0.531 0.469 0.812 0.313 0.031 2.328 0.25 2.328 0.484z\"></path>\n    </symbol>\n    <symbol id=\"icon-upload\" viewBox=\"0 0 26 28\">\n      <title>upload</title>\n      <path d=\"M20 23c0-0.547-0.453-1-1-1s-1 0.453-1 1 0.453 1 1 1 1-0.453 1-1zM24 23c0-0.547-0.453-1-1-1s-1 0.453-1 1 0.453 1 1 1 1-0.453 1-1zM26 19.5v5c0 0.828-0.672 1.5-1.5 1.5h-23c-0.828 0-1.5-0.672-1.5-1.5v-5c0-0.828 0.672-1.5 1.5-1.5h6.672c0.422 1.156 1.531 2 2.828 2h4c1.297 0 2.406-0.844 2.828-2h6.672c0.828 0 1.5 0.672 1.5 1.5zM20.922 9.375c-0.156 0.375-0.516 0.625-0.922 0.625h-4v7c0 0.547-0.453 1-1 1h-4c-0.547 0-1-0.453-1-1v-7h-4c-0.406 0-0.766-0.25-0.922-0.625-0.156-0.359-0.078-0.797 0.219-1.078l7-7c0.187-0.203 0.453-0.297 0.703-0.297s0.516 0.094 0.703 0.297l7 7c0.297 0.281 0.375 0.719 0.219 1.078z\"></path>\n    </symbol>\n    <symbol id=\"icon-arrow-circle-down\" viewBox=\"0 0 24 28\">\n      <title>arrow-circle-down</title>\n      <path d=\"M20.062 14.016c0-0.266-0.094-0.516-0.281-0.703l-1.422-1.422c-0.187-0.187-0.438-0.281-0.703-0.281s-0.516 0.094-0.703 0.281l-2.953 2.953v-7.844c0-0.547-0.453-1-1-1h-2c-0.547 0-1 0.453-1 1v7.844l-2.953-2.953c-0.187-0.187-0.438-0.297-0.703-0.297s-0.516 0.109-0.703 0.297l-1.422 1.422c-0.187 0.187-0.281 0.438-0.281 0.703s0.094 0.516 0.281 0.703l7.078 7.078c0.187 0.187 0.438 0.281 0.703 0.281s0.516-0.094 0.703-0.281l7.078-7.078c0.187-0.187 0.281-0.438 0.281-0.703zM24 14c0 6.625-5.375 12-12 12s-12-5.375-12-12 5.375-12 12-12 12 5.375 12 12z\"></path>\n    </symbol>\n    <symbol id=\"icon-link\" viewBox=\"0 0 26 28\">\n      <title>link</title>\n      <path d=\"M22.75 19c0-0.406-0.156-0.781-0.438-1.062l-3.25-3.25c-0.281-0.281-0.672-0.438-1.062-0.438-0.453 0-0.812 0.172-1.125 0.5 0.516 0.516 1.125 0.953 1.125 1.75 0 0.828-0.672 1.5-1.5 1.5-0.797 0-1.234-0.609-1.75-1.125-0.328 0.313-0.516 0.672-0.516 1.141 0 0.391 0.156 0.781 0.438 1.062l3.219 3.234c0.281 0.281 0.672 0.422 1.062 0.422s0.781-0.141 1.062-0.406l2.297-2.281c0.281-0.281 0.438-0.656 0.438-1.047zM11.766 7.984c0-0.391-0.156-0.781-0.438-1.062l-3.219-3.234c-0.281-0.281-0.672-0.438-1.062-0.438s-0.781 0.156-1.062 0.422l-2.297 2.281c-0.281 0.281-0.438 0.656-0.438 1.047 0 0.406 0.156 0.781 0.438 1.062l3.25 3.25c0.281 0.281 0.672 0.422 1.062 0.422 0.453 0 0.812-0.156 1.125-0.484-0.516-0.516-1.125-0.953-1.125-1.75 0-0.828 0.672-1.5 1.5-1.5 0.797 0 1.234 0.609 1.75 1.125 0.328-0.313 0.516-0.672 0.516-1.141zM25.75 19c0 1.188-0.484 2.344-1.328 3.172l-2.297 2.281c-0.844 0.844-1.984 1.297-3.172 1.297-1.203 0-2.344-0.469-3.187-1.328l-3.219-3.234c-0.844-0.844-1.297-1.984-1.297-3.172 0-1.234 0.5-2.406 1.375-3.266l-1.375-1.375c-0.859 0.875-2.016 1.375-3.25 1.375-1.188 0-2.344-0.469-3.187-1.313l-3.25-3.25c-0.859-0.859-1.313-1.984-1.313-3.187 0-1.188 0.484-2.344 1.328-3.172l2.297-2.281c0.844-0.844 1.984-1.297 3.172-1.297 1.203 0 2.344 0.469 3.187 1.328l3.219 3.234c0.844 0.844 1.297 1.984 1.297 3.172 0 1.234-0.5 2.406-1.375 3.266l1.375 1.375c0.859-0.875 2.016-1.375 3.25-1.375 1.188 0 2.344 0.469 3.187 1.313l3.25 3.25c0.859 0.859 1.313 1.984 1.313 3.187z\"></path>\n    </symbol>\n    <symbol id=\"icon-bars\" viewBox=\"0 0 24 28\">\n      <title>bars</title>\n      <path d=\"M24 21v2c0 0.547-0.453 1-1 1h-22c-0.547 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1zM24 13v2c0 0.547-0.453 1-1 1h-22c-0.547 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1zM24 5v2c0 0.547-0.453 1-1 1h-22c-0.547 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1z\"></path>\n    </symbol>\n    <symbol id=\"icon-cloud-download\" viewBox=\"0 0 30 28\">\n      <title>cloud-download</title>\n      <path d=\"M20 14.5c0-0.281-0.219-0.5-0.5-0.5h-3.5v-5.5c0-0.266-0.234-0.5-0.5-0.5h-3c-0.266 0-0.5 0.234-0.5 0.5v5.5h-3.5c-0.281 0-0.5 0.234-0.5 0.5 0 0.125 0.047 0.266 0.141 0.359l5.5 5.5c0.094 0.094 0.219 0.141 0.359 0.141 0.125 0 0.266-0.047 0.359-0.141l5.484-5.484c0.094-0.109 0.156-0.234 0.156-0.375zM30 18c0 3.313-2.688 6-6 6h-17c-3.859 0-7-3.141-7-7 0-2.719 1.578-5.187 4.031-6.328-0.016-0.234-0.031-0.453-0.031-0.672 0-4.422 3.578-8 8-8 3.25 0 6.172 1.969 7.406 4.969 0.719-0.625 1.641-0.969 2.594-0.969 2.203 0 4 1.797 4 4 0 0.766-0.219 1.516-0.641 2.156 2.719 0.641 4.641 3.063 4.641 5.844z\"></path>\n    </symbol>\n    <symbol id=\"icon-file-text-o\" viewBox=\"0 0 24 28\">\n      <title>file-text-o</title>\n      <path d=\"M22.937 5.938c0.578 0.578 1.062 1.734 1.062 2.562v18c0 0.828-0.672 1.5-1.5 1.5h-21c-0.828 0-1.5-0.672-1.5-1.5v-25c0-0.828 0.672-1.5 1.5-1.5h14c0.828 0 1.984 0.484 2.562 1.062zM16 2.125v5.875h5.875c-0.094-0.266-0.234-0.531-0.344-0.641l-4.891-4.891c-0.109-0.109-0.375-0.25-0.641-0.344zM22 26v-16h-6.5c-0.828 0-1.5-0.672-1.5-1.5v-6.5h-12v24h20zM6 12.5c0-0.281 0.219-0.5 0.5-0.5h11c0.281 0 0.5 0.219 0.5 0.5v1c0 0.281-0.219 0.5-0.5 0.5h-11c-0.281 0-0.5-0.219-0.5-0.5v-1zM17.5 16c0.281 0 0.5 0.219 0.5 0.5v1c0 0.281-0.219 0.5-0.5 0.5h-11c-0.281 0-0.5-0.219-0.5-0.5v-1c0-0.281 0.219-0.5 0.5-0.5h11zM17.5 20c0.281 0 0.5 0.219 0.5 0.5v1c0 0.281-0.219 0.5-0.5 0.5h-11c-0.281 0-0.5-0.219-0.5-0.5v-1c0-0.281 0.219-0.5 0.5-0.5h11z\"></path>\n    </symbol>\n    <symbol id=\"icon-puzzle-piece\" viewBox=\"0 0 26 28\">\n      <title>puzzle-piece</title>\n      <path d=\"M26 17.156c0 1.609-0.922 2.953-2.625 2.953-1.906 0-2.406-1.734-4.125-1.734-1.25 0-1.719 0.781-1.719 1.937 0 1.219 0.5 2.391 0.484 3.594v0.078c-0.172 0-0.344 0-0.516 0.016-1.609 0.156-3.234 0.469-4.859 0.469-1.109 0-2.266-0.438-2.266-1.719 0-1.719 1.734-2.219 1.734-4.125 0-1.703-1.344-2.625-2.953-2.625-1.641 0-3.156 0.906-3.156 2.703 0 1.984 1.516 2.844 1.516 3.922 0 0.547-0.344 1.031-0.719 1.391-0.484 0.453-1.172 0.547-1.828 0.547-1.281 0-2.562-0.172-3.828-0.375-0.281-0.047-0.578-0.078-0.859-0.125l-0.203-0.031c-0.031-0.016-0.078-0.016-0.078-0.031v-16c0.063 0.047 0.984 0.156 1.141 0.187 1.266 0.203 2.547 0.375 3.828 0.375 0.656 0 1.344-0.094 1.828-0.547 0.375-0.359 0.719-0.844 0.719-1.391 0-1.078-1.516-1.937-1.516-3.922 0-1.797 1.516-2.703 3.172-2.703 1.594 0 2.938 0.922 2.938 2.625 0 1.906-1.734 2.406-1.734 4.125 0 1.281 1.156 1.719 2.266 1.719 1.797 0 3.578-0.406 5.359-0.5v0.031c-0.047 0.063-0.156 0.984-0.187 1.141-0.203 1.266-0.375 2.547-0.375 3.828 0 0.656 0.094 1.344 0.547 1.828 0.359 0.375 0.844 0.719 1.391 0.719 1.078 0 1.937-1.516 3.922-1.516 1.797 0 2.703 1.516 2.703 3.156z\"></path>\n    </symbol>\n    <symbol id=\"icon-percent\" viewBox=\"0 0 24 28\">\n      <title>percent</title>\n      <path d=\"M20 20c0-1.094-0.906-2-2-2s-2 0.906-2 2 0.906 2 2 2 2-0.906 2-2zM8 8c0-1.094-0.906-2-2-2s-2 0.906-2 2 0.906 2 2 2 2-0.906 2-2zM24 20c0 3.313-2.688 6-6 6s-6-2.688-6-6 2.688-6 6-6 6 2.688 6 6zM22.5 3c0 0.219-0.078 0.422-0.203 0.594l-16.5 22c-0.187 0.25-0.484 0.406-0.797 0.406h-2.5c-0.547 0-1-0.453-1-1 0-0.219 0.078-0.422 0.203-0.594l16.5-22c0.187-0.25 0.484-0.406 0.797-0.406h2.5c0.547 0 1 0.453 1 1zM12 8c0 3.313-2.688 6-6 6s-6-2.688-6-6 2.688-6 6-6 6 2.688 6 6z\"></path>\n    </symbol>\n  </defs>\n</svg>\n<!-- }}} -->\n\n<!-- {{{ header -->\n<div class=\"navbar main-navbar navbar-static-top\" ng-controller=\"NavCtrl\">\n    <div class=\"container\">\n        <div class=\"navbar-header\">\n            <button type=\"button\" class=\"navbar-toggle collapsed\" ng-click=\"collapsed = !collapsed\">\n              <span class=\"sr-only\">{{ 'Toggle navigation' | translate }}</span>\n              <span class=\"icon-bar\"></span>\n              <span class=\"icon-bar\"></span>\n              <span class=\"icon-bar\"></span>\n            </button>\n            <a class=\"navbar-brand\">\n              <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-down\"></use></svg> {{ name }}\n            </a>\n        </div>\n\n        <form class=\"navbar-form navbar-right\" role=\"search\">\n            <div class=\"form-group\">\n                <input class=\"form-control\" type=\"text\" placeholder=\"{{ 'Search' | translate }}\" ng-model=\"downloadFilter\" autocomplete=\"off\" ng-change=\"onDownloadFilter()\" />\n            </div>\n        </form>\n\n        <!-- {{{ Nav menu -->\n        <div class=\"collapse navbar-collapse\" collapse=\"collapsed\">\n            <ul class=\"nav navbar-nav\">\n                <li class=\"dropdown\" dropdown>\n                    <a class=\"dropdown-toggle\" href=\"#\" dropdown-toggle>\n                      {{ 'Add' | translate }} <span class=\"caret\"></span>\n                    </a>\n                    <ul class=\"dropdown-menu\">\n                        <li>\n                            <a href=\"#\" ng-click=\"addUris()\">\n                              <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-link\"></use></svg> {{ 'By URIs' | translate }}\n                            </a>\n                        </li>\n                        <li ng-show=\"isFeatureEnabled('BitTorrent') && enable.torrent\">\n                            <a href=\"#\" ng-click=\"addTorrents()\">\n                              <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cloud-download\"></use></svg> {{ 'By Torrents' | translate }}\n                            </a>\n                        </li>\n                        <li ng-show=\"isFeatureEnabled('Metalink') && enable.metalink\">\n                            <a href=\"#\" ng-click=\"addMetalinks()\">\n                              <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-file-text-o\"></use></svg> {{ 'By Metalinks' | translate }}\n                            </a>\n                        </li>\n                    </ul>\n                </li>\n\n                <li class=\"dropdown\" dropdown>\n                    <a class=\"dropdown-toggle\" href=\"#\" dropdown-toggle> {{ 'Manage' | translate }} <span class=\"caret\"></span></a>\n                    <ul class=\"dropdown-menu\">\n                        <li>\n                            <a href=\"#\" ng-click=\"forcePauseAll()\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-pause\"></use></svg> {{ 'Pause All' | translate }}</a>\n                        </li>\n                        <li>\n                            <a href=\"#\" ng-click=\"unpauseAll()\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-play\"></use></svg> {{ 'Resume Paused' | translate }}</a>\n                        </li>\n                        <li>\n                            <a href=\"#\" ng-click=\"purgeDownloadResult()\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-close-circle\"></use></svg> {{ 'Purge Completed' | translate }}</a>\n                        </li>\n                        <li>\n                            <a href=\"#\" ng-click=\"shutDownServer()\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-power-off\"></use></svg> {{ 'Shutdown Server' | translate }}</a>\n                        </li>\n                        <!-- not adding remove all as requires many rpc syscalls to finish\n                          <li>\n                            <a\n                              href=\"#\"\n                              ng-click=\"removeAll()\"><span class=\"fa fa-fw fa-fire\">&nbsp;</span> Remove All</a>\n                          </li>\n                          -->\n                    </ul>\n                </li>\n            </ul>\n\n            <ul class=\"nav navbar-nav\">\n                <li class=\"dropdown\" dropdown>\n                    <a href=\"#\" class=\"dropdown-toggle\" dropdown-toggle>{{ 'Settings' | translate }} <span class=\"caret\"></span></a>\n\n                    <ul class=\"dropdown-menu\">\n                        <li>\n                            <a ng-click=\"changeCSettings()\" href=\"#\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cog\"></use></svg> {{ 'Connection Settings' | translate }}</a>\n                        </li>\n\n                        <li>\n                            <a ng-click=\"changeGSettings()\" href=\"#\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cogs\"></use></svg> {{ 'Global Settings' | translate }}</a>\n                        </li>\n\n                        <li>\n                            <a ng-click=\"showServerInfo()\" href=\"#\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-info-circle\"></use></svg> {{ 'Server info' | translate }}</a>\n                        </li>\n\n                        <li>\n                            <a ng-click=\"showAbout()\" href=\"#\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-question-circle\"></use></svg> {{ 'About and contribute' | translate }}</a>\n                        </li>\n                    </ul>\n                </li>\n            </ul>\n\n            <ul class=\"nav navbar-nav pull-right\" ng-show=\"false\">\n                <li class=\"dropdown\" dropdown>\n                    <a class=\"dropdown-toggle\" dropdown-toggle href=\"#\">{{ 'Miscellaneous' | translate }} <span class=\"caret\"></span></a>\n                    <ul class=\"dropdown-menu\">\n                        <li>\n                            <a href=\"#\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-list-alt\"></use></svg> {{ 'Global Statistics' | translate }}</a>\n                        </li>\n                        <li>\n                            <a href=\"#\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-info-circle\"></use></svg> {{ 'About' | translate }}</a>\n                        </li>\n                    </ul>\n                </li>\n            </ul>\n\n            <ul class=\"nav navbar-nav\">\n                <li class=\"dropdown\" dropdown>\n                    <a href=\"#\" class=\"dropdown-toggle\" dropdown-toggle>{{ 'Language' | translate }} <span class=\"caret\"></span></a>\n\n                    <ul class=\"dropdown-menu\">\n                        <li>\n                            <a ng-click=\"changeLanguage('en_US')\" href=\"#\"><span class=\"flag-icon flag-icon-us\">&nbsp;</span> English</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('th_TH')\" href=\"#\"><span class=\"flag-icon flag-icon-th\">&nbsp;</span> ไทย</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('nl_NL')\" href=\"#\"><span class=\"flag-icon flag-icon-nl\">&nbsp;</span> Nederlands</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('zh_CN')\" href=\"#\"><span class=\"flag-icon flag-icon-cn\">&nbsp;</span> 简体中文</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('zh_TW')\" href=\"#\"><span class=\"flag-icon flag-icon-tw\">&nbsp;</span> 繁體中文</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('pl_PL')\" href=\"#\"><span class=\"flag-icon flag-icon-pl\">&nbsp;</span> Polish</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('fr_FR')\" href=\"#\"><span class=\"flag-icon flag-icon-fr\">&nbsp;</span> Français</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('de_DE')\" href=\"#\"><span class=\"flag-icon flag-icon-de\">&nbsp;</span> Deutsch</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('es_ES')\" href=\"#\"><span class=\"flag-icon flag-icon-es\">&nbsp;</span> Español</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('ru_RU')\" href=\"#\"><span class=\"flag-icon flag-icon-ru\">&nbsp;</span> Русский</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('it_IT')\" href=\"#\"><span class=\"flag-icon flag-icon-it\">&nbsp;</span> Italiano</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('tr_TR')\" href=\"#\"><span class=\"flag-icon flag-icon-tr\">&nbsp;</span> Turkish</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('cs_CZ')\" href=\"#\"><span class=\"flag-icon flag-icon-cz\">&nbsp;</span> Czech</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('fa_IR')\" href=\"#\"><span class=\"flag-icon flag-icon-ir\">&nbsp;</span> Farsi</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('id_ID')\" href=\"#\"><span class=\"flag-icon flag-icon-id\">&nbsp;</span> Indonesian</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('pt_BR')\" href=\"#\"><span class=\"flag-icon flag-icon-br\">&nbsp;</span> Brazilian Portuguese</a>\n                        </li>\n                    </ul>\n                </li>\n            </ul>\n        </div>\n        <!-- }}} -->\n    </div>\n    <!--/.nav-collapse -->\n</div>\n<!-- }}} -->\n\n<!-- {{{ body -->\n<div role=\"main\" class=\"container-fluid\">\n\n<!-- {{{ alerts -->\n<div ng-controller=\"AlertCtrl\" class=\"row-fluid alerts\">\n  <div class=\"alert alert-{{alert.type == 'error' ? 'danger' : alert.type}}\" ng-repeat=\"alert in pendingAlerts\">\n    <button type=\"button\" class=\"close\" ng-click=\"removeAlert($index)\">&times;</button>\n    <span ng-bind-html=\"alert.msg\"></span>\n  </div>\n</div>\n<!-- }}} -->\n\n<div class=\"row-fluid\">\n  <div ng-class=\"{'col-md-3': enable.sidebar.show}\" ng-show=\"enable.sidebar.show\">\n    <!-- {{{ nav side bar -->\n    <div class=\"sidebar-nav\">\n\n      <!-- {{{ global statistics -->\n      <ul class=\"nav nav-list\" ng-if=\"enable.sidebar.stats\">\n        <li class=\"nav-header\" ng-show=\"totalAria2Downloads()\">{{ 'Global Statistics' | translate }}</li>\n        <li>\n          <div\n            id=\"global-graph\"\n            yticks=\"3\"\n            xticks=\"1\"\n            dspeed=\"gstats.downloadSpeed\"\n            uspeed=\"gstats.uploadSpeed\"\n            dgraph ng-show=\"totalAria2Downloads()\"\n            nolabel=\"true\"\n            draw=\"true\">\n          </div>\n        </li>\n        <li>\n          <span title=\"Upload Speed\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-up\"></use></svg>{{gstats.uploadSpeed | bspeed}}</span><br />\n          <span title=\"Download Speed\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-down\"></use></svg>{{gstats.downloadSpeed | bspeed}}</span>\n        </li>\n      </ul>\n      <!-- }}} -->\n\n      <br />\n\n      <!-- {{{ download filters -->\n      <ul id=\"filters\" class=\"clearfix nav nav-list\" ng-show=\"enable.sidebar.filters\">\n        <li class=\"nav-header\">{{ 'Download Filters' | translate }}</li>\n        <li class=\"checkbox\">\n          <label for=\"filter-speed\">\n            <input type=\"checkbox\" ng-model=\"filterSpeed\" ng-change=\"persistFilters()\" id=\"filter-speed\">\n            {{ 'Running' | translate }}\n          </label>\n        </li>\n        <li class=\"active checkbox\">\n          <label for=\"filter-active\">\n            <input type=\"checkbox\" ng-model=\"filterActive\" ng-change=\"persistFilters()\" id=\"filter-active\">\n            {{ 'Active' | translate }}\n          </label>\n        </li>\n        <li class=\"checkbox\">\n          <label for=\"filter-waiting\">\n            <input type=\"checkbox\" ng-model=\"filterWaiting\" ng-change=\"persistFilters()\" id=\"filter-waiting\">\n            {{ 'Waiting' | translate }}\n          </label>\n        </li>\n        <li class=\"checkbox\">\n          <label for=\"filter-complete\">\n            <input type=\"checkbox\" ng-model=\"filterComplete\" ng-change=\"persistFilters()\" id=\"filter-complete\">\n            {{ 'Complete' | translate }}\n          </label>\n        </li>\n        <li class=\"checkbox\">\n          <label for=\"filter-error\">\n            <input type=\"checkbox\" ng-model=\"filterError\" ng-change=\"persistFilters()\" id=\"filter-error\">\n            {{ 'Error' | translate }}\n          </label>\n        </li>\n        <li class=\"checkbox\">\n          <label for=\"filter-paused\">\n            <input type=\"checkbox\" ng-model=\"filterPaused\" ng-change=\"persistFilters()\" id=\"filter-paused\">\n            {{ 'Paused' | translate }}\n          </label>\n        </li>\n        <li class=\"checkbox\">\n          <label for=\"filter-removed\">\n            <input type=\"checkbox\" ng-model=\"filterRemoved\" ng-change=\"persistFilters()\" id=\"filter-removed\">\n            {{ 'Removed' | translate }}\n          </label>\n        </li>\n        <li class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" ng-model=\"hideLinkedMetadata\" id=\"hide-linked-metadata\">\n            {{ 'Hide linked meta-data' | translate }}\n          </label>\n        </li>\n        <li>\n          <p>\n          {{ 'Displaying' | translate }} <strong>{{totalDownloads}}</strong> {{ 'of' | translate }} <em>{{totalAria2Downloads()}}&nbsp;</em> {{ 'downloads' | translate }}\n          </p>\n          <p>\n            <button ng-click=\"toggleStateFilters()\" class=\"btn btn-default btn-xs\">{{ 'Toggle' | translate }}</button>\n            <button ng-click=\"resetFilters()\" class=\"btn btn-default btn-xs\">{{ 'Reset filters' | translate }}</button>\n          </p>\n        </li>\n      </ul>\n      <!-- }}} -->\n\n      <br />\n\n\n      <!-- {{{ starred properties -->\n      <ul class=\"clearfix nav nav-list\" ng-controller=\"StarredPropsCtrl\" ng-show=\"properties.length && enable.sidebar.starredProps\">\n        <li class=\"nav-header\">{{ 'Quick Access Settings' | translate }}</li>\n        <li ng-repeat=\"prop in properties\" class=\"form-group\">\n          <label title=\"{{prop.desc}}\" style=\"width: 100%;\">{{prop.name}}</label>\n          <div class=\"form-group\">\n            <select style=\"width: 100%;\" ng-show=\"prop.options.length && !prop.multiline\" class=\"form-control\" ng-options=\"opt for opt in prop.options\" ng-model=\"prop.val\"></select>\n            <input style=\"width: 100%;\" ng-show=\"!prop.options.length && !prop.multiline\" type=\"text\" class=\"form-control input-large\" ng-model=\"prop.val\"/>\n            <textarea style=\"width: 100%;\" ng-show=\"prop.multiline\" ng-model=\"prop.val\"></textarea>\n          </div>\n        </li>\n        <li>\n          <button ng-disabled=\"!enabled()\" ng-click=\"save()\" class=\"btn btn-default btn-sm\">{{ 'Save settings' | translate }}</button>\n        </li>\n      </ul>\n      <!-- }}} -->\n\n\n    </div>\n    <!-- }}} -->\n  </div>\n\n  <div ng-class=\"{'col-md-9': enable.sidebar.show, 'col-md-12': !enable.sidebar.show }\">\n    <!-- {{{ downloads -->\n    <!-- Bug?? <div ng-show=\"!totalAria2Downloads() && totalAria2Downloads() > getDownloads()\" class=\"hero-unit\">-->\n    <div ng-show=\"!totalAria2Downloads()\" class=\"download-empty\">\n      {{ 'Currently no download in line to display, use the' | translate }} <strong>{{ 'Add' | translate }}</strong> {{ 'download button to start downloading files!' | translate }}\n    </div>\n\n\n    <!-- {{{ download template -->\n\n    <div\n      ng-repeat=\"download in getDownloads()\"\n      class=\"row-fluid download\" data-gid=\"{{download.gid}}\"\n      ng-click=\"toggleCollapsed(download)\">\n    <div class=\"download-name download-item download-controls clearfix\">\n        <!-- {{{ download control buttons -->\n        <div class=\"btn-group\" role=\"group\" ng-click=\"$event.stopPropagation()\">\n            <button\n                ng-if=\"hasStatus(download, ['active', 'waiting'])\"\n                class=\"btn btn-default\"\n                ng-click=\"pause(download)\">\n                <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-pause\"></use></svg>\n            </button>\n\n            <button\n                ng-if=\"hasStatus(download, 'paused')\"\n                class=\"btn btn-default\"\n                ng-click=\"resume(download)\">\n                <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-play\"></use></svg>\n            </button>\n\n            <button\n                ng-if=\"canRestart(download)\"\n                class=\"btn btn-default\"\n                ng-click=\"restart(download)\">\n                <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-repeat\"></use></svg>\n            </button>\n\n            <button\n                class=\"btn btn-default hidden-phone\"\n                ng-click=\"remove(download)\">\n                <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-stop\"></use></svg>\n            </button>\n\n            <button\n                ng-if=\"hasStatus(download, 'paused')\"\n                class=\"btn btn-default\"\n                ng-click=\"selectFiles(download)\">\n                <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-list\"></use></svg>\n            </button>\n\n            <button\n                class=\"btn btn-default hidden-phone\"\n                ng-if=\"['waiting', 'active'].indexOf( getType(download) )!= -1\"\n                ng-click=\"showSettings(download)\">\n                <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cog\"></use></svg>\n            </button>\n            <button\n                ng-if=\"hasStatus(download, 'waiting')\"\n                class=\"btn btn-default hidden-phone\"\n                ng-click=\"moveDown(download)\">\n                <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-down\"></use></svg>\n            </button>\n            <button\n                ng-if=\"hasStatus(download, 'waiting')\"\n                class=\"btn btn-default hidden-phone\"\n                ng-click=\"moveUp(download)\">\n                <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-up\"></use></svg>\n            </button>\n            <div class=\"btn-group\" dropdown>\n                <button class=\"btn btn-default dropdown-toggle\" dropdown-toggle>\n                    <span class=\"caret\"></span>\n                </button>\n                <ul class=\"dropdown-menu pull-right\">\n\n                    <li class=\"visible-phone\">\n                        <a\n                            ng-click=\"showSettings(download)\"\n                            ng-show=\"['waiting', 'active'].indexOf( getType(download) )!= -1\"\n                            href=\"#\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cog\"></use></svg> {{ 'Settings' | translate }}</a>\n                    </li>\n\n                    <li ng-show=\"download.bittorrent && false\">\n                        <a href=\"#\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-list-alt\"></use></svg> {{ 'Peers' | translate }}</a>\n                    </li>\n\n                    <li>\n                        <a ng-click=\"toggleCollapsed(download)\"\n                           href=\"#\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-info-circle\"></use></svg> {{ 'More Info' | translate }}</a>\n                    </li>\n\n                    <li class=\"visible-phone\">\n                        <a ng-click=\"remove(download)\"\n                           href=\"#\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-times\"></use></svg> {{ 'Remove' | translate }}</a>\n                    </li>\n                </ul>\n            </div>\n        </div>\n        <!-- }}} -->\n\n        <div class=\"title\">\n            <svg ng-show=\"download.metadata\" class=\"icon icon-fw\" style=\"fill: red\"><use xlink:href=\"#icon-magnet\"></use></svg>\n            {{download.name}}\n        </div>\n    </div>\n      <div class=\"download-overview download-item clearfix\" ng-switch=\"download.status\">\n        <!-- {{{ statistics -->\n        <ul class=\"stats pull-left\" ng-switch-when=\"active\">\n          <!-- {{{ active download statistics -->\n          <li class=\"label label-active hidden-phone hidden-tablet\">\n            <span title=\"{{ 'Download status' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-play\"></use></svg> {{ 'Active' | translate }}</span>\n          </li>\n\n          <li class=\"label label-default\" ng-class=\"{'label-active': download.downloadSpeed > 2048, 'label-warning': download.downloadSpeed <= 2048}\">\n            <span title=\"{{ 'Download Speed' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-down\"></use></svg> {{download.downloadSpeed | bspeed}}</span>\n          </li>\n\n          <li ng-show=\"download.bittorrent\" class=\"label label-default hidden-phone\" ng-class=\"{'label-info': download.uploadSpeed > 2048}\">\n            <span title=\"{{ 'Upload Speed' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-up\"></use></svg> {{download.uploadSpeed | bspeed}}</span>\n          </li>\n\n          <li class=\"label label-active\">\n            <span title=\"{{ 'Estimated time' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-clock-o\"></use></svg> {{getEta(download) | time}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone\">\n            <span title=\"{{ 'Download Size' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cloud-download\"></use></svg> {{download.fmtTotalLength}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone\">\n            <span title=\"{{ 'Downloaded' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-down\"></use></svg> {{download.fmtCompletedLength}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone\">\n            <span title=\"{{ 'Uploaded' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-upload\"></use></svg> {{download.fmtUploadLength}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone\">\n            <span title=\"{{ 'Ratio' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-percent\"></use></svg> {{ 'Ratio' | translate }}&nbsp;{{getRatio(download)}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone hidden-tablet\">\n            <span title=\"{{ 'Progress' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-chevron-right\"></use></svg> {{getProgress(download)}}%</span>\n          </li>\n\n          <!-- }}} -->\n        </ul>\n\n        <ul class=\"stats pull-left\" ng-switch-when=\"verifying\">\n          <!-- {{{ active download statistics -->\n          <li class=\"label label-warning hidden-phone hidden-tablet\">\n            <span title=\"{{ 'Download status' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-play\"></use></svg> {{ 'Verifying' | translate }}</span>\n          </li>\n\n          <li class=\"label label-default\" ng-class=\"{'label-active': download.downloadSpeed > 2048, 'label-warning': download.downloadSpeed <= 2048}\">\n            <span title=\"{{ 'Download Speed' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-down\"></use></svg> {{download.downloadSpeed | bspeed}}</span>\n          </li>\n\n          <li ng-show=\"download.bittorrent\" class=\"label label-default hidden-phone\" ng-class=\"{'label-info': download.uploadSpeed > 2048}\">\n            <span title=\"{{ 'Upload Speed' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-up\"></use></svg> {{download.uploadSpeed | bspeed}}</span>\n          </li>\n\n          <li class=\"label label-active\">\n            <span title=\"{{ 'Estimated time' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-clock-o\"></use></svg> {{getEta(download) | time}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone\">\n            <span title=\"{{ 'Download Size' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cloud-download\"></use></svg> {{download.fmtTotalLength}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone\">\n            <span title=\"{{ 'Downloaded' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-down\"></use></svg> {{download.fmtCompletedLength}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone hidden-tablet\">\n            <span title=\"{{ 'Progress' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-chevron-right\"></use></svg> {{getProgress(download)}}%</span>\n          </li>\n\n          <!-- }}} -->\n        </ul>\n\n        <ul class=\"stats pull-left\" ng-switch-when=\"verifyPending\">\n          <!-- {{{ active download statistics -->\n          <li class=\"label label-warning hidden-phone hidden-tablet\">\n            <span title=\"{{ 'Download status' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-play\"></use></svg> {{ 'Verify Pending' | translate}}</span>\n          </li>\n\n          <li class=\"label label-default\" ng-class=\"{'label-active': download.downloadSpeed > 2048, 'label-warning': download.downloadSpeed <= 2048}\">\n            <span title=\"{{ 'Download Speed' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-down\"></use></svg> {{download.downloadSpeed | bspeed}}</span>\n          </li>\n\n          <li ng-show=\"download.bittorrent\" class=\"label label-default hidden-phone\" ng-class=\"{'label-info': download.uploadSpeed > 2048}\">\n            <span title=\"{{ 'Upload Speed' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-up\"></use></svg> {{download.uploadSpeed | bspeed}}</span>\n          </li>\n\n          <li class=\"label label-active\">\n            <span title=\"{{ 'Estimated time' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-clock-o\"></use></svg> {{getEta(download) | time}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone\">\n            <span title=\"{{ 'Download Size' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cloud-download\"></use></svg> {{download.fmtTotalLength}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone\">\n            <span title=\"{{ 'Downloaded' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-down\"></use></svg> {{download.fmtCompletedLength}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone hidden-tablet\">\n            <span title=\"{{ 'Progress' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-chevron-right\"></use></svg> {{getProgress(download)}}%</span>\n          </li>\n\n          <!-- }}} -->\n        </ul>\n\n        <ul class=\"stats pull-left\" ng-switch-when=\"paused\">\n          <!-- {{{ paused download statistics -->\n          <li class=\"label label-info\">\n            <span title=\"{{ 'Download status' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-pause\"></use></svg> {{ 'Paused' | translate }}</span>\n          </li>\n\n          <li class=\"label label-info\">\n            <span title=\"{{ 'Download Size' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cloud-download\"></use></svg> {{download.fmtTotalLength}}</span>\n          </li>\n\n          <li class=\"label label-info hidden-phone\">\n            <span title=\"{{ 'Downloaded' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-download\"></use></svg> {{download.fmtCompletedLength}}</span>\n          </li>\n\n          <li class=\"label label-info hidden-phone\">\n            <span title=\"{{ 'Download Path' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-folder-open\"></use></svg> {{download.dir}}</span>\n          </li>\n\n          <!--  }}} -->\n        </ul>\n\n        <ul class=\"stats pull-left\" ng-switch-when=\"waiting\">\n          <!-- {{{ paused download statistics -->\n          <li class=\"label label-default\">\n            <span title=\"{{ 'Download status' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-chevron-right\"></use></svg> {{ 'Waiting' | translate }}</span>\n          </li>\n\n          <li class=\"label label-default\">\n            <span title=\"{{ 'Download Size' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cloud-download\"></use></svg> {{download.fmtTotalLength}}</span>\n          </li>\n\n          <li class=\"label label-default hidden-phone\">\n            <span title=\"{{ 'Downloaded' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-download\"></use></svg> {{download.fmtCompletedLength}}</span>\n          </li>\n\n          <li class=\"label label-default hidden-phone\">\n            <span title=\"{{ 'Download Path' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-folder-open\"></use></svg> {{download.dir}}</span>\n          </li>\n\n          <!--  }}} -->\n        </ul>\n\n        <ul class=\"stats pull-left\" ng-switch-when=\"complete\">\n          <!-- {{{ complete download statistics -->\n\n          <li class=\"label label-success\">\n            <span title=\"{{ 'Download status' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-check-square-o\"></use></svg> {{ 'Complete' | translate }}</span>\n          </li>\n\n          <li class=\"label label-success\">\n            <span title=\"{{ 'Download Size' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cloud-download\"></use></svg> {{download.fmtTotalLength}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone\">\n            <span title=\"{{ 'Uploaded' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-upload\"></use></svg> {{download.fmtUploadLength}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone\">\n            <span title=\"{{ 'Ratio' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-percent\"></use></svg> {{ 'Ratio' | translate }}&nbsp;{{getRatio(download)}}</span>\n          </li>\n\n          <li class=\"label label-success hidden-phone\">\n            <span title=\"{{ 'Download Path' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-folder-open\"></use></svg> {{download.dir}}</span>\n          </li>\n\n          <!-- }}} -->\n        </ul>\n\n        <ul class=\"stats pull-left\" ng-switch-when=\"removed\">\n          <!-- {{{ removed download statistics -->\n          <li class=\"label label-warning\">\n            <span title=\"{{ 'Download status' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-times\"></use></svg> {{ 'Removed' | translate }}</span>\n          </li>\n\n          <li class=\"label label-warning\">\n            <span title=\"{{ 'Download Size' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cloud-download\"></use></svg> {{download.fmtTotalLength}}</span>\n          </li>\n\n          <li class=\"label label-warning hidden-phone\">\n            <span title=\"{{ 'Download Path' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-folder-open\"></use></svg> {{download.dir}}</span>\n          </li>\n\n          <!-- }}} -->\n        </ul>\n\n        <ul class=\"stats pull-left\" ng-switch-when=\"error\">\n\n          <!-- {{{ error download statistics -->\n          <li class=\"label label-danger\">\n            <span title=\"{{ 'Error ' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-close-circle\"></use></svg> {{getErrorStatus(download.errorCode)}}</span>\n          </li>\n\n          <li class=\"label label-default\">\n            <span title=\"{{ 'Download Size' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cloud-download\"></use></svg> {{download.fmtTotalLength}}</span>\n          </li>\n\n          <li class=\"label label-default hidden-phone\">\n            <span title=\"{{ 'Download Path' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-folder-open\"></use></svg> {{download.dir}}</span>\n          </li>\n\n          <!-- }}} -->\n        </ul>\n\n        <!-- }}} -->\n      </div>\n      <div class=\"download-progress download-item\">\n        <div class=\"progress\">\n          <div ng-class=\"'progress-bar progress-bar-striped ' + getProgressClass(download)\" style=\"width: {{getProgress(download)}}%;\"></div>\n        </div>\n      </div>\n      <div ng-switch=\"download.collapsed\">\n        <div ng-switch-when=\"false\" collapse=\"download.animCollapsed\">\n          <div class=\"download-item\" ng-show=\"download.numPieces > 1\">\n            <canvas bitfield=\"download.bitfield\" draw=\"!download.collapsed\" pieces=\"download.numPieces\" class=\"progress chunk-canvas\" width=\"1400\" chunkbar></canvas>\n          </div>\n          <ul class=\"stats download-item\">\n            <li class=\"label label-default\" title=\"{{ 'Estimated time' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-clock-o\"></use></svg> <span class=\"download-eta\">{{getEta(download) | time}}</span></li>\n\n            <li class=\"label label-default\" title=\"{{ 'Download Size' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cloud-download\"></use></svg> <span class=\"download-totalLength\">{{download.fmtTotalLength}}</span></li>\n\n            <li class=\"label label-default\" title=\"{{ 'Downloaded' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-download\"></use></svg> <span class=\"download-completedLength\">{{download.fmtCompletedLength}}</span></li>\n\n            <li class=\"label label-default\" title=\"{{ 'Download Speed' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-down\"></use></svg> <span class=\"download-downloadSpeed\">{{download.fmtDownloadSpeed}}</span></li>\n\n            <li class=\"label label-default\" title=\"{{ 'Upload Speed' | translate }}\" ng-show=\"download.bittorrent\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-up\"></use></svg> <span class=\"download-uploadSpeed\">{{download.fmtUploadSpeed}}</span></li>\n\n            <li class=\"label label-default\" title=\"{{ 'Uploaded' | translate }}\" ng-show=\"download.bittorrent\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-upload\"></use></svg> <span class=\"download-uploadLength\">{{download.fmtUploadLength}}</span></li>\n\n            <li class=\"label label-default\" title=\"{{ 'Ratio' | translate }}\" ng-show=\"download.bittorrent\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-percent\"></use></svg><span title=\"{{ 'Ratio' | translate }}\">{{ 'Ratio' | translate }}&nbsp;{{getRatio(download)}}</span></li>\n\n            <li class=\"label label-default\" title={{download.connectionsTitle}}><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-link\"></use></svg> <span class=\"download-connections\">{{download.connections}}{{download.numSeeders}}</span></li>\n\n            <li class=\"label label-default\" title=\"{{ 'Download GID' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-bars\"></use></svg> <span class=\"download-gid\">{{download.gid}}</span></li>\n            <li class=\"label label-default\" title=\"{{ 'Number of Pieces' | translate }}\">{{ '# of' | translate }} <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-puzzle-piece\"></use></svg> <span class=\"download-numPieces\">{{download.numPieces}}</span></li>\n            <li class=\"label label-default\" title=\"{{ 'Piece Length' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-puzzle-piece\"></use></svg> {{ 'Length' | translate }}&nbsp; <span class=\"download-pieceLength\">{{download.fmtPieceLength}}</span></li>\n            <li class=\"label label-default\" title=\"{{ 'Download Path' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-folder-open\"></use></svg> <span class=\"download-dir\">{{download.dir}}</span></li>\n          </ul>\n          <ul class=\"download-files hidden-phone download-item\">\n            <li class=\"label label-default\" ng-repeat=\"file in download.files\" ng-class=\"{'label-success': file.selected}\">\n              <a ng-if=\"hasDirectURL()\" ng-click=\"$event.stopPropagation()\" ng-href=\"{{getDirectURL()}}{{file.relpath | encodeURI}}\" target=\"download\">{{file.relpath}} ({{file.fmtLength}})</a>\n              <span ng-if=\"!hasDirectURL()\">{{file.relpath}} ({{file.fmtLength}})</span>\n            </li>\n          </ul>\n          <div ng-show=\"hasStatus(download, 'active')\" class=\"download-item hidden-phone\">\n            <div class=\"download-graph\" dspeed=\"download.downloadSpeed\" uspeed=\"download.uploadSpeed\" xticks=\"7\" yticks=\"7\"  dgraph draw=\"!download.collapsed\"></div>\n          </div>\n        </div>\n      </div>\n    </div>\n    <!-- }}} -->\n\n    <!-- }}} -->\n  </div>\n\n  <!-- {{{ download pagination -->\n  <div class=\"col-md-offset-3 col-md-9\" ng-show=\"totalDownloads > pageSize\">\n    <div class=\"pagination pull-right\">\n      <pagination\n        total-items=\"totalDownloads\"\n        items-per-page=\"pageSize\"\n        max-size=\"11\"\n        ng-model=\"currentPage\"\n        boundary-links=\"true\"\n        previous-text=\"&lsaquo;\"\n        next-text=\"&rsaquo;\"\n        first-text=\"&laquo;\"\n        last-text=\"&raquo;\"\n        >\n      </pagination>\n    </div>\n  </div>\n  <!-- }}} -->\n</div>\n\n</div>\n\n<!-- }}} -->\n\n<!-- {{{ modals -->\n<div ng-controller=\"ModalCtrl\">\n\n<!--{{{ add uri modal -->\n<script type=\"text/ng-template\" id=\"getUris.html\">\n  <div class=\"modal-header\">\n    <button class=\"close\" ng-click=\"$dismiss()\">&times;</button>\n    <h4>{{ 'Add Downloads By URIs' | translate }}</h4>\n  </div>\n  <form class=\"modal-body\">\n    <fieldset>\n      <p class=\"help-block\">\n    {{ '- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.' | translate }}<br />\n    {{ '- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.' | translate }}<br />\n    {{ '- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.' | translate }}</br>\n      </p>\n      <textarea rows=\"4\" style=\"width: 100%\" ng-model=\"getUris.uris\" autofocus placeholder=\"http://mirror1.com/f1.jpg http://mirror2.com/f1.jpg\\nhttp://mirror1.com/f2.mp4 http://mirror2.com/f2.mp4 --out=file2.mp4\"></textarea>\n      <br /><br />\n\n        <div>\n          <div ng-click=\"getUris.downloadSettingsCollapsed = !getUris.downloadSettingsCollapsed\" class=\"modal-advanced-title\">\n            {{ 'Download settings' | translate }}\n            <span class=\"caret\" ng-class=\"{ 'rotate-90': getUris.downloadSettingsCollapsed }\"></span>\n          </div>\n          <div collapse=\"getUris.downloadSettingsCollapsed\" class=\"form-horizontal modal-advanced-options\">\n            <div class=\"form-group\" ng-repeat=\"(name, set) in getUris.settings\">\n              <label class=\"col-sm-3 control-label\">{{name}}</label>\n\n              <div class=\"col-sm-9 controls\">\n                <select class=\"form-control\" ng-show=\"set.options.length && !set.multiline\" ng-options=\"opt for opt in set.options\" ng-model=\"set.val\">\n                </select>\n                <input ng-show=\"!set.options.length && !set.multiline\" type=\"text\" class=\"form-control input-xxlarge modal-form-input-verylarge\" ng-model=\"set.val\"/>\n                <textarea ng-show=\"set.multiline\" ng-model=\"set.val\"></textarea>\n              </div>\n              <br />\n            </div>\n          </div>\n\n          <br />\n          <div ng-click=\"getUris.advancedSettingsCollapsed = !getUris.advancedSettingsCollapsed\" class=\"modal-advanced-title\">\n            {{ 'Advanced settings' | translate }}\n            <span class=\"caret\" ng-class=\"{ 'rotate-90': getUris.advancedSettingsCollapsed }\"></span>\n          </div>\n          <div collapse=\"getUris.advancedSettingsCollapsed\" class=\"form-horizontal modal-advanced-options\">\n            <div class=\"form-group\" ng-repeat=\"(name, set) in getUris.fsettings\">\n              <p class=\"col-sm-offset-3 col-sm-9 help-block controls\">{{set.desc}}</p>\n\n              <label class=\"col-sm-3 control-label\">{{name}}</label>\n              <div class=\"col-sm-9 controls\">\n                <select class=\"form-control\" ng-show=\"set.options.length && !set.multiline\" ng-options=\"opt for opt in set.options\" ng-model=\"set.val\">\n                </select>\n                <input ng-show=\"!set.options.length && !set.multiline\" type=\"text\" class=\"form-control input-xxlarge modal-form-input-verylarge\" ng-model=\"set.val\"/>\n                <textarea ng-show=\"set.multiline\" ng-model=\"set.val\"></textarea>\n              </div>\n              <br />\n            </div>\n          </div>\n        </div>\n    </fieldset>\n    <div class=\"modal-footer\">\n      <button type=\"button\" class=\"btn btn-default\" ng-click=\"$dismiss()\">{{ 'Cancel' | translate }}</button>\n      <button class=\"btn btn-default btn-primary\" ng-click=\"$close()\">{{ 'Start' | translate }}</button>\n    </div>\n  </form>\n</script>\n<!-- }}} -->\n\n<!-- {{{ add torrent modal -->\n<script type=\"text/ng-template\" id=\"getTorrents.html\">\n  <div class=\"modal-header\">\n    <button class=\"close\" ng-click=\"$dismiss()\">&times;</button>\n    <h4>{{ 'Add Downloads By Torrents' | translate }}</h4>\n  </div>\n  <form class=\"modal-body\">\n    <fieldset>\n      <legend>{{ 'Select Torrents' | translate }}</legend>\n      <p class=\"help-block\">\n    {{ '- Select the torrent from the local filesystem to start the download.' | translate }}<br />\n    {{ '- You can select multiple torrents to start multiple downloads.' | translate }}<br />\n    {{ '- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.' | translate }}\n      </p>\n      <div class=\"form-horizontal form-group\">\n        <label class=\"control-label\" style=\"text-align: left;\"><b>{{ 'Select a Torrent' | translate }}:</b></label>\n        <div class=\"controls\">\n          <input type=\"file\" fselect=\"getTorrents.files\" multiple />\n        </div>\n      </div>\n      <br />\n\n      <div>\n        <div class=\"modal-advanced-title\">\n          {{ 'Download settings' | translate }}\n        </div>\n        <div class=\"form-horizontal modal-advanced-options\">\n          <div class=\"form-group\" ng-repeat=\"(name, set) in getTorrents.settings\">\n            <label class=\"col-sm-3 control-label\">{{name}}</label>\n\n            <div class=\"col-sm-9 controls\">\n              <select class=\"form-control\" ng-show=\"set.options.length && !set.multiline\" ng-options=\"opt for opt in set.options\" ng-model=\"set.val\">\n              </select>\n              <input ng-show=\"!set.options.length && !set.multiline\" type=\"text\" class=\"form-control input-xxlarge modal-form-input-verylarge\" ng-model=\"set.val\"/>\n              <textarea ng-show=\"set.multiline\" ng-model=\"set.val\"></textarea>\n            </div>\n            <br />\n          </div>\n        </div>\n\n        <br />\n        <div ng-click=\"getTorrents.collapsed = !getTorrents.collapsed\" class=\"modal-advanced-title\">\n          {{ 'Advanced settings' | translate }}\n          <span class=\"caret\" ng-class=\"{ 'rotate-90': getTorrents.collapsed }\"></span>\n        </div>\n        <div collapse=\"getTorrents.collapsed\" class=\"form-horizontal modal-advanced-options\">\n          <div class=\"form-group\" ng-repeat=\"(name, set) in getTorrents.fsettings\">\n            <p class=\"col-sm-offset-3 col-sm-9 help-block controls\">{{set.desc}}</p>\n\n            <label class=\"col-sm-3 control-label\">{{name}}</label>\n            <div class=\"col-sm-9 controls\">\n              <select class=\"form-control\" ng-show=\"set.options.length && !set.multiline\" ng-options=\"opt for opt in set.options\" ng-model=\"set.val\">\n              </select>\n              <input ng-show=\"!set.options.length && !set.multiline\" type=\"text\" class=\"form-control input-xxlarge modal-form-input-verylarge\" ng-model=\"set.val\"/>\n              <textarea ng-show=\"set.multiline\" ng-model=\"set.val\"></textarea>\n            </div>\n            <br />\n          </div>\n        </div>\n      </div>\n    </fieldset>\n  </form>\n  <div class=\"modal-footer\">\n    <button class=\"btn btn-default\" ng-click=\"$dismiss()\">{{ 'Cancel' | translate }}</button>\n    <button class=\"btn btn-default btn-primary\" ng-click=\"$close()\">{{ 'Start' | translate }}</button>\n  </div>\n</script>\n<!-- }}} -->\n\n<!-- {{{ add metalink modal -->\n<script type=\"text/ng-template\" id=\"getMetalinks.html\">\n  <div class=\"modal-header\">\n    <button class=\"close\" ng-click=\"$dismiss()\">&times;</button>\n    <h4>{{ 'Add Downloads By Metalinks' | translate }}</h4>\n  </div>\n  <form class=\"modal-body\">\n    <fieldset>\n      <legend>{{ 'Select Metalinks' | translate }}</legend>\n      <p class=\"help-block\">\n    {{ '- Select the Metalink from the local filesystem to start the download.' | translate }}<br />\n    {{ '- You can select multiple Metalinks to start multiple downloads.' | translate }}\n      </p>\n      <div class=\"form-horizontal form-group\">\n        <label class=\"control-label\" style=\"text-align: left;\"><b>{{ 'Select a Metalink' | translate }}:</b></label>\n        <div class=\"controls\">\n          <input type=\"file\" fselect=\"getMetalinks.files\" multiple />\n        </div>\n      </div>\n      <br />\n\n      <div>\n        <div class=\"modal-advanced-title\">\n          {{ 'Download settings' | translate }}\n        </div>\n        <div class=\"form-horizontal modal-advanced-options\">\n          <div class=\"form-group\" ng-repeat=\"(name, set) in getMetalinks.settings\">\n            <label class=\"col-sm-3 control-label\">{{name}}</label>\n\n            <div class=\"col-sm-9 controls\">\n              <select class=\"form-control\" ng-show=\"set.options.length && !set.multiline\" ng-options=\"opt for opt in set.options\" ng-model=\"set.val\">\n              </select>\n              <input ng-show=\"!set.options.length && !set.multiline\" type=\"text\" class=\"form-control input-xxlarge modal-form-input-verylarge\" ng-model=\"set.val\"/>\n              <textarea ng-show=\"set.multiline\" ng-model=\"set.val\"></textarea>\n            </div>\n            <br />\n          </div>\n        </div>\n\n        <br />\n        <div ng-click=\"getMetalinks.collapsed = !getMetalinks.collapsed\" class=\"modal-advanced-title\">\n          {{ 'Advanced settings' | translate }}\n          <span class=\"caret\" ng-class=\"{ 'rotate-90': getMetalinks.collapsed }\"></span>\n        </div>\n        <div collapse=\"getMetalinks.collapsed\" class=\"form-horizontal modal-advanced-options\">\n          <div class=\"form-group\" ng-repeat=\"(name, set) in getMetalinks.fsettings\">\n            <p class=\"col-sm-offset-3 col-sm-9 help-block controls\">{{set.desc}}</p>\n\n            <label class=\"col-sm-3 control-label\">{{name}}</label>\n            <div class=\"col-sm-9 controls\">\n              <select class=\"form-control\" ng-show=\"set.options.length && !set.multiline\" ng-options=\"opt for opt in set.options\" ng-model=\"set.val\">\n              </select>\n              <input ng-show=\"!set.options.length && !set.multiline\" type=\"text\" class=\"form-control input-xxlarge modal-form-input-verylarge\" ng-model=\"set.val\"/>\n              <textarea ng-show=\"set.multiline\" ng-model=\"set.val\"></textarea>\n            </div>\n            <br />\n          </div>\n        </div>\n      </div>\n    </fieldset>\n  </form>\n  <div class=\"modal-footer\">\n    <button class=\"btn btn-default\" ng-click=\"$dismiss()\">{{ 'Cancel' | translate }}</button>\n    <button class=\"btn btn-default btn-primary\" ng-click=\"$close()\">{{ 'Start' | translate }}</button>\n  </div>\n</script>\n<!-- }}} -->\n\n<!-- {{{ select files checkbox modal -->\n<script type=\"text/ng-template\" id=\"selectFilesCheckBox.html\">\n  <div ng-repeat=\"(folderName,folder) in files.dirs\">\n    <!--recursive folder-->\n\n    <div class=\"controls\">\n      <!--click to toggle show the subfolders and files-->\n      <div class=\"checkbox\" data-ng-click=\"folder.show=!folder.show\">\n        <!-- The value of indeterminate=\"\" can be bound to any angular expression -->\n        <input type=\"checkbox\" data-ng-model=\"folder.selected\" data-ng-click=\"$event.stopPropagation()\" indeterminate/>{{folderName}}\n        <span ng-show=\"!folder.show\" class=\"control-label\">{{ 'click the text to expand the folder' | translate }}</span>\n        <span ng-show=\"folder.show\" class=\"control-label\">{{ 'click the text to collapse the folder' | translate }}</span>\n      </div>\n      <div ng-show=\"folder.show\" class=\"form-group selectFiles recursivedir\" ng-include=\"'selectFilesCheckBox.html'\" ng-init=\"files=folder\">\n      </div>\n    </div>\n  </div>\n\n  <div ng-repeat=\"file in files.files\">\n    <!--files-->\n    <label class=\"control-label\">{{ 'Select to download' | translate }}</label>\n\n    <div class=\"controls\">\n      <label class=\"checkbox\">\n        <input type=\"checkbox\" data-ng-model=\"file.selected\" indeterminate=\"false\"/>{{file.relpath}}\n      </label>\n    </div>\n    <br/>\n    <br/>\n  </div>\n</script>\n<!-- }}} -->\n\n<!-- {{{ select file modal -->\n<script type=\"text/ng-template\" id=\"selectFiles.html\">\n  <div class=\"modal-header\">\n    <button class=\"close\" ng-click=\"$dismiss()\">&times;</button>\n    <h4>{{ 'Choose files to start download for' | translate }}</h4>\n  </div>\n\n  <form class=\"form-horizontal modal-body\">\n    <fieldset>\n      <div class=\"form-group selectFiles\" ng-include=\"'selectFilesCheckBox.html'\" ng-init=\"files=selectFiles.groupedFiles\">\n      </div>\n    </fieldset>\n  </form>\n\n  <div class=\"modal-footer\">\n    <button class=\"btn btn-default\" ng-click=\"$dismiss()\">{{ 'Cancel' | translate }}</button>\n    <button class=\"btn btn-default btn-primary\" ng-click=\"$close()\">{{ 'Choose' | translate }}</button>\n  </div>\n</script>\n<!-- }}} -->\n\n<!-- {{{ settings modal -->\n<script type=\"text/ng-template\" id=\"settings.html\">\n  <div class=\"modal-header\">\n    <button class=\"close\" ng-click=\"$dismiss()\">&times;</button>\n    <h4>{{settings.title}}</h4>\n  </div>\n\n  <div class=\"modal-body\">\n    <div class=\"row\">\n      <div class=\"col-md-12 form-group filter-input-group\">\n        <input type=\"text\" class=\"form-control input-xlarge\" ng-model=\"propFilter\" placeholder=\"{{ 'Filter' | translate }}\"/>\n        <span class=\"clear-button\" ng-show=\"propFilter\" ng-click=\"propFilter = ''\">&times;</span>\n      </div>\n    </div>\n    <form class=\"form-horizontal\">                  \n      <fieldset>\n        <div class=\"form-group\" ng-repeat=\"(name, set) in settings.settings | objFilter:propFilter\">\n          <label class=\"col-sm-3 control-label\">{{name}}</label>\n\n          <div class=\"col-sm-9 controls\">\n            <select class=\"form-control\" ng-show=\"set.options.length && !set.multiline\" ng-options=\"opt for opt in set.options\" ng-model=\"set.val\">\n            </select>\n            <input ng-show=\"!set.options.length && !set.multiline\" type=\"text\" class=\"form-control input-xlarge\" ng-model=\"set.val\"/>\n            <textarea ng-show=\"set.multiline\" ng-model=\"set.val\"></textarea>\n            <div class=\"checkbox\" ng-show=\"set.starred != undefined\">\n              <label>\n                <input type=\"checkbox\" ng-model=\"set.starred\"/>\n                {{ 'Quick Access (shown on the main page)' | translate }}\n              </label>\n            </div>\n            <p class=\"help-block\">{{set.desc}}</p>\n          </div>\n        </div>\n      </fieldset>\n    </form>\n  </div>\n\n  <div class=\"modal-footer\">\n    <button class=\"btn btn-default\" ng-click=\"$dismiss()\">{{ 'Cancel' | translate }}</button>\n    <button class=\"btn btn-default btn-primary\" ng-click=\"$close()\">{{settings.actionText}}</button>\n  </div>\n</script>\n<!-- }}} -->\n\n<!--{{{ connection modal -->\n<script type=\"text/ng-template\" id=\"connection.html\">\n  <div class=\"modal-header\">\n    <button class=\"close\" ng-click=\"$dismiss()\">&times;</button>\n    <h4>{{ 'Connection Settings' | translate }}</h4>\n  </div>\n  <div class=\"modal-body\">\n    <form class=\"form-horizontal\">\n      <fieldset>\n        <legend>{{ 'Aria2 RPC host and port' | translate }}</legend>\n        <div class=\"form-group\">\n          <label class=\"col-sm-3 control-label\">{{ 'Enter the host' | translate }}:</label>\n          <div class=\"col-sm-9 controls\">\n            <div class=\"input-group\">\n              <span class=\"input-group-addon\">http(s)://</span>\n              <input type=\"text\" class=\"form-control input-xlarge\"\n                ng-model=\"connection.conf.host\"/>\n            </div>\n            <p class=\"help-block\">\n          {{ 'Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)' | translate }}\n            </p>\n          </div>\n        </div>\n\n        <div class=\"form-group\">\n          <label class=\"col-sm-3 control-label\">{{ 'Enter the port' | translate }}:</label>\n          <div class=\"col-sm-9 controls\">\n            <input type=\"text\" class=\"form-control input-xlarge modal-form-input-number\"\n              ng-model=\"connection.conf.port\"/>\n            <p class=\"help-block\">\n          {{ 'Enter the port of the server on which the RPC for Aria2 is running (default: 6800)' | translate }}\n            </p>\n          </div>\n        </div>\n\n        <div class=\"form-group\">\n          <label class=\"col-sm-3 control-label\">{{ 'Enter the RPC path' | translate }}:</label>\n          <div class=\"col-sm-9 controls\">\n            <div class=\"input-group\">\n\t\t\t  <span class=\"input-group-addon\">http(s)://{{connection.conf.host + ':' + connection.conf.port}}</span>\n              <input type=\"text\" class=\"form-control input-xlarge\"\n                ng-model=\"connection.conf.path\"/>\n            </div>\n            <p class=\"help-block\">\n          {{ 'Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)' | translate }}\n            </p>\n          </div>\n        </div>\n\n        <div class=\"form-group\">\n          <label class=\"col-sm-3 control-label\">{{ 'SSL/TLS encryption' | translate }}:</label>\n          <div class=\"col-sm-9 controls\">\n            <div class=\"checkbox\">\n              <label>\n                <input type=\"checkbox\" ng-model=\"connection.conf.encrypt\"/>\n                {{ 'Enable SSL/TLS encryption' | translate }}\n              </label>\n            </div>\n          </div>\n        </div>\n\n        <div class=\"form-group\">\n          <label class=\"col-sm-3 control-label\">{{ 'Enter the secret token (optional)' | translate }}:</label>\n          <div class=\"col-sm-9 controls\">\n            <label>\n              <input type=\"password\" class=\"form-control input-xlarge\" ng-model=\"connection.conf.auth.token\"/>\n              <p class=\"help-block\">\n          {{ 'Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)' | translate }}\n              </p>\n            </label>\n          </div>\n        </div>\n\n        <div class=\"form-group\">\n          <label class=\"col-sm-3 control-label\">{{ 'Enter the username (optional)' | translate }}:</label>\n          <div class=\"col-sm-9 controls\">\n            <input type=\"text\" class=\"form-control input-xlarge\"\n              ng-model=\"connection.conf.auth.user\"/>\n            <p class=\"help-block\">\n          {{ 'Enter the Aria2 RPC username (empty if authentication not enabled)' | translate }}\n            </p>\n          </div>\n        </div>\n\n        <div class=\"form-group\">\n          <label class=\"col-sm-3 control-label\">{{ 'Enter the password (optional)' | translate }}:</label>\n          <div class=\"col-sm-9 controls\">\n            <input type=\"password\" class=\"form-control input-xlarge\"\n              ng-model=\"connection.conf.auth.pass\"/>\n            <p class=\"help-block\">\n          {{ 'Enter the Aria2 RPC password (empty if authentication not enabled)' | translate }}\n            </p>\n          </div>\n        </div>\n      </fieldset>\n\n      <fieldset>\n        <legend>{{ 'Direct Download' | translate }}</legend>\n        <div class=\"form-group\">\n          <label class=\"col-sm-3 control-label\">{{ 'Enter base URL (optional)' | translate }}:</label>\n          <div class=\"col-sm-9 controls\">\n            <input type=\"text\" class=\"form-control input-xlarge\"\n              ng-model=\"connection.conf.directURL\"/>\n            <p class=\"help-block\">\n              {{ 'If supplied, links will be created to enable direct download from the Aria2 server.' | translate }}<br />\n              {{ '(Requires appropriate webserver to be configured.)' | translate }}\n            </p>\n          </div>\n        </div>\n      </fieldset>\n    </form>\n  </div>\n  <div class=\"modal-footer\">\n    <button href=\"#\" class=\"btn btn-default\" ng-click=\"$dismiss()\">{{ 'Cancel' | translate }}</button>\n    <button href=\"#\" class=\"btn btn-default btn-primary\" ng-click=\"$close()\">\n      {{ 'Save Connection configuration' | translate }}\n    </button>\n  </div>\n</script>\n<!-- }}} -->\n\n\n<!-- {{{ server info modal -->\n<script type=\"text/ng-template\" id=\"server_info.html\">\n  <div class=\"modal-header\">\n    <button class=\"close\" ng-click=\"$dismiss()\">&times;</button>\n    <h4>{{ 'Aria2 server info' | translate }}</h4>\n  </div>\n  <div class=\"modal-body\">\n      <b>{{ 'Aria2 Version' | translate }} {{miscellaneous.version}}</b>\n      <br /><br />\n      <b>{{ 'Features Enabled' | translate }}</b>\n        <ul>\n        <li\n          ng-repeat=\"feature in miscellaneous.enabledFeatures\">\n          <span>{{feature}}</span>\n        </li>\n        </ul>\n  </div>\n  <div class=\"modal-footer\">\n    <button class=\"btn btn-default\" ng-click=\"$dismiss()\">{{ 'Close' | translate }}</button>\n  </div>\n</script>\n<!-- }}} -->\n\n<!-- {{{ about modal -->\n<script type=\"text/ng-template\" id=\"about.html\">\n  <div class=\"modal-header\">\n    <button class=\"close\" ng-click=\"$dismiss()\">&times;</button>\n    <h4>{{ 'About and contribute' | translate }}</h4>\n  </div>\n  <div class=\"modal-body\">\n      <p>\n        {{ 'To download the latest version of the project, add issues or to contribute back, head on to' | translate }}:<br />\n        <a href=\"https://github.com/ziahamza/webui-aria2\" target=\"_blank\">https://github.com/ziahamza/webui-aria2</a>\n        <br /><br />\n        {{ 'Or you can open the latest version in the browser through' | translate }}:<br />\n        <a href=\"https://ziahamza.github.io/webui-aria2\" target=\"_blank\">https://ziahamza.github.io/webui-aria2</a>\n      </p>\n  </div>\n  <div class=\"modal-footer\">\n    <button class=\"btn btn-default\" ng-click=\"$dismiss()\">{{ 'Close' | translate }}</button>\n  </div>\n</script>\n<!-- }}} -->\n\n</div>\n<!-- }}} -->\n\n</body>\n</html>\n"
  },
  {
    "path": "docs/precache-manifest.b562a874cfed1a8c74df9b49e6f1c2cc.js",
    "content": "self.__precacheManifest = [\n  {\n    revision: \"4eb7af0db693855a4f24cb119a73110d\",\n    url: \"flags/de.svg\"\n  },\n  {\n    revision: \"3b828f54c0e614e18db2c1816c9c2e84\",\n    url: \"index.html\"\n  },\n  {\n    revision: \"3b00bc3b62feafb50a2e\",\n    url: \"vendor.js\"\n  },\n  {\n    revision: \"8020fcd82cc09410f7bad1bc875c115a\",\n    url: \"flags/es.svg\"\n  },\n  {\n    revision: \"617c6a550519013aed310e0fe85bb088\",\n    url: \"flags/us.svg\"\n  },\n  {\n    revision: \"0f6e3867129940ef785c7c8720e0b56d\",\n    url: \"flags/ru.svg\"\n  },\n  {\n    revision: \"09ccf3b3b0a12dd5b3559acedc77858c\",\n    url: \"flags/nl.svg\"\n  },\n  {\n    revision: \"22084f478d0f401fa96288f7790ba8ef\",\n    url: \"flags/tw.svg\"\n  },\n  {\n    revision: \"4a936767fc2ac7335885d90b471d8629\",\n    url: \"flags/pl.svg\"\n  },\n  {\n    revision: \"60fb243496d39972a15bf5a78b6e50ee\",\n    url: \"flags/tr.svg\"\n  },\n  {\n    revision: \"a88d006ab7afa49d76ecd86dd1b11f77\",\n    url: \"flags/th.svg\"\n  },\n  {\n    revision: \"d5204a17fb30a59a4760b4109fbefe0b\",\n    url: \"flags/it.svg\"\n  },\n  {\n    revision: \"5e7a66fb0660b714f1a47859b90767e0\",\n    url: \"flags/ir.svg\"\n  },\n  {\n    revision: \"d107c3019844d2d1f0a4d179cbd8046e\",\n    url: \"flags/id.svg\"\n  },\n  {\n    revision: \"be1df903f0d7711ef8a4e96b6ca56dc0\",\n    url: \"flags/fr.svg\"\n  },\n  {\n    revision: \"5d1c62c220e3dcc85d70e206d44a9d4c\",\n    url: \"flags/cz.svg\"\n  },\n  {\n    revision: \"bedfd890b6c16afeb952546279242cf7\",\n    url: \"flags/cn.svg\"\n  },\n  {\n    revision: \"78de6acf30cc7fa4700207e205a52e88\",\n    url: \"flags/br.svg\"\n  },\n  {\n    revision: \"e1870e757b1b72d20d1f\",\n    url: \"app.js\"\n  },\n  {\n    revision: \"e1870e757b1b72d20d1f\",\n    url: \"app.css\"\n  }\n];\n"
  },
  {
    "path": "docs/service-worker.js",
    "content": "/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app and you should\n * disable HTTP caching for this file too.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\nimportScripts(\"https://storage.googleapis.com/workbox-cdn/releases/3.4.1/workbox-sw.js\");\n\nimportScripts(\"precache-manifest.b562a874cfed1a8c74df9b49e6f1c2cc.js\");\n\n/**\n * The workboxSW.precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nself.__precacheManifest = [].concat(self.__precacheManifest || []);\nworkbox.precaching.suppressWarnings();\nworkbox.precaching.precacheAndRoute(self.__precacheManifest, {});\n"
  },
  {
    "path": "docs/vendor.js",
    "content": "(window.webpackJsonp = window.webpackJsonp || []).push([\n  [1],\n  {\n    0: function(t, e, n) {\n      n(30), (t.exports = angular);\n    },\n    1: function(t, e, n) {\n      var r;\n      /*!\n * jQuery JavaScript Library v3.3.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2018-01-20T17:24Z\n */\n      /*!\n * jQuery JavaScript Library v3.3.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2018-01-20T17:24Z\n */\n      !(function(e, n) {\n        \"use strict\";\n        \"object\" == typeof t && \"object\" == typeof t.exports\n          ? (t.exports = e.document\n              ? n(e, !0)\n              : function(t) {\n                  if (!t.document) throw new Error(\"jQuery requires a window with a document\");\n                  return n(t);\n                })\n          : n(e);\n      })(\"undefined\" != typeof window ? window : this, function(n, i) {\n        \"use strict\";\n        var o = [],\n          a = n.document,\n          u = Object.getPrototypeOf,\n          s = o.slice,\n          c = o.concat,\n          l = o.push,\n          f = o.indexOf,\n          p = {},\n          h = p.toString,\n          d = p.hasOwnProperty,\n          v = d.toString,\n          g = v.call(Object),\n          m = {},\n          $ = function(t) {\n            return \"function\" == typeof t && \"number\" != typeof t.nodeType;\n          },\n          y = function(t) {\n            return null != t && t === t.window;\n          },\n          b = { type: !0, src: !0, noModule: !0 };\n        function w(t, e, n) {\n          var r,\n            i = (e = e || a).createElement(\"script\");\n          if (((i.text = t), n)) for (r in b) n[r] && (i[r] = n[r]);\n          e.head.appendChild(i).parentNode.removeChild(i);\n        }\n        function x(t) {\n          return null == t\n            ? t + \"\"\n            : \"object\" == typeof t || \"function\" == typeof t\n              ? p[h.call(t)] || \"object\"\n              : typeof t;\n        }\n        var _ = function(t, e) {\n            return new _.fn.init(t, e);\n          },\n          C = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n        function S(t) {\n          var e = !!t && \"length\" in t && t.length,\n            n = x(t);\n          return (\n            !$(t) &&\n            !y(t) &&\n            (\"array\" === n || 0 === e || (\"number\" == typeof e && e > 0 && e - 1 in t))\n          );\n        }\n        (_.fn = _.prototype = {\n          jquery: \"3.3.1\",\n          constructor: _,\n          length: 0,\n          toArray: function() {\n            return s.call(this);\n          },\n          get: function(t) {\n            return null == t ? s.call(this) : t < 0 ? this[t + this.length] : this[t];\n          },\n          pushStack: function(t) {\n            var e = _.merge(this.constructor(), t);\n            return (e.prevObject = this), e;\n          },\n          each: function(t) {\n            return _.each(this, t);\n          },\n          map: function(t) {\n            return this.pushStack(\n              _.map(this, function(e, n) {\n                return t.call(e, n, e);\n              })\n            );\n          },\n          slice: function() {\n            return this.pushStack(s.apply(this, arguments));\n          },\n          first: function() {\n            return this.eq(0);\n          },\n          last: function() {\n            return this.eq(-1);\n          },\n          eq: function(t) {\n            var e = this.length,\n              n = +t + (t < 0 ? e : 0);\n            return this.pushStack(n >= 0 && n < e ? [this[n]] : []);\n          },\n          end: function() {\n            return this.prevObject || this.constructor();\n          },\n          push: l,\n          sort: o.sort,\n          splice: o.splice\n        }),\n          (_.extend = _.fn.extend = function() {\n            var t,\n              e,\n              n,\n              r,\n              i,\n              o,\n              a = arguments[0] || {},\n              u = 1,\n              s = arguments.length,\n              c = !1;\n            for (\n              \"boolean\" == typeof a && ((c = a), (a = arguments[u] || {}), u++),\n                \"object\" == typeof a || $(a) || (a = {}),\n                u === s && ((a = this), u--);\n              u < s;\n              u++\n            )\n              if (null != (t = arguments[u]))\n                for (e in t)\n                  (n = a[e]),\n                    a !== (r = t[e]) &&\n                      (c && r && (_.isPlainObject(r) || (i = Array.isArray(r)))\n                        ? (i\n                            ? ((i = !1), (o = n && Array.isArray(n) ? n : []))\n                            : (o = n && _.isPlainObject(n) ? n : {}),\n                          (a[e] = _.extend(c, o, r)))\n                        : void 0 !== r && (a[e] = r));\n            return a;\n          }),\n          _.extend({\n            expando: \"jQuery\" + (\"3.3.1\" + Math.random()).replace(/\\D/g, \"\"),\n            isReady: !0,\n            error: function(t) {\n              throw new Error(t);\n            },\n            noop: function() {},\n            isPlainObject: function(t) {\n              var e, n;\n              return (\n                !(!t || \"[object Object]\" !== h.call(t)) &&\n                (!(e = u(t)) ||\n                  (\"function\" == typeof (n = d.call(e, \"constructor\") && e.constructor) &&\n                    v.call(n) === g))\n              );\n            },\n            isEmptyObject: function(t) {\n              var e;\n              for (e in t) return !1;\n              return !0;\n            },\n            globalEval: function(t) {\n              w(t);\n            },\n            each: function(t, e) {\n              var n,\n                r = 0;\n              if (S(t)) for (n = t.length; r < n && !1 !== e.call(t[r], r, t[r]); r++);\n              else for (r in t) if (!1 === e.call(t[r], r, t[r])) break;\n              return t;\n            },\n            trim: function(t) {\n              return null == t ? \"\" : (t + \"\").replace(C, \"\");\n            },\n            makeArray: function(t, e) {\n              var n = e || [];\n              return (\n                null != t &&\n                  (S(Object(t)) ? _.merge(n, \"string\" == typeof t ? [t] : t) : l.call(n, t)),\n                n\n              );\n            },\n            inArray: function(t, e, n) {\n              return null == e ? -1 : f.call(e, t, n);\n            },\n            merge: function(t, e) {\n              for (var n = +e.length, r = 0, i = t.length; r < n; r++) t[i++] = e[r];\n              return (t.length = i), t;\n            },\n            grep: function(t, e, n) {\n              for (var r = [], i = 0, o = t.length, a = !n; i < o; i++)\n                !e(t[i], i) !== a && r.push(t[i]);\n              return r;\n            },\n            map: function(t, e, n) {\n              var r,\n                i,\n                o = 0,\n                a = [];\n              if (S(t)) for (r = t.length; o < r; o++) null != (i = e(t[o], o, n)) && a.push(i);\n              else for (o in t) null != (i = e(t[o], o, n)) && a.push(i);\n              return c.apply([], a);\n            },\n            guid: 1,\n            support: m\n          }),\n          \"function\" == typeof Symbol && (_.fn[Symbol.iterator] = o[Symbol.iterator]),\n          _.each(\n            \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),\n            function(t, e) {\n              p[\"[object \" + e + \"]\"] = e.toLowerCase();\n            }\n          );\n        var E =\n          /*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n          (function(t) {\n            var e,\n              n,\n              r,\n              i,\n              o,\n              a,\n              u,\n              s,\n              c,\n              l,\n              f,\n              p,\n              h,\n              d,\n              v,\n              g,\n              m,\n              $,\n              y,\n              b = \"sizzle\" + 1 * new Date(),\n              w = t.document,\n              x = 0,\n              _ = 0,\n              C = at(),\n              S = at(),\n              E = at(),\n              k = function(t, e) {\n                return t === e && (f = !0), 0;\n              },\n              A = {}.hasOwnProperty,\n              T = [],\n              O = T.pop,\n              j = T.push,\n              N = T.push,\n              M = T.slice,\n              L = function(t, e) {\n                for (var n = 0, r = t.length; n < r; n++) if (t[n] === e) return n;\n                return -1;\n              },\n              D =\n                \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n              I = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n              R = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n              P =\n                \"\\\\[\" +\n                I +\n                \"*(\" +\n                R +\n                \")(?:\" +\n                I +\n                \"*([*^$|!~]?=)\" +\n                I +\n                \"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" +\n                R +\n                \"))|)\" +\n                I +\n                \"*\\\\]\",\n              V =\n                \":(\" +\n                R +\n                \")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" +\n                P +\n                \")*)|.*)\\\\)|)\",\n              q = new RegExp(I + \"+\", \"g\"),\n              U = new RegExp(\"^\" + I + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + I + \"+$\", \"g\"),\n              F = new RegExp(\"^\" + I + \"*,\" + I + \"*\"),\n              H = new RegExp(\"^\" + I + \"*([>+~]|\" + I + \")\" + I + \"*\"),\n              B = new RegExp(\"=\" + I + \"*([^\\\\]'\\\"]*?)\" + I + \"*\\\\]\", \"g\"),\n              z = new RegExp(V),\n              W = new RegExp(\"^\" + R + \"$\"),\n              G = {\n                ID: new RegExp(\"^#(\" + R + \")\"),\n                CLASS: new RegExp(\"^\\\\.(\" + R + \")\"),\n                TAG: new RegExp(\"^(\" + R + \"|[*])\"),\n                ATTR: new RegExp(\"^\" + P),\n                PSEUDO: new RegExp(\"^\" + V),\n                CHILD: new RegExp(\n                  \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n                    I +\n                    \"*(even|odd|(([+-]|)(\\\\d*)n|)\" +\n                    I +\n                    \"*(?:([+-]|)\" +\n                    I +\n                    \"*(\\\\d+)|))\" +\n                    I +\n                    \"*\\\\)|)\",\n                  \"i\"\n                ),\n                bool: new RegExp(\"^(?:\" + D + \")$\", \"i\"),\n                needsContext: new RegExp(\n                  \"^\" +\n                    I +\n                    \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n                    I +\n                    \"*((?:-\\\\d)?\\\\d*)\" +\n                    I +\n                    \"*\\\\)|)(?=[^-]|$)\",\n                  \"i\"\n                )\n              },\n              K = /^(?:input|select|textarea|button)$/i,\n              J = /^h\\d$/i,\n              Y = /^[^{]+\\{\\s*\\[native \\w/,\n              Z = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n              X = /[+~]/,\n              Q = new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\" + I + \"?|(\" + I + \")|.)\", \"ig\"),\n              tt = function(t, e, n) {\n                var r = \"0x\" + e - 65536;\n                return r != r || n\n                  ? e\n                  : r < 0\n                    ? String.fromCharCode(r + 65536)\n                    : String.fromCharCode((r >> 10) | 55296, (1023 & r) | 56320);\n              },\n              et = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n              nt = function(t, e) {\n                return e\n                  ? \"\\0\" === t\n                    ? \"�\"\n                    : t.slice(0, -1) + \"\\\\\" + t.charCodeAt(t.length - 1).toString(16) + \" \"\n                  : \"\\\\\" + t;\n              },\n              rt = function() {\n                p();\n              },\n              it = $t(\n                function(t) {\n                  return !0 === t.disabled && (\"form\" in t || \"label\" in t);\n                },\n                { dir: \"parentNode\", next: \"legend\" }\n              );\n            try {\n              N.apply((T = M.call(w.childNodes)), w.childNodes), T[w.childNodes.length].nodeType;\n            } catch (t) {\n              N = {\n                apply: T.length\n                  ? function(t, e) {\n                      j.apply(t, M.call(e));\n                    }\n                  : function(t, e) {\n                      for (var n = t.length, r = 0; (t[n++] = e[r++]); );\n                      t.length = n - 1;\n                    }\n              };\n            }\n            function ot(t, e, r, i) {\n              var o,\n                u,\n                c,\n                l,\n                f,\n                d,\n                m,\n                $ = e && e.ownerDocument,\n                x = e ? e.nodeType : 9;\n              if (((r = r || []), \"string\" != typeof t || !t || (1 !== x && 9 !== x && 11 !== x)))\n                return r;\n              if (!i && ((e ? e.ownerDocument || e : w) !== h && p(e), (e = e || h), v)) {\n                if (11 !== x && (f = Z.exec(t)))\n                  if ((o = f[1])) {\n                    if (9 === x) {\n                      if (!(c = e.getElementById(o))) return r;\n                      if (c.id === o) return r.push(c), r;\n                    } else if ($ && (c = $.getElementById(o)) && y(e, c) && c.id === o)\n                      return r.push(c), r;\n                  } else {\n                    if (f[2]) return N.apply(r, e.getElementsByTagName(t)), r;\n                    if ((o = f[3]) && n.getElementsByClassName && e.getElementsByClassName)\n                      return N.apply(r, e.getElementsByClassName(o)), r;\n                  }\n                if (n.qsa && !E[t + \" \"] && (!g || !g.test(t))) {\n                  if (1 !== x) ($ = e), (m = t);\n                  else if (\"object\" !== e.nodeName.toLowerCase()) {\n                    for (\n                      (l = e.getAttribute(\"id\"))\n                        ? (l = l.replace(et, nt))\n                        : e.setAttribute(\"id\", (l = b)),\n                        u = (d = a(t)).length;\n                      u--;\n\n                    )\n                      d[u] = \"#\" + l + \" \" + mt(d[u]);\n                    (m = d.join(\",\")), ($ = (X.test(t) && vt(e.parentNode)) || e);\n                  }\n                  if (m)\n                    try {\n                      return N.apply(r, $.querySelectorAll(m)), r;\n                    } catch (t) {\n                    } finally {\n                      l === b && e.removeAttribute(\"id\");\n                    }\n                }\n              }\n              return s(t.replace(U, \"$1\"), e, r, i);\n            }\n            function at() {\n              var t = [];\n              return function e(n, i) {\n                return t.push(n + \" \") > r.cacheLength && delete e[t.shift()], (e[n + \" \"] = i);\n              };\n            }\n            function ut(t) {\n              return (t[b] = !0), t;\n            }\n            function st(t) {\n              var e = h.createElement(\"fieldset\");\n              try {\n                return !!t(e);\n              } catch (t) {\n                return !1;\n              } finally {\n                e.parentNode && e.parentNode.removeChild(e), (e = null);\n              }\n            }\n            function ct(t, e) {\n              for (var n = t.split(\"|\"), i = n.length; i--; ) r.attrHandle[n[i]] = e;\n            }\n            function lt(t, e) {\n              var n = e && t,\n                r = n && 1 === t.nodeType && 1 === e.nodeType && t.sourceIndex - e.sourceIndex;\n              if (r) return r;\n              if (n) for (; (n = n.nextSibling); ) if (n === e) return -1;\n              return t ? 1 : -1;\n            }\n            function ft(t) {\n              return function(e) {\n                return \"input\" === e.nodeName.toLowerCase() && e.type === t;\n              };\n            }\n            function pt(t) {\n              return function(e) {\n                var n = e.nodeName.toLowerCase();\n                return (\"input\" === n || \"button\" === n) && e.type === t;\n              };\n            }\n            function ht(t) {\n              return function(e) {\n                return \"form\" in e\n                  ? e.parentNode && !1 === e.disabled\n                    ? \"label\" in e\n                      ? \"label\" in e.parentNode\n                        ? e.parentNode.disabled === t\n                        : e.disabled === t\n                      : e.isDisabled === t || (e.isDisabled !== !t && it(e) === t)\n                    : e.disabled === t\n                  : \"label\" in e && e.disabled === t;\n              };\n            }\n            function dt(t) {\n              return ut(function(e) {\n                return (\n                  (e = +e),\n                  ut(function(n, r) {\n                    for (var i, o = t([], n.length, e), a = o.length; a--; )\n                      n[(i = o[a])] && (n[i] = !(r[i] = n[i]));\n                  })\n                );\n              });\n            }\n            function vt(t) {\n              return t && void 0 !== t.getElementsByTagName && t;\n            }\n            for (e in ((n = ot.support = {}),\n            (o = ot.isXML = function(t) {\n              var e = t && (t.ownerDocument || t).documentElement;\n              return !!e && \"HTML\" !== e.nodeName;\n            }),\n            (p = ot.setDocument = function(t) {\n              var e,\n                i,\n                a = t ? t.ownerDocument || t : w;\n              return a !== h && 9 === a.nodeType && a.documentElement\n                ? ((d = (h = a).documentElement),\n                  (v = !o(h)),\n                  w !== h &&\n                    (i = h.defaultView) &&\n                    i.top !== i &&\n                    (i.addEventListener\n                      ? i.addEventListener(\"unload\", rt, !1)\n                      : i.attachEvent && i.attachEvent(\"onunload\", rt)),\n                  (n.attributes = st(function(t) {\n                    return (t.className = \"i\"), !t.getAttribute(\"className\");\n                  })),\n                  (n.getElementsByTagName = st(function(t) {\n                    return t.appendChild(h.createComment(\"\")), !t.getElementsByTagName(\"*\").length;\n                  })),\n                  (n.getElementsByClassName = Y.test(h.getElementsByClassName)),\n                  (n.getById = st(function(t) {\n                    return (\n                      (d.appendChild(t).id = b),\n                      !h.getElementsByName || !h.getElementsByName(b).length\n                    );\n                  })),\n                  n.getById\n                    ? ((r.filter.ID = function(t) {\n                        var e = t.replace(Q, tt);\n                        return function(t) {\n                          return t.getAttribute(\"id\") === e;\n                        };\n                      }),\n                      (r.find.ID = function(t, e) {\n                        if (void 0 !== e.getElementById && v) {\n                          var n = e.getElementById(t);\n                          return n ? [n] : [];\n                        }\n                      }))\n                    : ((r.filter.ID = function(t) {\n                        var e = t.replace(Q, tt);\n                        return function(t) {\n                          var n = void 0 !== t.getAttributeNode && t.getAttributeNode(\"id\");\n                          return n && n.value === e;\n                        };\n                      }),\n                      (r.find.ID = function(t, e) {\n                        if (void 0 !== e.getElementById && v) {\n                          var n,\n                            r,\n                            i,\n                            o = e.getElementById(t);\n                          if (o) {\n                            if ((n = o.getAttributeNode(\"id\")) && n.value === t) return [o];\n                            for (i = e.getElementsByName(t), r = 0; (o = i[r++]); )\n                              if ((n = o.getAttributeNode(\"id\")) && n.value === t) return [o];\n                          }\n                          return [];\n                        }\n                      })),\n                  (r.find.TAG = n.getElementsByTagName\n                    ? function(t, e) {\n                        return void 0 !== e.getElementsByTagName\n                          ? e.getElementsByTagName(t)\n                          : n.qsa\n                            ? e.querySelectorAll(t)\n                            : void 0;\n                      }\n                    : function(t, e) {\n                        var n,\n                          r = [],\n                          i = 0,\n                          o = e.getElementsByTagName(t);\n                        if (\"*\" === t) {\n                          for (; (n = o[i++]); ) 1 === n.nodeType && r.push(n);\n                          return r;\n                        }\n                        return o;\n                      }),\n                  (r.find.CLASS =\n                    n.getElementsByClassName &&\n                    function(t, e) {\n                      if (void 0 !== e.getElementsByClassName && v)\n                        return e.getElementsByClassName(t);\n                    }),\n                  (m = []),\n                  (g = []),\n                  (n.qsa = Y.test(h.querySelectorAll)) &&\n                    (st(function(t) {\n                      (d.appendChild(t).innerHTML =\n                        \"<a id='\" +\n                        b +\n                        \"'></a><select id='\" +\n                        b +\n                        \"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\"),\n                        t.querySelectorAll(\"[msallowcapture^='']\").length &&\n                          g.push(\"[*^$]=\" + I + \"*(?:''|\\\"\\\")\"),\n                        t.querySelectorAll(\"[selected]\").length ||\n                          g.push(\"\\\\[\" + I + \"*(?:value|\" + D + \")\"),\n                        t.querySelectorAll(\"[id~=\" + b + \"-]\").length || g.push(\"~=\"),\n                        t.querySelectorAll(\":checked\").length || g.push(\":checked\"),\n                        t.querySelectorAll(\"a#\" + b + \"+*\").length || g.push(\".#.+[+~]\");\n                    }),\n                    st(function(t) {\n                      t.innerHTML =\n                        \"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";\n                      var e = h.createElement(\"input\");\n                      e.setAttribute(\"type\", \"hidden\"),\n                        t.appendChild(e).setAttribute(\"name\", \"D\"),\n                        t.querySelectorAll(\"[name=d]\").length && g.push(\"name\" + I + \"*[*^$|!~]?=\"),\n                        2 !== t.querySelectorAll(\":enabled\").length &&\n                          g.push(\":enabled\", \":disabled\"),\n                        (d.appendChild(t).disabled = !0),\n                        2 !== t.querySelectorAll(\":disabled\").length &&\n                          g.push(\":enabled\", \":disabled\"),\n                        t.querySelectorAll(\"*,:x\"),\n                        g.push(\",.*:\");\n                    })),\n                  (n.matchesSelector = Y.test(\n                    ($ =\n                      d.matches ||\n                      d.webkitMatchesSelector ||\n                      d.mozMatchesSelector ||\n                      d.oMatchesSelector ||\n                      d.msMatchesSelector)\n                  )) &&\n                    st(function(t) {\n                      (n.disconnectedMatch = $.call(t, \"*\")),\n                        $.call(t, \"[s!='']:x\"),\n                        m.push(\"!=\", V);\n                    }),\n                  (g = g.length && new RegExp(g.join(\"|\"))),\n                  (m = m.length && new RegExp(m.join(\"|\"))),\n                  (e = Y.test(d.compareDocumentPosition)),\n                  (y =\n                    e || Y.test(d.contains)\n                      ? function(t, e) {\n                          var n = 9 === t.nodeType ? t.documentElement : t,\n                            r = e && e.parentNode;\n                          return (\n                            t === r ||\n                            !(\n                              !r ||\n                              1 !== r.nodeType ||\n                              !(n.contains\n                                ? n.contains(r)\n                                : t.compareDocumentPosition && 16 & t.compareDocumentPosition(r))\n                            )\n                          );\n                        }\n                      : function(t, e) {\n                          if (e) for (; (e = e.parentNode); ) if (e === t) return !0;\n                          return !1;\n                        }),\n                  (k = e\n                    ? function(t, e) {\n                        if (t === e) return (f = !0), 0;\n                        var r = !t.compareDocumentPosition - !e.compareDocumentPosition;\n                        return (\n                          r ||\n                          (1 &\n                            (r =\n                              (t.ownerDocument || t) === (e.ownerDocument || e)\n                                ? t.compareDocumentPosition(e)\n                                : 1) ||\n                          (!n.sortDetached && e.compareDocumentPosition(t) === r)\n                            ? t === h || (t.ownerDocument === w && y(w, t))\n                              ? -1\n                              : e === h || (e.ownerDocument === w && y(w, e))\n                                ? 1\n                                : l\n                                  ? L(l, t) - L(l, e)\n                                  : 0\n                            : 4 & r\n                              ? -1\n                              : 1)\n                        );\n                      }\n                    : function(t, e) {\n                        if (t === e) return (f = !0), 0;\n                        var n,\n                          r = 0,\n                          i = t.parentNode,\n                          o = e.parentNode,\n                          a = [t],\n                          u = [e];\n                        if (!i || !o)\n                          return t === h\n                            ? -1\n                            : e === h\n                              ? 1\n                              : i\n                                ? -1\n                                : o\n                                  ? 1\n                                  : l\n                                    ? L(l, t) - L(l, e)\n                                    : 0;\n                        if (i === o) return lt(t, e);\n                        for (n = t; (n = n.parentNode); ) a.unshift(n);\n                        for (n = e; (n = n.parentNode); ) u.unshift(n);\n                        for (; a[r] === u[r]; ) r++;\n                        return r ? lt(a[r], u[r]) : a[r] === w ? -1 : u[r] === w ? 1 : 0;\n                      }),\n                  h)\n                : h;\n            }),\n            (ot.matches = function(t, e) {\n              return ot(t, null, null, e);\n            }),\n            (ot.matchesSelector = function(t, e) {\n              if (\n                ((t.ownerDocument || t) !== h && p(t),\n                (e = e.replace(B, \"='$1']\")),\n                n.matchesSelector && v && !E[e + \" \"] && (!m || !m.test(e)) && (!g || !g.test(e)))\n              )\n                try {\n                  var r = $.call(t, e);\n                  if (r || n.disconnectedMatch || (t.document && 11 !== t.document.nodeType))\n                    return r;\n                } catch (t) {}\n              return ot(e, h, null, [t]).length > 0;\n            }),\n            (ot.contains = function(t, e) {\n              return (t.ownerDocument || t) !== h && p(t), y(t, e);\n            }),\n            (ot.attr = function(t, e) {\n              (t.ownerDocument || t) !== h && p(t);\n              var i = r.attrHandle[e.toLowerCase()],\n                o = i && A.call(r.attrHandle, e.toLowerCase()) ? i(t, e, !v) : void 0;\n              return void 0 !== o\n                ? o\n                : n.attributes || !v\n                  ? t.getAttribute(e)\n                  : (o = t.getAttributeNode(e)) && o.specified\n                    ? o.value\n                    : null;\n            }),\n            (ot.escape = function(t) {\n              return (t + \"\").replace(et, nt);\n            }),\n            (ot.error = function(t) {\n              throw new Error(\"Syntax error, unrecognized expression: \" + t);\n            }),\n            (ot.uniqueSort = function(t) {\n              var e,\n                r = [],\n                i = 0,\n                o = 0;\n              if (((f = !n.detectDuplicates), (l = !n.sortStable && t.slice(0)), t.sort(k), f)) {\n                for (; (e = t[o++]); ) e === t[o] && (i = r.push(o));\n                for (; i--; ) t.splice(r[i], 1);\n              }\n              return (l = null), t;\n            }),\n            (i = ot.getText = function(t) {\n              var e,\n                n = \"\",\n                r = 0,\n                o = t.nodeType;\n              if (o) {\n                if (1 === o || 9 === o || 11 === o) {\n                  if (\"string\" == typeof t.textContent) return t.textContent;\n                  for (t = t.firstChild; t; t = t.nextSibling) n += i(t);\n                } else if (3 === o || 4 === o) return t.nodeValue;\n              } else for (; (e = t[r++]); ) n += i(e);\n              return n;\n            }),\n            ((r = ot.selectors = {\n              cacheLength: 50,\n              createPseudo: ut,\n              match: G,\n              attrHandle: {},\n              find: {},\n              relative: {\n                \">\": { dir: \"parentNode\", first: !0 },\n                \" \": { dir: \"parentNode\" },\n                \"+\": { dir: \"previousSibling\", first: !0 },\n                \"~\": { dir: \"previousSibling\" }\n              },\n              preFilter: {\n                ATTR: function(t) {\n                  return (\n                    (t[1] = t[1].replace(Q, tt)),\n                    (t[3] = (t[3] || t[4] || t[5] || \"\").replace(Q, tt)),\n                    \"~=\" === t[2] && (t[3] = \" \" + t[3] + \" \"),\n                    t.slice(0, 4)\n                  );\n                },\n                CHILD: function(t) {\n                  return (\n                    (t[1] = t[1].toLowerCase()),\n                    \"nth\" === t[1].slice(0, 3)\n                      ? (t[3] || ot.error(t[0]),\n                        (t[4] = +(t[4]\n                          ? t[5] + (t[6] || 1)\n                          : 2 * (\"even\" === t[3] || \"odd\" === t[3]))),\n                        (t[5] = +(t[7] + t[8] || \"odd\" === t[3])))\n                      : t[3] && ot.error(t[0]),\n                    t\n                  );\n                },\n                PSEUDO: function(t) {\n                  var e,\n                    n = !t[6] && t[2];\n                  return G.CHILD.test(t[0])\n                    ? null\n                    : (t[3]\n                        ? (t[2] = t[4] || t[5] || \"\")\n                        : n &&\n                          z.test(n) &&\n                          (e = a(n, !0)) &&\n                          (e = n.indexOf(\")\", n.length - e) - n.length) &&\n                          ((t[0] = t[0].slice(0, e)), (t[2] = n.slice(0, e))),\n                      t.slice(0, 3));\n                }\n              },\n              filter: {\n                TAG: function(t) {\n                  var e = t.replace(Q, tt).toLowerCase();\n                  return \"*\" === t\n                    ? function() {\n                        return !0;\n                      }\n                    : function(t) {\n                        return t.nodeName && t.nodeName.toLowerCase() === e;\n                      };\n                },\n                CLASS: function(t) {\n                  var e = C[t + \" \"];\n                  return (\n                    e ||\n                    ((e = new RegExp(\"(^|\" + I + \")\" + t + \"(\" + I + \"|$)\")) &&\n                      C(t, function(t) {\n                        return e.test(\n                          (\"string\" == typeof t.className && t.className) ||\n                            (void 0 !== t.getAttribute && t.getAttribute(\"class\")) ||\n                            \"\"\n                        );\n                      }))\n                  );\n                },\n                ATTR: function(t, e, n) {\n                  return function(r) {\n                    var i = ot.attr(r, t);\n                    return null == i\n                      ? \"!=\" === e\n                      : !e ||\n                          ((i += \"\"),\n                          \"=\" === e\n                            ? i === n\n                            : \"!=\" === e\n                              ? i !== n\n                              : \"^=\" === e\n                                ? n && 0 === i.indexOf(n)\n                                : \"*=\" === e\n                                  ? n && i.indexOf(n) > -1\n                                  : \"$=\" === e\n                                    ? n && i.slice(-n.length) === n\n                                    : \"~=\" === e\n                                      ? (\" \" + i.replace(q, \" \") + \" \").indexOf(n) > -1\n                                      : \"|=\" === e &&\n                                        (i === n || i.slice(0, n.length + 1) === n + \"-\"));\n                  };\n                },\n                CHILD: function(t, e, n, r, i) {\n                  var o = \"nth\" !== t.slice(0, 3),\n                    a = \"last\" !== t.slice(-4),\n                    u = \"of-type\" === e;\n                  return 1 === r && 0 === i\n                    ? function(t) {\n                        return !!t.parentNode;\n                      }\n                    : function(e, n, s) {\n                        var c,\n                          l,\n                          f,\n                          p,\n                          h,\n                          d,\n                          v = o !== a ? \"nextSibling\" : \"previousSibling\",\n                          g = e.parentNode,\n                          m = u && e.nodeName.toLowerCase(),\n                          $ = !s && !u,\n                          y = !1;\n                        if (g) {\n                          if (o) {\n                            for (; v; ) {\n                              for (p = e; (p = p[v]); )\n                                if (u ? p.nodeName.toLowerCase() === m : 1 === p.nodeType)\n                                  return !1;\n                              d = v = \"only\" === t && !d && \"nextSibling\";\n                            }\n                            return !0;\n                          }\n                          if (((d = [a ? g.firstChild : g.lastChild]), a && $)) {\n                            for (\n                              y =\n                                (h =\n                                  (c =\n                                    (l =\n                                      (f = (p = g)[b] || (p[b] = {}))[p.uniqueID] ||\n                                      (f[p.uniqueID] = {}))[t] || [])[0] === x && c[1]) && c[2],\n                                p = h && g.childNodes[h];\n                              (p = (++h && p && p[v]) || (y = h = 0) || d.pop());\n\n                            )\n                              if (1 === p.nodeType && ++y && p === e) {\n                                l[t] = [x, h, y];\n                                break;\n                              }\n                          } else if (\n                            ($ &&\n                              (y = h =\n                                (c =\n                                  (l =\n                                    (f = (p = e)[b] || (p[b] = {}))[p.uniqueID] ||\n                                    (f[p.uniqueID] = {}))[t] || [])[0] === x && c[1]),\n                            !1 === y)\n                          )\n                            for (\n                              ;\n                              (p = (++h && p && p[v]) || (y = h = 0) || d.pop()) &&\n                              ((u ? p.nodeName.toLowerCase() !== m : 1 !== p.nodeType) ||\n                                !++y ||\n                                ($ &&\n                                  ((l =\n                                    (f = p[b] || (p[b] = {}))[p.uniqueID] || (f[p.uniqueID] = {}))[\n                                    t\n                                  ] = [x, y]),\n                                p !== e));\n\n                            );\n                          return (y -= i) === r || (y % r == 0 && y / r >= 0);\n                        }\n                      };\n                },\n                PSEUDO: function(t, e) {\n                  var n,\n                    i =\n                      r.pseudos[t] ||\n                      r.setFilters[t.toLowerCase()] ||\n                      ot.error(\"unsupported pseudo: \" + t);\n                  return i[b]\n                    ? i(e)\n                    : i.length > 1\n                      ? ((n = [t, t, \"\", e]),\n                        r.setFilters.hasOwnProperty(t.toLowerCase())\n                          ? ut(function(t, n) {\n                              for (var r, o = i(t, e), a = o.length; a--; )\n                                t[(r = L(t, o[a]))] = !(n[r] = o[a]);\n                            })\n                          : function(t) {\n                              return i(t, 0, n);\n                            })\n                      : i;\n                }\n              },\n              pseudos: {\n                not: ut(function(t) {\n                  var e = [],\n                    n = [],\n                    r = u(t.replace(U, \"$1\"));\n                  return r[b]\n                    ? ut(function(t, e, n, i) {\n                        for (var o, a = r(t, null, i, []), u = t.length; u--; )\n                          (o = a[u]) && (t[u] = !(e[u] = o));\n                      })\n                    : function(t, i, o) {\n                        return (e[0] = t), r(e, null, o, n), (e[0] = null), !n.pop();\n                      };\n                }),\n                has: ut(function(t) {\n                  return function(e) {\n                    return ot(t, e).length > 0;\n                  };\n                }),\n                contains: ut(function(t) {\n                  return (\n                    (t = t.replace(Q, tt)),\n                    function(e) {\n                      return (e.textContent || e.innerText || i(e)).indexOf(t) > -1;\n                    }\n                  );\n                }),\n                lang: ut(function(t) {\n                  return (\n                    W.test(t || \"\") || ot.error(\"unsupported lang: \" + t),\n                    (t = t.replace(Q, tt).toLowerCase()),\n                    function(e) {\n                      var n;\n                      do {\n                        if ((n = v ? e.lang : e.getAttribute(\"xml:lang\") || e.getAttribute(\"lang\")))\n                          return (n = n.toLowerCase()) === t || 0 === n.indexOf(t + \"-\");\n                      } while ((e = e.parentNode) && 1 === e.nodeType);\n                      return !1;\n                    }\n                  );\n                }),\n                target: function(e) {\n                  var n = t.location && t.location.hash;\n                  return n && n.slice(1) === e.id;\n                },\n                root: function(t) {\n                  return t === d;\n                },\n                focus: function(t) {\n                  return (\n                    t === h.activeElement &&\n                    (!h.hasFocus || h.hasFocus()) &&\n                    !!(t.type || t.href || ~t.tabIndex)\n                  );\n                },\n                enabled: ht(!1),\n                disabled: ht(!0),\n                checked: function(t) {\n                  var e = t.nodeName.toLowerCase();\n                  return (\"input\" === e && !!t.checked) || (\"option\" === e && !!t.selected);\n                },\n                selected: function(t) {\n                  return t.parentNode && t.parentNode.selectedIndex, !0 === t.selected;\n                },\n                empty: function(t) {\n                  for (t = t.firstChild; t; t = t.nextSibling) if (t.nodeType < 6) return !1;\n                  return !0;\n                },\n                parent: function(t) {\n                  return !r.pseudos.empty(t);\n                },\n                header: function(t) {\n                  return J.test(t.nodeName);\n                },\n                input: function(t) {\n                  return K.test(t.nodeName);\n                },\n                button: function(t) {\n                  var e = t.nodeName.toLowerCase();\n                  return (\"input\" === e && \"button\" === t.type) || \"button\" === e;\n                },\n                text: function(t) {\n                  var e;\n                  return (\n                    \"input\" === t.nodeName.toLowerCase() &&\n                    \"text\" === t.type &&\n                    (null == (e = t.getAttribute(\"type\")) || \"text\" === e.toLowerCase())\n                  );\n                },\n                first: dt(function() {\n                  return [0];\n                }),\n                last: dt(function(t, e) {\n                  return [e - 1];\n                }),\n                eq: dt(function(t, e, n) {\n                  return [n < 0 ? n + e : n];\n                }),\n                even: dt(function(t, e) {\n                  for (var n = 0; n < e; n += 2) t.push(n);\n                  return t;\n                }),\n                odd: dt(function(t, e) {\n                  for (var n = 1; n < e; n += 2) t.push(n);\n                  return t;\n                }),\n                lt: dt(function(t, e, n) {\n                  for (var r = n < 0 ? n + e : n; --r >= 0; ) t.push(r);\n                  return t;\n                }),\n                gt: dt(function(t, e, n) {\n                  for (var r = n < 0 ? n + e : n; ++r < e; ) t.push(r);\n                  return t;\n                })\n              }\n            }).pseudos.nth = r.pseudos.eq),\n            { radio: !0, checkbox: !0, file: !0, password: !0, image: !0 }))\n              r.pseudos[e] = ft(e);\n            for (e in { submit: !0, reset: !0 }) r.pseudos[e] = pt(e);\n            function gt() {}\n            function mt(t) {\n              for (var e = 0, n = t.length, r = \"\"; e < n; e++) r += t[e].value;\n              return r;\n            }\n            function $t(t, e, n) {\n              var r = e.dir,\n                i = e.next,\n                o = i || r,\n                a = n && \"parentNode\" === o,\n                u = _++;\n              return e.first\n                ? function(e, n, i) {\n                    for (; (e = e[r]); ) if (1 === e.nodeType || a) return t(e, n, i);\n                    return !1;\n                  }\n                : function(e, n, s) {\n                    var c,\n                      l,\n                      f,\n                      p = [x, u];\n                    if (s) {\n                      for (; (e = e[r]); ) if ((1 === e.nodeType || a) && t(e, n, s)) return !0;\n                    } else\n                      for (; (e = e[r]); )\n                        if (1 === e.nodeType || a)\n                          if (\n                            ((l = (f = e[b] || (e[b] = {}))[e.uniqueID] || (f[e.uniqueID] = {})),\n                            i && i === e.nodeName.toLowerCase())\n                          )\n                            e = e[r] || e;\n                          else {\n                            if ((c = l[o]) && c[0] === x && c[1] === u) return (p[2] = c[2]);\n                            if (((l[o] = p), (p[2] = t(e, n, s)))) return !0;\n                          }\n                    return !1;\n                  };\n            }\n            function yt(t) {\n              return t.length > 1\n                ? function(e, n, r) {\n                    for (var i = t.length; i--; ) if (!t[i](e, n, r)) return !1;\n                    return !0;\n                  }\n                : t[0];\n            }\n            function bt(t, e, n, r, i) {\n              for (var o, a = [], u = 0, s = t.length, c = null != e; u < s; u++)\n                (o = t[u]) && ((n && !n(o, r, i)) || (a.push(o), c && e.push(u)));\n              return a;\n            }\n            function wt(t, e, n, r, i, o) {\n              return (\n                r && !r[b] && (r = wt(r)),\n                i && !i[b] && (i = wt(i, o)),\n                ut(function(o, a, u, s) {\n                  var c,\n                    l,\n                    f,\n                    p = [],\n                    h = [],\n                    d = a.length,\n                    v =\n                      o ||\n                      (function(t, e, n) {\n                        for (var r = 0, i = e.length; r < i; r++) ot(t, e[r], n);\n                        return n;\n                      })(e || \"*\", u.nodeType ? [u] : u, []),\n                    g = !t || (!o && e) ? v : bt(v, p, t, u, s),\n                    m = n ? (i || (o ? t : d || r) ? [] : a) : g;\n                  if ((n && n(g, m, u, s), r))\n                    for (c = bt(m, h), r(c, [], u, s), l = c.length; l--; )\n                      (f = c[l]) && (m[h[l]] = !(g[h[l]] = f));\n                  if (o) {\n                    if (i || t) {\n                      if (i) {\n                        for (c = [], l = m.length; l--; ) (f = m[l]) && c.push((g[l] = f));\n                        i(null, (m = []), c, s);\n                      }\n                      for (l = m.length; l--; )\n                        (f = m[l]) && (c = i ? L(o, f) : p[l]) > -1 && (o[c] = !(a[c] = f));\n                    }\n                  } else (m = bt(m === a ? m.splice(d, m.length) : m)), i ? i(null, a, m, s) : N.apply(a, m);\n                })\n              );\n            }\n            function xt(t) {\n              for (\n                var e,\n                  n,\n                  i,\n                  o = t.length,\n                  a = r.relative[t[0].type],\n                  u = a || r.relative[\" \"],\n                  s = a ? 1 : 0,\n                  l = $t(\n                    function(t) {\n                      return t === e;\n                    },\n                    u,\n                    !0\n                  ),\n                  f = $t(\n                    function(t) {\n                      return L(e, t) > -1;\n                    },\n                    u,\n                    !0\n                  ),\n                  p = [\n                    function(t, n, r) {\n                      var i =\n                        (!a && (r || n !== c)) || ((e = n).nodeType ? l(t, n, r) : f(t, n, r));\n                      return (e = null), i;\n                    }\n                  ];\n                s < o;\n                s++\n              )\n                if ((n = r.relative[t[s].type])) p = [$t(yt(p), n)];\n                else {\n                  if ((n = r.filter[t[s].type].apply(null, t[s].matches))[b]) {\n                    for (i = ++s; i < o && !r.relative[t[i].type]; i++);\n                    return wt(\n                      s > 1 && yt(p),\n                      s > 1 &&\n                        mt(\n                          t.slice(0, s - 1).concat({ value: \" \" === t[s - 2].type ? \"*\" : \"\" })\n                        ).replace(U, \"$1\"),\n                      n,\n                      s < i && xt(t.slice(s, i)),\n                      i < o && xt((t = t.slice(i))),\n                      i < o && mt(t)\n                    );\n                  }\n                  p.push(n);\n                }\n              return yt(p);\n            }\n            return (\n              (gt.prototype = r.filters = r.pseudos),\n              (r.setFilters = new gt()),\n              (a = ot.tokenize = function(t, e) {\n                var n,\n                  i,\n                  o,\n                  a,\n                  u,\n                  s,\n                  c,\n                  l = S[t + \" \"];\n                if (l) return e ? 0 : l.slice(0);\n                for (u = t, s = [], c = r.preFilter; u; ) {\n                  for (a in ((n && !(i = F.exec(u))) ||\n                    (i && (u = u.slice(i[0].length) || u), s.push((o = []))),\n                  (n = !1),\n                  (i = H.exec(u)) &&\n                    ((n = i.shift()),\n                    o.push({ value: n, type: i[0].replace(U, \" \") }),\n                    (u = u.slice(n.length))),\n                  r.filter))\n                    !(i = G[a].exec(u)) ||\n                      (c[a] && !(i = c[a](i))) ||\n                      ((n = i.shift()),\n                      o.push({ value: n, type: a, matches: i }),\n                      (u = u.slice(n.length)));\n                  if (!n) break;\n                }\n                return e ? u.length : u ? ot.error(t) : S(t, s).slice(0);\n              }),\n              (u = ot.compile = function(t, e) {\n                var n,\n                  i = [],\n                  o = [],\n                  u = E[t + \" \"];\n                if (!u) {\n                  for (e || (e = a(t)), n = e.length; n--; )\n                    (u = xt(e[n]))[b] ? i.push(u) : o.push(u);\n                  (u = E(\n                    t,\n                    (function(t, e) {\n                      var n = e.length > 0,\n                        i = t.length > 0,\n                        o = function(o, a, u, s, l) {\n                          var f,\n                            d,\n                            g,\n                            m = 0,\n                            $ = \"0\",\n                            y = o && [],\n                            b = [],\n                            w = c,\n                            _ = o || (i && r.find.TAG(\"*\", l)),\n                            C = (x += null == w ? 1 : Math.random() || 0.1),\n                            S = _.length;\n                          for (l && (c = a === h || a || l); $ !== S && null != (f = _[$]); $++) {\n                            if (i && f) {\n                              for (\n                                d = 0, a || f.ownerDocument === h || (p(f), (u = !v));\n                                (g = t[d++]);\n\n                              )\n                                if (g(f, a || h, u)) {\n                                  s.push(f);\n                                  break;\n                                }\n                              l && (x = C);\n                            }\n                            n && ((f = !g && f) && m--, o && y.push(f));\n                          }\n                          if (((m += $), n && $ !== m)) {\n                            for (d = 0; (g = e[d++]); ) g(y, b, a, u);\n                            if (o) {\n                              if (m > 0) for (; $--; ) y[$] || b[$] || (b[$] = O.call(s));\n                              b = bt(b);\n                            }\n                            N.apply(s, b),\n                              l && !o && b.length > 0 && m + e.length > 1 && ot.uniqueSort(s);\n                          }\n                          return l && ((x = C), (c = w)), y;\n                        };\n                      return n ? ut(o) : o;\n                    })(o, i)\n                  )).selector = t;\n                }\n                return u;\n              }),\n              (s = ot.select = function(t, e, n, i) {\n                var o,\n                  s,\n                  c,\n                  l,\n                  f,\n                  p = \"function\" == typeof t && t,\n                  h = !i && a((t = p.selector || t));\n                if (((n = n || []), 1 === h.length)) {\n                  if (\n                    (s = h[0] = h[0].slice(0)).length > 2 &&\n                    \"ID\" === (c = s[0]).type &&\n                    9 === e.nodeType &&\n                    v &&\n                    r.relative[s[1].type]\n                  ) {\n                    if (!(e = (r.find.ID(c.matches[0].replace(Q, tt), e) || [])[0])) return n;\n                    p && (e = e.parentNode), (t = t.slice(s.shift().value.length));\n                  }\n                  for (\n                    o = G.needsContext.test(t) ? 0 : s.length;\n                    o-- && ((c = s[o]), !r.relative[(l = c.type)]);\n\n                  )\n                    if (\n                      (f = r.find[l]) &&\n                      (i = f(\n                        c.matches[0].replace(Q, tt),\n                        (X.test(s[0].type) && vt(e.parentNode)) || e\n                      ))\n                    ) {\n                      if ((s.splice(o, 1), !(t = i.length && mt(s)))) return N.apply(n, i), n;\n                      break;\n                    }\n                }\n                return (p || u(t, h))(i, e, !v, n, !e || (X.test(t) && vt(e.parentNode)) || e), n;\n              }),\n              (n.sortStable =\n                b\n                  .split(\"\")\n                  .sort(k)\n                  .join(\"\") === b),\n              (n.detectDuplicates = !!f),\n              p(),\n              (n.sortDetached = st(function(t) {\n                return 1 & t.compareDocumentPosition(h.createElement(\"fieldset\"));\n              })),\n              st(function(t) {\n                return (\n                  (t.innerHTML = \"<a href='#'></a>\"), \"#\" === t.firstChild.getAttribute(\"href\")\n                );\n              }) ||\n                ct(\"type|href|height|width\", function(t, e, n) {\n                  if (!n) return t.getAttribute(e, \"type\" === e.toLowerCase() ? 1 : 2);\n                }),\n              (n.attributes &&\n                st(function(t) {\n                  return (\n                    (t.innerHTML = \"<input/>\"),\n                    t.firstChild.setAttribute(\"value\", \"\"),\n                    \"\" === t.firstChild.getAttribute(\"value\")\n                  );\n                })) ||\n                ct(\"value\", function(t, e, n) {\n                  if (!n && \"input\" === t.nodeName.toLowerCase()) return t.defaultValue;\n                }),\n              st(function(t) {\n                return null == t.getAttribute(\"disabled\");\n              }) ||\n                ct(D, function(t, e, n) {\n                  var r;\n                  if (!n)\n                    return !0 === t[e]\n                      ? e.toLowerCase()\n                      : (r = t.getAttributeNode(e)) && r.specified\n                        ? r.value\n                        : null;\n                }),\n              ot\n            );\n          })(n);\n        (_.find = E),\n          (_.expr = E.selectors),\n          (_.expr[\":\"] = _.expr.pseudos),\n          (_.uniqueSort = _.unique = E.uniqueSort),\n          (_.text = E.getText),\n          (_.isXMLDoc = E.isXML),\n          (_.contains = E.contains),\n          (_.escapeSelector = E.escape);\n        var k = function(t, e, n) {\n            for (var r = [], i = void 0 !== n; (t = t[e]) && 9 !== t.nodeType; )\n              if (1 === t.nodeType) {\n                if (i && _(t).is(n)) break;\n                r.push(t);\n              }\n            return r;\n          },\n          A = function(t, e) {\n            for (var n = []; t; t = t.nextSibling) 1 === t.nodeType && t !== e && n.push(t);\n            return n;\n          },\n          T = _.expr.match.needsContext;\n        function O(t, e) {\n          return t.nodeName && t.nodeName.toLowerCase() === e.toLowerCase();\n        }\n        var j = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n        function N(t, e, n) {\n          return $(e)\n            ? _.grep(t, function(t, r) {\n                return !!e.call(t, r, t) !== n;\n              })\n            : e.nodeType\n              ? _.grep(t, function(t) {\n                  return (t === e) !== n;\n                })\n              : \"string\" != typeof e\n                ? _.grep(t, function(t) {\n                    return f.call(e, t) > -1 !== n;\n                  })\n                : _.filter(e, t, n);\n        }\n        (_.filter = function(t, e, n) {\n          var r = e[0];\n          return (\n            n && (t = \":not(\" + t + \")\"),\n            1 === e.length && 1 === r.nodeType\n              ? _.find.matchesSelector(r, t)\n                ? [r]\n                : []\n              : _.find.matches(\n                  t,\n                  _.grep(e, function(t) {\n                    return 1 === t.nodeType;\n                  })\n                )\n          );\n        }),\n          _.fn.extend({\n            find: function(t) {\n              var e,\n                n,\n                r = this.length,\n                i = this;\n              if (\"string\" != typeof t)\n                return this.pushStack(\n                  _(t).filter(function() {\n                    for (e = 0; e < r; e++) if (_.contains(i[e], this)) return !0;\n                  })\n                );\n              for (n = this.pushStack([]), e = 0; e < r; e++) _.find(t, i[e], n);\n              return r > 1 ? _.uniqueSort(n) : n;\n            },\n            filter: function(t) {\n              return this.pushStack(N(this, t || [], !1));\n            },\n            not: function(t) {\n              return this.pushStack(N(this, t || [], !0));\n            },\n            is: function(t) {\n              return !!N(this, \"string\" == typeof t && T.test(t) ? _(t) : t || [], !1).length;\n            }\n          });\n        var M,\n          L = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;\n        ((_.fn.init = function(t, e, n) {\n          var r, i;\n          if (!t) return this;\n          if (((n = n || M), \"string\" == typeof t)) {\n            if (\n              !(r =\n                \"<\" === t[0] && \">\" === t[t.length - 1] && t.length >= 3\n                  ? [null, t, null]\n                  : L.exec(t)) ||\n              (!r[1] && e)\n            )\n              return !e || e.jquery ? (e || n).find(t) : this.constructor(e).find(t);\n            if (r[1]) {\n              if (\n                ((e = e instanceof _ ? e[0] : e),\n                _.merge(this, _.parseHTML(r[1], e && e.nodeType ? e.ownerDocument || e : a, !0)),\n                j.test(r[1]) && _.isPlainObject(e))\n              )\n                for (r in e) $(this[r]) ? this[r](e[r]) : this.attr(r, e[r]);\n              return this;\n            }\n            return (i = a.getElementById(r[2])) && ((this[0] = i), (this.length = 1)), this;\n          }\n          return t.nodeType\n            ? ((this[0] = t), (this.length = 1), this)\n            : $(t)\n              ? void 0 !== n.ready\n                ? n.ready(t)\n                : t(_)\n              : _.makeArray(t, this);\n        }).prototype = _.fn),\n          (M = _(a));\n        var D = /^(?:parents|prev(?:Until|All))/,\n          I = { children: !0, contents: !0, next: !0, prev: !0 };\n        function R(t, e) {\n          for (; (t = t[e]) && 1 !== t.nodeType; );\n          return t;\n        }\n        _.fn.extend({\n          has: function(t) {\n            var e = _(t, this),\n              n = e.length;\n            return this.filter(function() {\n              for (var t = 0; t < n; t++) if (_.contains(this, e[t])) return !0;\n            });\n          },\n          closest: function(t, e) {\n            var n,\n              r = 0,\n              i = this.length,\n              o = [],\n              a = \"string\" != typeof t && _(t);\n            if (!T.test(t))\n              for (; r < i; r++)\n                for (n = this[r]; n && n !== e; n = n.parentNode)\n                  if (\n                    n.nodeType < 11 &&\n                    (a ? a.index(n) > -1 : 1 === n.nodeType && _.find.matchesSelector(n, t))\n                  ) {\n                    o.push(n);\n                    break;\n                  }\n            return this.pushStack(o.length > 1 ? _.uniqueSort(o) : o);\n          },\n          index: function(t) {\n            return t\n              ? \"string\" == typeof t\n                ? f.call(_(t), this[0])\n                : f.call(this, t.jquery ? t[0] : t)\n              : this[0] && this[0].parentNode\n                ? this.first().prevAll().length\n                : -1;\n          },\n          add: function(t, e) {\n            return this.pushStack(_.uniqueSort(_.merge(this.get(), _(t, e))));\n          },\n          addBack: function(t) {\n            return this.add(null == t ? this.prevObject : this.prevObject.filter(t));\n          }\n        }),\n          _.each(\n            {\n              parent: function(t) {\n                var e = t.parentNode;\n                return e && 11 !== e.nodeType ? e : null;\n              },\n              parents: function(t) {\n                return k(t, \"parentNode\");\n              },\n              parentsUntil: function(t, e, n) {\n                return k(t, \"parentNode\", n);\n              },\n              next: function(t) {\n                return R(t, \"nextSibling\");\n              },\n              prev: function(t) {\n                return R(t, \"previousSibling\");\n              },\n              nextAll: function(t) {\n                return k(t, \"nextSibling\");\n              },\n              prevAll: function(t) {\n                return k(t, \"previousSibling\");\n              },\n              nextUntil: function(t, e, n) {\n                return k(t, \"nextSibling\", n);\n              },\n              prevUntil: function(t, e, n) {\n                return k(t, \"previousSibling\", n);\n              },\n              siblings: function(t) {\n                return A((t.parentNode || {}).firstChild, t);\n              },\n              children: function(t) {\n                return A(t.firstChild);\n              },\n              contents: function(t) {\n                return O(t, \"iframe\")\n                  ? t.contentDocument\n                  : (O(t, \"template\") && (t = t.content || t), _.merge([], t.childNodes));\n              }\n            },\n            function(t, e) {\n              _.fn[t] = function(n, r) {\n                var i = _.map(this, e, n);\n                return (\n                  \"Until\" !== t.slice(-5) && (r = n),\n                  r && \"string\" == typeof r && (i = _.filter(r, i)),\n                  this.length > 1 && (I[t] || _.uniqueSort(i), D.test(t) && i.reverse()),\n                  this.pushStack(i)\n                );\n              };\n            }\n          );\n        var P = /[^\\x20\\t\\r\\n\\f]+/g;\n        function V(t) {\n          return t;\n        }\n        function q(t) {\n          throw t;\n        }\n        function U(t, e, n, r) {\n          var i;\n          try {\n            t && $((i = t.promise))\n              ? i\n                  .call(t)\n                  .done(e)\n                  .fail(n)\n              : t && $((i = t.then))\n                ? i.call(t, e, n)\n                : e.apply(void 0, [t].slice(r));\n          } catch (t) {\n            n.apply(void 0, [t]);\n          }\n        }\n        (_.Callbacks = function(t) {\n          t =\n            \"string\" == typeof t\n              ? (function(t) {\n                  var e = {};\n                  return (\n                    _.each(t.match(P) || [], function(t, n) {\n                      e[n] = !0;\n                    }),\n                    e\n                  );\n                })(t)\n              : _.extend({}, t);\n          var e,\n            n,\n            r,\n            i,\n            o = [],\n            a = [],\n            u = -1,\n            s = function() {\n              for (i = i || t.once, r = e = !0; a.length; u = -1)\n                for (n = a.shift(); ++u < o.length; )\n                  !1 === o[u].apply(n[0], n[1]) && t.stopOnFalse && ((u = o.length), (n = !1));\n              t.memory || (n = !1), (e = !1), i && (o = n ? [] : \"\");\n            },\n            c = {\n              add: function() {\n                return (\n                  o &&\n                    (n && !e && ((u = o.length - 1), a.push(n)),\n                    (function e(n) {\n                      _.each(n, function(n, r) {\n                        $(r)\n                          ? (t.unique && c.has(r)) || o.push(r)\n                          : r && r.length && \"string\" !== x(r) && e(r);\n                      });\n                    })(arguments),\n                    n && !e && s()),\n                  this\n                );\n              },\n              remove: function() {\n                return (\n                  _.each(arguments, function(t, e) {\n                    for (var n; (n = _.inArray(e, o, n)) > -1; ) o.splice(n, 1), n <= u && u--;\n                  }),\n                  this\n                );\n              },\n              has: function(t) {\n                return t ? _.inArray(t, o) > -1 : o.length > 0;\n              },\n              empty: function() {\n                return o && (o = []), this;\n              },\n              disable: function() {\n                return (i = a = []), (o = n = \"\"), this;\n              },\n              disabled: function() {\n                return !o;\n              },\n              lock: function() {\n                return (i = a = []), n || e || (o = n = \"\"), this;\n              },\n              locked: function() {\n                return !!i;\n              },\n              fireWith: function(t, n) {\n                return (\n                  i || ((n = [t, (n = n || []).slice ? n.slice() : n]), a.push(n), e || s()), this\n                );\n              },\n              fire: function() {\n                return c.fireWith(this, arguments), this;\n              },\n              fired: function() {\n                return !!r;\n              }\n            };\n          return c;\n        }),\n          _.extend({\n            Deferred: function(t) {\n              var e = [\n                  [\"notify\", \"progress\", _.Callbacks(\"memory\"), _.Callbacks(\"memory\"), 2],\n                  [\n                    \"resolve\",\n                    \"done\",\n                    _.Callbacks(\"once memory\"),\n                    _.Callbacks(\"once memory\"),\n                    0,\n                    \"resolved\"\n                  ],\n                  [\n                    \"reject\",\n                    \"fail\",\n                    _.Callbacks(\"once memory\"),\n                    _.Callbacks(\"once memory\"),\n                    1,\n                    \"rejected\"\n                  ]\n                ],\n                r = \"pending\",\n                i = {\n                  state: function() {\n                    return r;\n                  },\n                  always: function() {\n                    return o.done(arguments).fail(arguments), this;\n                  },\n                  catch: function(t) {\n                    return i.then(null, t);\n                  },\n                  pipe: function() {\n                    var t = arguments;\n                    return _.Deferred(function(n) {\n                      _.each(e, function(e, r) {\n                        var i = $(t[r[4]]) && t[r[4]];\n                        o[r[1]](function() {\n                          var t = i && i.apply(this, arguments);\n                          t && $(t.promise)\n                            ? t\n                                .promise()\n                                .progress(n.notify)\n                                .done(n.resolve)\n                                .fail(n.reject)\n                            : n[r[0] + \"With\"](this, i ? [t] : arguments);\n                        });\n                      }),\n                        (t = null);\n                    }).promise();\n                  },\n                  then: function(t, r, i) {\n                    var o = 0;\n                    function a(t, e, r, i) {\n                      return function() {\n                        var u = this,\n                          s = arguments,\n                          c = function() {\n                            var n, c;\n                            if (!(t < o)) {\n                              if ((n = r.apply(u, s)) === e.promise())\n                                throw new TypeError(\"Thenable self-resolution\");\n                              (c = n && (\"object\" == typeof n || \"function\" == typeof n) && n.then),\n                                $(c)\n                                  ? i\n                                    ? c.call(n, a(o, e, V, i), a(o, e, q, i))\n                                    : (o++,\n                                      c.call(\n                                        n,\n                                        a(o, e, V, i),\n                                        a(o, e, q, i),\n                                        a(o, e, V, e.notifyWith)\n                                      ))\n                                  : (r !== V && ((u = void 0), (s = [n])),\n                                    (i || e.resolveWith)(u, s));\n                            }\n                          },\n                          l = i\n                            ? c\n                            : function() {\n                                try {\n                                  c();\n                                } catch (n) {\n                                  _.Deferred.exceptionHook &&\n                                    _.Deferred.exceptionHook(n, l.stackTrace),\n                                    t + 1 >= o &&\n                                      (r !== q && ((u = void 0), (s = [n])), e.rejectWith(u, s));\n                                }\n                              };\n                        t\n                          ? l()\n                          : (_.Deferred.getStackHook && (l.stackTrace = _.Deferred.getStackHook()),\n                            n.setTimeout(l));\n                      };\n                    }\n                    return _.Deferred(function(n) {\n                      e[0][3].add(a(0, n, $(i) ? i : V, n.notifyWith)),\n                        e[1][3].add(a(0, n, $(t) ? t : V)),\n                        e[2][3].add(a(0, n, $(r) ? r : q));\n                    }).promise();\n                  },\n                  promise: function(t) {\n                    return null != t ? _.extend(t, i) : i;\n                  }\n                },\n                o = {};\n              return (\n                _.each(e, function(t, n) {\n                  var a = n[2],\n                    u = n[5];\n                  (i[n[1]] = a.add),\n                    u &&\n                      a.add(\n                        function() {\n                          r = u;\n                        },\n                        e[3 - t][2].disable,\n                        e[3 - t][3].disable,\n                        e[0][2].lock,\n                        e[0][3].lock\n                      ),\n                    a.add(n[3].fire),\n                    (o[n[0]] = function() {\n                      return o[n[0] + \"With\"](this === o ? void 0 : this, arguments), this;\n                    }),\n                    (o[n[0] + \"With\"] = a.fireWith);\n                }),\n                i.promise(o),\n                t && t.call(o, o),\n                o\n              );\n            },\n            when: function(t) {\n              var e = arguments.length,\n                n = e,\n                r = Array(n),\n                i = s.call(arguments),\n                o = _.Deferred(),\n                a = function(t) {\n                  return function(n) {\n                    (r[t] = this),\n                      (i[t] = arguments.length > 1 ? s.call(arguments) : n),\n                      --e || o.resolveWith(r, i);\n                  };\n                };\n              if (\n                e <= 1 &&\n                (U(t, o.done(a(n)).resolve, o.reject, !e),\n                \"pending\" === o.state() || $(i[n] && i[n].then))\n              )\n                return o.then();\n              for (; n--; ) U(i[n], a(n), o.reject);\n              return o.promise();\n            }\n          });\n        var F = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n        (_.Deferred.exceptionHook = function(t, e) {\n          n.console &&\n            n.console.warn &&\n            t &&\n            F.test(t.name) &&\n            n.console.warn(\"jQuery.Deferred exception: \" + t.message, t.stack, e);\n        }),\n          (_.readyException = function(t) {\n            n.setTimeout(function() {\n              throw t;\n            });\n          });\n        var H = _.Deferred();\n        function B() {\n          a.removeEventListener(\"DOMContentLoaded\", B), n.removeEventListener(\"load\", B), _.ready();\n        }\n        (_.fn.ready = function(t) {\n          return (\n            H.then(t).catch(function(t) {\n              _.readyException(t);\n            }),\n            this\n          );\n        }),\n          _.extend({\n            isReady: !1,\n            readyWait: 1,\n            ready: function(t) {\n              (!0 === t ? --_.readyWait : _.isReady) ||\n                ((_.isReady = !0), (!0 !== t && --_.readyWait > 0) || H.resolveWith(a, [_]));\n            }\n          }),\n          (_.ready.then = H.then),\n          \"complete\" === a.readyState || (\"loading\" !== a.readyState && !a.documentElement.doScroll)\n            ? n.setTimeout(_.ready)\n            : (a.addEventListener(\"DOMContentLoaded\", B), n.addEventListener(\"load\", B));\n        var z = function(t, e, n, r, i, o, a) {\n            var u = 0,\n              s = t.length,\n              c = null == n;\n            if (\"object\" === x(n)) for (u in ((i = !0), n)) z(t, e, u, n[u], !0, o, a);\n            else if (\n              void 0 !== r &&\n              ((i = !0),\n              $(r) || (a = !0),\n              c &&\n                (a\n                  ? (e.call(t, r), (e = null))\n                  : ((c = e),\n                    (e = function(t, e, n) {\n                      return c.call(_(t), n);\n                    }))),\n              e)\n            )\n              for (; u < s; u++) e(t[u], n, a ? r : r.call(t[u], u, e(t[u], n)));\n            return i ? t : c ? e.call(t) : s ? e(t[0], n) : o;\n          },\n          W = /^-ms-/,\n          G = /-([a-z])/g;\n        function K(t, e) {\n          return e.toUpperCase();\n        }\n        function J(t) {\n          return t.replace(W, \"ms-\").replace(G, K);\n        }\n        var Y = function(t) {\n          return 1 === t.nodeType || 9 === t.nodeType || !+t.nodeType;\n        };\n        function Z() {\n          this.expando = _.expando + Z.uid++;\n        }\n        (Z.uid = 1),\n          (Z.prototype = {\n            cache: function(t) {\n              var e = t[this.expando];\n              return (\n                e ||\n                  ((e = {}),\n                  Y(t) &&\n                    (t.nodeType\n                      ? (t[this.expando] = e)\n                      : Object.defineProperty(t, this.expando, { value: e, configurable: !0 }))),\n                e\n              );\n            },\n            set: function(t, e, n) {\n              var r,\n                i = this.cache(t);\n              if (\"string\" == typeof e) i[J(e)] = n;\n              else for (r in e) i[J(r)] = e[r];\n              return i;\n            },\n            get: function(t, e) {\n              return void 0 === e ? this.cache(t) : t[this.expando] && t[this.expando][J(e)];\n            },\n            access: function(t, e, n) {\n              return void 0 === e || (e && \"string\" == typeof e && void 0 === n)\n                ? this.get(t, e)\n                : (this.set(t, e, n), void 0 !== n ? n : e);\n            },\n            remove: function(t, e) {\n              var n,\n                r = t[this.expando];\n              if (void 0 !== r) {\n                if (void 0 !== e) {\n                  n = (e = Array.isArray(e) ? e.map(J) : (e = J(e)) in r ? [e] : e.match(P) || [])\n                    .length;\n                  for (; n--; ) delete r[e[n]];\n                }\n                (void 0 === e || _.isEmptyObject(r)) &&\n                  (t.nodeType ? (t[this.expando] = void 0) : delete t[this.expando]);\n              }\n            },\n            hasData: function(t) {\n              var e = t[this.expando];\n              return void 0 !== e && !_.isEmptyObject(e);\n            }\n          });\n        var X = new Z(),\n          Q = new Z(),\n          tt = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n          et = /[A-Z]/g;\n        function nt(t, e, n) {\n          var r;\n          if (void 0 === n && 1 === t.nodeType)\n            if (\n              ((r = \"data-\" + e.replace(et, \"-$&\").toLowerCase()),\n              \"string\" == typeof (n = t.getAttribute(r)))\n            ) {\n              try {\n                n = (function(t) {\n                  return (\n                    \"true\" === t ||\n                    (\"false\" !== t &&\n                      (\"null\" === t ? null : t === +t + \"\" ? +t : tt.test(t) ? JSON.parse(t) : t))\n                  );\n                })(n);\n              } catch (t) {}\n              Q.set(t, e, n);\n            } else n = void 0;\n          return n;\n        }\n        _.extend({\n          hasData: function(t) {\n            return Q.hasData(t) || X.hasData(t);\n          },\n          data: function(t, e, n) {\n            return Q.access(t, e, n);\n          },\n          removeData: function(t, e) {\n            Q.remove(t, e);\n          },\n          _data: function(t, e, n) {\n            return X.access(t, e, n);\n          },\n          _removeData: function(t, e) {\n            X.remove(t, e);\n          }\n        }),\n          _.fn.extend({\n            data: function(t, e) {\n              var n,\n                r,\n                i,\n                o = this[0],\n                a = o && o.attributes;\n              if (void 0 === t) {\n                if (\n                  this.length &&\n                  ((i = Q.get(o)), 1 === o.nodeType && !X.get(o, \"hasDataAttrs\"))\n                ) {\n                  for (n = a.length; n--; )\n                    a[n] &&\n                      0 === (r = a[n].name).indexOf(\"data-\") &&\n                      ((r = J(r.slice(5))), nt(o, r, i[r]));\n                  X.set(o, \"hasDataAttrs\", !0);\n                }\n                return i;\n              }\n              return \"object\" == typeof t\n                ? this.each(function() {\n                    Q.set(this, t);\n                  })\n                : z(\n                    this,\n                    function(e) {\n                      var n;\n                      if (o && void 0 === e)\n                        return void 0 !== (n = Q.get(o, t))\n                          ? n\n                          : void 0 !== (n = nt(o, t))\n                            ? n\n                            : void 0;\n                      this.each(function() {\n                        Q.set(this, t, e);\n                      });\n                    },\n                    null,\n                    e,\n                    arguments.length > 1,\n                    null,\n                    !0\n                  );\n            },\n            removeData: function(t) {\n              return this.each(function() {\n                Q.remove(this, t);\n              });\n            }\n          }),\n          _.extend({\n            queue: function(t, e, n) {\n              var r;\n              if (t)\n                return (\n                  (e = (e || \"fx\") + \"queue\"),\n                  (r = X.get(t, e)),\n                  n && (!r || Array.isArray(n) ? (r = X.access(t, e, _.makeArray(n))) : r.push(n)),\n                  r || []\n                );\n            },\n            dequeue: function(t, e) {\n              e = e || \"fx\";\n              var n = _.queue(t, e),\n                r = n.length,\n                i = n.shift(),\n                o = _._queueHooks(t, e);\n              \"inprogress\" === i && ((i = n.shift()), r--),\n                i &&\n                  (\"fx\" === e && n.unshift(\"inprogress\"),\n                  delete o.stop,\n                  i.call(\n                    t,\n                    function() {\n                      _.dequeue(t, e);\n                    },\n                    o\n                  )),\n                !r && o && o.empty.fire();\n            },\n            _queueHooks: function(t, e) {\n              var n = e + \"queueHooks\";\n              return (\n                X.get(t, n) ||\n                X.access(t, n, {\n                  empty: _.Callbacks(\"once memory\").add(function() {\n                    X.remove(t, [e + \"queue\", n]);\n                  })\n                })\n              );\n            }\n          }),\n          _.fn.extend({\n            queue: function(t, e) {\n              var n = 2;\n              return (\n                \"string\" != typeof t && ((e = t), (t = \"fx\"), n--),\n                arguments.length < n\n                  ? _.queue(this[0], t)\n                  : void 0 === e\n                    ? this\n                    : this.each(function() {\n                        var n = _.queue(this, t, e);\n                        _._queueHooks(this, t),\n                          \"fx\" === t && \"inprogress\" !== n[0] && _.dequeue(this, t);\n                      })\n              );\n            },\n            dequeue: function(t) {\n              return this.each(function() {\n                _.dequeue(this, t);\n              });\n            },\n            clearQueue: function(t) {\n              return this.queue(t || \"fx\", []);\n            },\n            promise: function(t, e) {\n              var n,\n                r = 1,\n                i = _.Deferred(),\n                o = this,\n                a = this.length,\n                u = function() {\n                  --r || i.resolveWith(o, [o]);\n                };\n              for (\"string\" != typeof t && ((e = t), (t = void 0)), t = t || \"fx\"; a--; )\n                (n = X.get(o[a], t + \"queueHooks\")) && n.empty && (r++, n.empty.add(u));\n              return u(), i.promise(e);\n            }\n          });\n        var rt = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,\n          it = new RegExp(\"^(?:([+-])=|)(\" + rt + \")([a-z%]*)$\", \"i\"),\n          ot = [\"Top\", \"Right\", \"Bottom\", \"Left\"],\n          at = function(t, e) {\n            return (\n              \"none\" === (t = e || t).style.display ||\n              (\"\" === t.style.display &&\n                _.contains(t.ownerDocument, t) &&\n                \"none\" === _.css(t, \"display\"))\n            );\n          },\n          ut = function(t, e, n, r) {\n            var i,\n              o,\n              a = {};\n            for (o in e) (a[o] = t.style[o]), (t.style[o] = e[o]);\n            for (o in ((i = n.apply(t, r || [])), e)) t.style[o] = a[o];\n            return i;\n          };\n        function st(t, e, n, r) {\n          var i,\n            o,\n            a = 20,\n            u = r\n              ? function() {\n                  return r.cur();\n                }\n              : function() {\n                  return _.css(t, e, \"\");\n                },\n            s = u(),\n            c = (n && n[3]) || (_.cssNumber[e] ? \"\" : \"px\"),\n            l = (_.cssNumber[e] || (\"px\" !== c && +s)) && it.exec(_.css(t, e));\n          if (l && l[3] !== c) {\n            for (s /= 2, c = c || l[3], l = +s || 1; a--; )\n              _.style(t, e, l + c), (1 - o) * (1 - (o = u() / s || 0.5)) <= 0 && (a = 0), (l /= o);\n            (l *= 2), _.style(t, e, l + c), (n = n || []);\n          }\n          return (\n            n &&\n              ((l = +l || +s || 0),\n              (i = n[1] ? l + (n[1] + 1) * n[2] : +n[2]),\n              r && ((r.unit = c), (r.start = l), (r.end = i))),\n            i\n          );\n        }\n        var ct = {};\n        function lt(t) {\n          var e,\n            n = t.ownerDocument,\n            r = t.nodeName,\n            i = ct[r];\n          return (\n            i ||\n            ((e = n.body.appendChild(n.createElement(r))),\n            (i = _.css(e, \"display\")),\n            e.parentNode.removeChild(e),\n            \"none\" === i && (i = \"block\"),\n            (ct[r] = i),\n            i)\n          );\n        }\n        function ft(t, e) {\n          for (var n, r, i = [], o = 0, a = t.length; o < a; o++)\n            (r = t[o]).style &&\n              ((n = r.style.display),\n              e\n                ? (\"none\" === n &&\n                    ((i[o] = X.get(r, \"display\") || null), i[o] || (r.style.display = \"\")),\n                  \"\" === r.style.display && at(r) && (i[o] = lt(r)))\n                : \"none\" !== n && ((i[o] = \"none\"), X.set(r, \"display\", n)));\n          for (o = 0; o < a; o++) null != i[o] && (t[o].style.display = i[o]);\n          return t;\n        }\n        _.fn.extend({\n          show: function() {\n            return ft(this, !0);\n          },\n          hide: function() {\n            return ft(this);\n          },\n          toggle: function(t) {\n            return \"boolean\" == typeof t\n              ? t\n                ? this.show()\n                : this.hide()\n              : this.each(function() {\n                  at(this) ? _(this).show() : _(this).hide();\n                });\n          }\n        });\n        var pt = /^(?:checkbox|radio)$/i,\n          ht = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i,\n          dt = /^$|^module$|\\/(?:java|ecma)script/i,\n          vt = {\n            option: [1, \"<select multiple='multiple'>\", \"</select>\"],\n            thead: [1, \"<table>\", \"</table>\"],\n            col: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n            tr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n            td: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n            _default: [0, \"\", \"\"]\n          };\n        function gt(t, e) {\n          var n;\n          return (\n            (n =\n              void 0 !== t.getElementsByTagName\n                ? t.getElementsByTagName(e || \"*\")\n                : void 0 !== t.querySelectorAll\n                  ? t.querySelectorAll(e || \"*\")\n                  : []),\n            void 0 === e || (e && O(t, e)) ? _.merge([t], n) : n\n          );\n        }\n        function mt(t, e) {\n          for (var n = 0, r = t.length; n < r; n++)\n            X.set(t[n], \"globalEval\", !e || X.get(e[n], \"globalEval\"));\n        }\n        (vt.optgroup = vt.option),\n          (vt.tbody = vt.tfoot = vt.colgroup = vt.caption = vt.thead),\n          (vt.th = vt.td);\n        var $t = /<|&#?\\w+;/;\n        function yt(t, e, n, r, i) {\n          for (\n            var o, a, u, s, c, l, f = e.createDocumentFragment(), p = [], h = 0, d = t.length;\n            h < d;\n            h++\n          )\n            if ((o = t[h]) || 0 === o)\n              if (\"object\" === x(o)) _.merge(p, o.nodeType ? [o] : o);\n              else if ($t.test(o)) {\n                for (\n                  a = a || f.appendChild(e.createElement(\"div\")),\n                    u = (ht.exec(o) || [\"\", \"\"])[1].toLowerCase(),\n                    s = vt[u] || vt._default,\n                    a.innerHTML = s[1] + _.htmlPrefilter(o) + s[2],\n                    l = s[0];\n                  l--;\n\n                )\n                  a = a.lastChild;\n                _.merge(p, a.childNodes), ((a = f.firstChild).textContent = \"\");\n              } else p.push(e.createTextNode(o));\n          for (f.textContent = \"\", h = 0; (o = p[h++]); )\n            if (r && _.inArray(o, r) > -1) i && i.push(o);\n            else if (\n              ((c = _.contains(o.ownerDocument, o)),\n              (a = gt(f.appendChild(o), \"script\")),\n              c && mt(a),\n              n)\n            )\n              for (l = 0; (o = a[l++]); ) dt.test(o.type || \"\") && n.push(o);\n          return f;\n        }\n        !(function() {\n          var t = a.createDocumentFragment().appendChild(a.createElement(\"div\")),\n            e = a.createElement(\"input\");\n          e.setAttribute(\"type\", \"radio\"),\n            e.setAttribute(\"checked\", \"checked\"),\n            e.setAttribute(\"name\", \"t\"),\n            t.appendChild(e),\n            (m.checkClone = t.cloneNode(!0).cloneNode(!0).lastChild.checked),\n            (t.innerHTML = \"<textarea>x</textarea>\"),\n            (m.noCloneChecked = !!t.cloneNode(!0).lastChild.defaultValue);\n        })();\n        var bt = a.documentElement,\n          wt = /^key/,\n          xt = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n          _t = /^([^.]*)(?:\\.(.+)|)/;\n        function Ct() {\n          return !0;\n        }\n        function St() {\n          return !1;\n        }\n        function Et() {\n          try {\n            return a.activeElement;\n          } catch (t) {}\n        }\n        function kt(t, e, n, r, i, o) {\n          var a, u;\n          if (\"object\" == typeof e) {\n            for (u in (\"string\" != typeof n && ((r = r || n), (n = void 0)), e))\n              kt(t, u, n, r, e[u], o);\n            return t;\n          }\n          if (\n            (null == r && null == i\n              ? ((i = n), (r = n = void 0))\n              : null == i &&\n                (\"string\" == typeof n ? ((i = r), (r = void 0)) : ((i = r), (r = n), (n = void 0))),\n            !1 === i)\n          )\n            i = St;\n          else if (!i) return t;\n          return (\n            1 === o &&\n              ((a = i),\n              ((i = function(t) {\n                return _().off(t), a.apply(this, arguments);\n              }).guid = a.guid || (a.guid = _.guid++))),\n            t.each(function() {\n              _.event.add(this, e, i, r, n);\n            })\n          );\n        }\n        (_.event = {\n          global: {},\n          add: function(t, e, n, r, i) {\n            var o,\n              a,\n              u,\n              s,\n              c,\n              l,\n              f,\n              p,\n              h,\n              d,\n              v,\n              g = X.get(t);\n            if (g)\n              for (\n                n.handler && ((n = (o = n).handler), (i = o.selector)),\n                  i && _.find.matchesSelector(bt, i),\n                  n.guid || (n.guid = _.guid++),\n                  (s = g.events) || (s = g.events = {}),\n                  (a = g.handle) ||\n                    (a = g.handle = function(e) {\n                      return void 0 !== _ && _.event.triggered !== e.type\n                        ? _.event.dispatch.apply(t, arguments)\n                        : void 0;\n                    }),\n                  c = (e = (e || \"\").match(P) || [\"\"]).length;\n                c--;\n\n              )\n                (h = v = (u = _t.exec(e[c]) || [])[1]),\n                  (d = (u[2] || \"\").split(\".\").sort()),\n                  h &&\n                    ((f = _.event.special[h] || {}),\n                    (h = (i ? f.delegateType : f.bindType) || h),\n                    (f = _.event.special[h] || {}),\n                    (l = _.extend(\n                      {\n                        type: h,\n                        origType: v,\n                        data: r,\n                        handler: n,\n                        guid: n.guid,\n                        selector: i,\n                        needsContext: i && _.expr.match.needsContext.test(i),\n                        namespace: d.join(\".\")\n                      },\n                      o\n                    )),\n                    (p = s[h]) ||\n                      (((p = s[h] = []).delegateCount = 0),\n                      (f.setup && !1 !== f.setup.call(t, r, d, a)) ||\n                        (t.addEventListener && t.addEventListener(h, a))),\n                    f.add && (f.add.call(t, l), l.handler.guid || (l.handler.guid = n.guid)),\n                    i ? p.splice(p.delegateCount++, 0, l) : p.push(l),\n                    (_.event.global[h] = !0));\n          },\n          remove: function(t, e, n, r, i) {\n            var o,\n              a,\n              u,\n              s,\n              c,\n              l,\n              f,\n              p,\n              h,\n              d,\n              v,\n              g = X.hasData(t) && X.get(t);\n            if (g && (s = g.events)) {\n              for (c = (e = (e || \"\").match(P) || [\"\"]).length; c--; )\n                if (\n                  ((h = v = (u = _t.exec(e[c]) || [])[1]), (d = (u[2] || \"\").split(\".\").sort()), h)\n                ) {\n                  for (\n                    f = _.event.special[h] || {},\n                      p = s[(h = (r ? f.delegateType : f.bindType) || h)] || [],\n                      u = u[2] && new RegExp(\"(^|\\\\.)\" + d.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\"),\n                      a = o = p.length;\n                    o--;\n\n                  )\n                    (l = p[o]),\n                      (!i && v !== l.origType) ||\n                        (n && n.guid !== l.guid) ||\n                        (u && !u.test(l.namespace)) ||\n                        (r && r !== l.selector && (\"**\" !== r || !l.selector)) ||\n                        (p.splice(o, 1),\n                        l.selector && p.delegateCount--,\n                        f.remove && f.remove.call(t, l));\n                  a &&\n                    !p.length &&\n                    ((f.teardown && !1 !== f.teardown.call(t, d, g.handle)) ||\n                      _.removeEvent(t, h, g.handle),\n                    delete s[h]);\n                } else for (h in s) _.event.remove(t, h + e[c], n, r, !0);\n              _.isEmptyObject(s) && X.remove(t, \"handle events\");\n            }\n          },\n          dispatch: function(t) {\n            var e,\n              n,\n              r,\n              i,\n              o,\n              a,\n              u = _.event.fix(t),\n              s = new Array(arguments.length),\n              c = (X.get(this, \"events\") || {})[u.type] || [],\n              l = _.event.special[u.type] || {};\n            for (s[0] = u, e = 1; e < arguments.length; e++) s[e] = arguments[e];\n            if (((u.delegateTarget = this), !l.preDispatch || !1 !== l.preDispatch.call(this, u))) {\n              for (\n                a = _.event.handlers.call(this, u, c), e = 0;\n                (i = a[e++]) && !u.isPropagationStopped();\n\n              )\n                for (\n                  u.currentTarget = i.elem, n = 0;\n                  (o = i.handlers[n++]) && !u.isImmediatePropagationStopped();\n\n                )\n                  (u.rnamespace && !u.rnamespace.test(o.namespace)) ||\n                    ((u.handleObj = o),\n                    (u.data = o.data),\n                    void 0 !==\n                      (r = ((_.event.special[o.origType] || {}).handle || o.handler).apply(\n                        i.elem,\n                        s\n                      )) &&\n                      !1 === (u.result = r) &&\n                      (u.preventDefault(), u.stopPropagation()));\n              return l.postDispatch && l.postDispatch.call(this, u), u.result;\n            }\n          },\n          handlers: function(t, e) {\n            var n,\n              r,\n              i,\n              o,\n              a,\n              u = [],\n              s = e.delegateCount,\n              c = t.target;\n            if (s && c.nodeType && !(\"click\" === t.type && t.button >= 1))\n              for (; c !== this; c = c.parentNode || this)\n                if (1 === c.nodeType && (\"click\" !== t.type || !0 !== c.disabled)) {\n                  for (o = [], a = {}, n = 0; n < s; n++)\n                    void 0 === a[(i = (r = e[n]).selector + \" \")] &&\n                      (a[i] = r.needsContext\n                        ? _(i, this).index(c) > -1\n                        : _.find(i, this, null, [c]).length),\n                      a[i] && o.push(r);\n                  o.length && u.push({ elem: c, handlers: o });\n                }\n            return (c = this), s < e.length && u.push({ elem: c, handlers: e.slice(s) }), u;\n          },\n          addProp: function(t, e) {\n            Object.defineProperty(_.Event.prototype, t, {\n              enumerable: !0,\n              configurable: !0,\n              get: $(e)\n                ? function() {\n                    if (this.originalEvent) return e(this.originalEvent);\n                  }\n                : function() {\n                    if (this.originalEvent) return this.originalEvent[t];\n                  },\n              set: function(e) {\n                Object.defineProperty(this, t, {\n                  enumerable: !0,\n                  configurable: !0,\n                  writable: !0,\n                  value: e\n                });\n              }\n            });\n          },\n          fix: function(t) {\n            return t[_.expando] ? t : new _.Event(t);\n          },\n          special: {\n            load: { noBubble: !0 },\n            focus: {\n              trigger: function() {\n                if (this !== Et() && this.focus) return this.focus(), !1;\n              },\n              delegateType: \"focusin\"\n            },\n            blur: {\n              trigger: function() {\n                if (this === Et() && this.blur) return this.blur(), !1;\n              },\n              delegateType: \"focusout\"\n            },\n            click: {\n              trigger: function() {\n                if (\"checkbox\" === this.type && this.click && O(this, \"input\"))\n                  return this.click(), !1;\n              },\n              _default: function(t) {\n                return O(t.target, \"a\");\n              }\n            },\n            beforeunload: {\n              postDispatch: function(t) {\n                void 0 !== t.result && t.originalEvent && (t.originalEvent.returnValue = t.result);\n              }\n            }\n          }\n        }),\n          (_.removeEvent = function(t, e, n) {\n            t.removeEventListener && t.removeEventListener(e, n);\n          }),\n          (_.Event = function(t, e) {\n            if (!(this instanceof _.Event)) return new _.Event(t, e);\n            t && t.type\n              ? ((this.originalEvent = t),\n                (this.type = t.type),\n                (this.isDefaultPrevented =\n                  t.defaultPrevented || (void 0 === t.defaultPrevented && !1 === t.returnValue)\n                    ? Ct\n                    : St),\n                (this.target =\n                  t.target && 3 === t.target.nodeType ? t.target.parentNode : t.target),\n                (this.currentTarget = t.currentTarget),\n                (this.relatedTarget = t.relatedTarget))\n              : (this.type = t),\n              e && _.extend(this, e),\n              (this.timeStamp = (t && t.timeStamp) || Date.now()),\n              (this[_.expando] = !0);\n          }),\n          (_.Event.prototype = {\n            constructor: _.Event,\n            isDefaultPrevented: St,\n            isPropagationStopped: St,\n            isImmediatePropagationStopped: St,\n            isSimulated: !1,\n            preventDefault: function() {\n              var t = this.originalEvent;\n              (this.isDefaultPrevented = Ct), t && !this.isSimulated && t.preventDefault();\n            },\n            stopPropagation: function() {\n              var t = this.originalEvent;\n              (this.isPropagationStopped = Ct), t && !this.isSimulated && t.stopPropagation();\n            },\n            stopImmediatePropagation: function() {\n              var t = this.originalEvent;\n              (this.isImmediatePropagationStopped = Ct),\n                t && !this.isSimulated && t.stopImmediatePropagation(),\n                this.stopPropagation();\n            }\n          }),\n          _.each(\n            {\n              altKey: !0,\n              bubbles: !0,\n              cancelable: !0,\n              changedTouches: !0,\n              ctrlKey: !0,\n              detail: !0,\n              eventPhase: !0,\n              metaKey: !0,\n              pageX: !0,\n              pageY: !0,\n              shiftKey: !0,\n              view: !0,\n              char: !0,\n              charCode: !0,\n              key: !0,\n              keyCode: !0,\n              button: !0,\n              buttons: !0,\n              clientX: !0,\n              clientY: !0,\n              offsetX: !0,\n              offsetY: !0,\n              pointerId: !0,\n              pointerType: !0,\n              screenX: !0,\n              screenY: !0,\n              targetTouches: !0,\n              toElement: !0,\n              touches: !0,\n              which: function(t) {\n                var e = t.button;\n                return null == t.which && wt.test(t.type)\n                  ? null != t.charCode\n                    ? t.charCode\n                    : t.keyCode\n                  : !t.which && void 0 !== e && xt.test(t.type)\n                    ? 1 & e\n                      ? 1\n                      : 2 & e\n                        ? 3\n                        : 4 & e\n                          ? 2\n                          : 0\n                    : t.which;\n              }\n            },\n            _.event.addProp\n          ),\n          _.each(\n            {\n              mouseenter: \"mouseover\",\n              mouseleave: \"mouseout\",\n              pointerenter: \"pointerover\",\n              pointerleave: \"pointerout\"\n            },\n            function(t, e) {\n              _.event.special[t] = {\n                delegateType: e,\n                bindType: e,\n                handle: function(t) {\n                  var n,\n                    r = t.relatedTarget,\n                    i = t.handleObj;\n                  return (\n                    (r && (r === this || _.contains(this, r))) ||\n                      ((t.type = i.origType), (n = i.handler.apply(this, arguments)), (t.type = e)),\n                    n\n                  );\n                }\n              };\n            }\n          ),\n          _.fn.extend({\n            on: function(t, e, n, r) {\n              return kt(this, t, e, n, r);\n            },\n            one: function(t, e, n, r) {\n              return kt(this, t, e, n, r, 1);\n            },\n            off: function(t, e, n) {\n              var r, i;\n              if (t && t.preventDefault && t.handleObj)\n                return (\n                  (r = t.handleObj),\n                  _(t.delegateTarget).off(\n                    r.namespace ? r.origType + \".\" + r.namespace : r.origType,\n                    r.selector,\n                    r.handler\n                  ),\n                  this\n                );\n              if (\"object\" == typeof t) {\n                for (i in t) this.off(i, e, t[i]);\n                return this;\n              }\n              return (\n                (!1 !== e && \"function\" != typeof e) || ((n = e), (e = void 0)),\n                !1 === n && (n = St),\n                this.each(function() {\n                  _.event.remove(this, t, n, e);\n                })\n              );\n            }\n          });\n        var At = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n          Tt = /<script|<style|<link/i,\n          Ot = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n          jt = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n        function Nt(t, e) {\n          return (\n            (O(t, \"table\") &&\n              O(11 !== e.nodeType ? e : e.firstChild, \"tr\") &&\n              _(t).children(\"tbody\")[0]) ||\n            t\n          );\n        }\n        function Mt(t) {\n          return (t.type = (null !== t.getAttribute(\"type\")) + \"/\" + t.type), t;\n        }\n        function Lt(t) {\n          return (\n            \"true/\" === (t.type || \"\").slice(0, 5)\n              ? (t.type = t.type.slice(5))\n              : t.removeAttribute(\"type\"),\n            t\n          );\n        }\n        function Dt(t, e) {\n          var n, r, i, o, a, u, s, c;\n          if (1 === e.nodeType) {\n            if (X.hasData(t) && ((o = X.access(t)), (a = X.set(e, o)), (c = o.events)))\n              for (i in (delete a.handle, (a.events = {}), c))\n                for (n = 0, r = c[i].length; n < r; n++) _.event.add(e, i, c[i][n]);\n            Q.hasData(t) && ((u = Q.access(t)), (s = _.extend({}, u)), Q.set(e, s));\n          }\n        }\n        function It(t, e) {\n          var n = e.nodeName.toLowerCase();\n          \"input\" === n && pt.test(t.type)\n            ? (e.checked = t.checked)\n            : (\"input\" !== n && \"textarea\" !== n) || (e.defaultValue = t.defaultValue);\n        }\n        function Rt(t, e, n, r) {\n          e = c.apply([], e);\n          var i,\n            o,\n            a,\n            u,\n            s,\n            l,\n            f = 0,\n            p = t.length,\n            h = p - 1,\n            d = e[0],\n            v = $(d);\n          if (v || (p > 1 && \"string\" == typeof d && !m.checkClone && Ot.test(d)))\n            return t.each(function(i) {\n              var o = t.eq(i);\n              v && (e[0] = d.call(this, i, o.html())), Rt(o, e, n, r);\n            });\n          if (\n            p &&\n            ((o = (i = yt(e, t[0].ownerDocument, !1, t, r)).firstChild),\n            1 === i.childNodes.length && (i = o),\n            o || r)\n          ) {\n            for (u = (a = _.map(gt(i, \"script\"), Mt)).length; f < p; f++)\n              (s = i),\n                f !== h && ((s = _.clone(s, !0, !0)), u && _.merge(a, gt(s, \"script\"))),\n                n.call(t[f], s, f);\n            if (u)\n              for (l = a[a.length - 1].ownerDocument, _.map(a, Lt), f = 0; f < u; f++)\n                (s = a[f]),\n                  dt.test(s.type || \"\") &&\n                    !X.access(s, \"globalEval\") &&\n                    _.contains(l, s) &&\n                    (s.src && \"module\" !== (s.type || \"\").toLowerCase()\n                      ? _._evalUrl && _._evalUrl(s.src)\n                      : w(s.textContent.replace(jt, \"\"), l, s));\n          }\n          return t;\n        }\n        function Pt(t, e, n) {\n          for (var r, i = e ? _.filter(e, t) : t, o = 0; null != (r = i[o]); o++)\n            n || 1 !== r.nodeType || _.cleanData(gt(r)),\n              r.parentNode &&\n                (n && _.contains(r.ownerDocument, r) && mt(gt(r, \"script\")),\n                r.parentNode.removeChild(r));\n          return t;\n        }\n        _.extend({\n          htmlPrefilter: function(t) {\n            return t.replace(At, \"<$1></$2>\");\n          },\n          clone: function(t, e, n) {\n            var r,\n              i,\n              o,\n              a,\n              u = t.cloneNode(!0),\n              s = _.contains(t.ownerDocument, t);\n            if (!(m.noCloneChecked || (1 !== t.nodeType && 11 !== t.nodeType) || _.isXMLDoc(t)))\n              for (a = gt(u), r = 0, i = (o = gt(t)).length; r < i; r++) It(o[r], a[r]);\n            if (e)\n              if (n)\n                for (o = o || gt(t), a = a || gt(u), r = 0, i = o.length; r < i; r++)\n                  Dt(o[r], a[r]);\n              else Dt(t, u);\n            return (a = gt(u, \"script\")).length > 0 && mt(a, !s && gt(t, \"script\")), u;\n          },\n          cleanData: function(t) {\n            for (var e, n, r, i = _.event.special, o = 0; void 0 !== (n = t[o]); o++)\n              if (Y(n)) {\n                if ((e = n[X.expando])) {\n                  if (e.events)\n                    for (r in e.events) i[r] ? _.event.remove(n, r) : _.removeEvent(n, r, e.handle);\n                  n[X.expando] = void 0;\n                }\n                n[Q.expando] && (n[Q.expando] = void 0);\n              }\n          }\n        }),\n          _.fn.extend({\n            detach: function(t) {\n              return Pt(this, t, !0);\n            },\n            remove: function(t) {\n              return Pt(this, t);\n            },\n            text: function(t) {\n              return z(\n                this,\n                function(t) {\n                  return void 0 === t\n                    ? _.text(this)\n                    : this.empty().each(function() {\n                        (1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType) ||\n                          (this.textContent = t);\n                      });\n                },\n                null,\n                t,\n                arguments.length\n              );\n            },\n            append: function() {\n              return Rt(this, arguments, function(t) {\n                (1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType) ||\n                  Nt(this, t).appendChild(t);\n              });\n            },\n            prepend: function() {\n              return Rt(this, arguments, function(t) {\n                if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {\n                  var e = Nt(this, t);\n                  e.insertBefore(t, e.firstChild);\n                }\n              });\n            },\n            before: function() {\n              return Rt(this, arguments, function(t) {\n                this.parentNode && this.parentNode.insertBefore(t, this);\n              });\n            },\n            after: function() {\n              return Rt(this, arguments, function(t) {\n                this.parentNode && this.parentNode.insertBefore(t, this.nextSibling);\n              });\n            },\n            empty: function() {\n              for (var t, e = 0; null != (t = this[e]); e++)\n                1 === t.nodeType && (_.cleanData(gt(t, !1)), (t.textContent = \"\"));\n              return this;\n            },\n            clone: function(t, e) {\n              return (\n                (t = null != t && t),\n                (e = null == e ? t : e),\n                this.map(function() {\n                  return _.clone(this, t, e);\n                })\n              );\n            },\n            html: function(t) {\n              return z(\n                this,\n                function(t) {\n                  var e = this[0] || {},\n                    n = 0,\n                    r = this.length;\n                  if (void 0 === t && 1 === e.nodeType) return e.innerHTML;\n                  if (\n                    \"string\" == typeof t &&\n                    !Tt.test(t) &&\n                    !vt[(ht.exec(t) || [\"\", \"\"])[1].toLowerCase()]\n                  ) {\n                    t = _.htmlPrefilter(t);\n                    try {\n                      for (; n < r; n++)\n                        1 === (e = this[n] || {}).nodeType &&\n                          (_.cleanData(gt(e, !1)), (e.innerHTML = t));\n                      e = 0;\n                    } catch (t) {}\n                  }\n                  e && this.empty().append(t);\n                },\n                null,\n                t,\n                arguments.length\n              );\n            },\n            replaceWith: function() {\n              var t = [];\n              return Rt(\n                this,\n                arguments,\n                function(e) {\n                  var n = this.parentNode;\n                  _.inArray(this, t) < 0 && (_.cleanData(gt(this)), n && n.replaceChild(e, this));\n                },\n                t\n              );\n            }\n          }),\n          _.each(\n            {\n              appendTo: \"append\",\n              prependTo: \"prepend\",\n              insertBefore: \"before\",\n              insertAfter: \"after\",\n              replaceAll: \"replaceWith\"\n            },\n            function(t, e) {\n              _.fn[t] = function(t) {\n                for (var n, r = [], i = _(t), o = i.length - 1, a = 0; a <= o; a++)\n                  (n = a === o ? this : this.clone(!0)), _(i[a])[e](n), l.apply(r, n.get());\n                return this.pushStack(r);\n              };\n            }\n          );\n        var Vt = new RegExp(\"^(\" + rt + \")(?!px)[a-z%]+$\", \"i\"),\n          qt = function(t) {\n            var e = t.ownerDocument.defaultView;\n            return (e && e.opener) || (e = n), e.getComputedStyle(t);\n          },\n          Ut = new RegExp(ot.join(\"|\"), \"i\");\n        function Ft(t, e, n) {\n          var r,\n            i,\n            o,\n            a,\n            u = t.style;\n          return (\n            (n = n || qt(t)) &&\n              (\"\" !== (a = n.getPropertyValue(e) || n[e]) ||\n                _.contains(t.ownerDocument, t) ||\n                (a = _.style(t, e)),\n              !m.pixelBoxStyles() &&\n                Vt.test(a) &&\n                Ut.test(e) &&\n                ((r = u.width),\n                (i = u.minWidth),\n                (o = u.maxWidth),\n                (u.minWidth = u.maxWidth = u.width = a),\n                (a = n.width),\n                (u.width = r),\n                (u.minWidth = i),\n                (u.maxWidth = o))),\n            void 0 !== a ? a + \"\" : a\n          );\n        }\n        function Ht(t, e) {\n          return {\n            get: function() {\n              if (!t()) return (this.get = e).apply(this, arguments);\n              delete this.get;\n            }\n          };\n        }\n        !(function() {\n          function t() {\n            if (l) {\n              (c.style.cssText =\n                \"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\"),\n                (l.style.cssText =\n                  \"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\"),\n                bt.appendChild(c).appendChild(l);\n              var t = n.getComputedStyle(l);\n              (r = \"1%\" !== t.top),\n                (s = 12 === e(t.marginLeft)),\n                (l.style.right = \"60%\"),\n                (u = 36 === e(t.right)),\n                (i = 36 === e(t.width)),\n                (l.style.position = \"absolute\"),\n                (o = 36 === l.offsetWidth || \"absolute\"),\n                bt.removeChild(c),\n                (l = null);\n            }\n          }\n          function e(t) {\n            return Math.round(parseFloat(t));\n          }\n          var r,\n            i,\n            o,\n            u,\n            s,\n            c = a.createElement(\"div\"),\n            l = a.createElement(\"div\");\n          l.style &&\n            ((l.style.backgroundClip = \"content-box\"),\n            (l.cloneNode(!0).style.backgroundClip = \"\"),\n            (m.clearCloneStyle = \"content-box\" === l.style.backgroundClip),\n            _.extend(m, {\n              boxSizingReliable: function() {\n                return t(), i;\n              },\n              pixelBoxStyles: function() {\n                return t(), u;\n              },\n              pixelPosition: function() {\n                return t(), r;\n              },\n              reliableMarginLeft: function() {\n                return t(), s;\n              },\n              scrollboxSize: function() {\n                return t(), o;\n              }\n            }));\n        })();\n        var Bt = /^(none|table(?!-c[ea]).+)/,\n          zt = /^--/,\n          Wt = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n          Gt = { letterSpacing: \"0\", fontWeight: \"400\" },\n          Kt = [\"Webkit\", \"Moz\", \"ms\"],\n          Jt = a.createElement(\"div\").style;\n        function Yt(t) {\n          var e = _.cssProps[t];\n          return (\n            e ||\n              (e = _.cssProps[t] =\n                (function(t) {\n                  if (t in Jt) return t;\n                  for (var e = t[0].toUpperCase() + t.slice(1), n = Kt.length; n--; )\n                    if ((t = Kt[n] + e) in Jt) return t;\n                })(t) || t),\n            e\n          );\n        }\n        function Zt(t, e, n) {\n          var r = it.exec(e);\n          return r ? Math.max(0, r[2] - (n || 0)) + (r[3] || \"px\") : e;\n        }\n        function Xt(t, e, n, r, i, o) {\n          var a = \"width\" === e ? 1 : 0,\n            u = 0,\n            s = 0;\n          if (n === (r ? \"border\" : \"content\")) return 0;\n          for (; a < 4; a += 2)\n            \"margin\" === n && (s += _.css(t, n + ot[a], !0, i)),\n              r\n                ? (\"content\" === n && (s -= _.css(t, \"padding\" + ot[a], !0, i)),\n                  \"margin\" !== n && (s -= _.css(t, \"border\" + ot[a] + \"Width\", !0, i)))\n                : ((s += _.css(t, \"padding\" + ot[a], !0, i)),\n                  \"padding\" !== n\n                    ? (s += _.css(t, \"border\" + ot[a] + \"Width\", !0, i))\n                    : (u += _.css(t, \"border\" + ot[a] + \"Width\", !0, i)));\n          return (\n            !r &&\n              o >= 0 &&\n              (s += Math.max(\n                0,\n                Math.ceil(t[\"offset\" + e[0].toUpperCase() + e.slice(1)] - o - s - u - 0.5)\n              )),\n            s\n          );\n        }\n        function Qt(t, e, n) {\n          var r = qt(t),\n            i = Ft(t, e, r),\n            o = \"border-box\" === _.css(t, \"boxSizing\", !1, r),\n            a = o;\n          if (Vt.test(i)) {\n            if (!n) return i;\n            i = \"auto\";\n          }\n          return (\n            (a = a && (m.boxSizingReliable() || i === t.style[e])),\n            (\"auto\" === i || (!parseFloat(i) && \"inline\" === _.css(t, \"display\", !1, r))) &&\n              ((i = t[\"offset\" + e[0].toUpperCase() + e.slice(1)]), (a = !0)),\n            (i = parseFloat(i) || 0) + Xt(t, e, n || (o ? \"border\" : \"content\"), a, r, i) + \"px\"\n          );\n        }\n        function te(t, e, n, r, i) {\n          return new te.prototype.init(t, e, n, r, i);\n        }\n        _.extend({\n          cssHooks: {\n            opacity: {\n              get: function(t, e) {\n                if (e) {\n                  var n = Ft(t, \"opacity\");\n                  return \"\" === n ? \"1\" : n;\n                }\n              }\n            }\n          },\n          cssNumber: {\n            animationIterationCount: !0,\n            columnCount: !0,\n            fillOpacity: !0,\n            flexGrow: !0,\n            flexShrink: !0,\n            fontWeight: !0,\n            lineHeight: !0,\n            opacity: !0,\n            order: !0,\n            orphans: !0,\n            widows: !0,\n            zIndex: !0,\n            zoom: !0\n          },\n          cssProps: {},\n          style: function(t, e, n, r) {\n            if (t && 3 !== t.nodeType && 8 !== t.nodeType && t.style) {\n              var i,\n                o,\n                a,\n                u = J(e),\n                s = zt.test(e),\n                c = t.style;\n              if ((s || (e = Yt(u)), (a = _.cssHooks[e] || _.cssHooks[u]), void 0 === n))\n                return a && \"get\" in a && void 0 !== (i = a.get(t, !1, r)) ? i : c[e];\n              \"string\" === (o = typeof n) &&\n                (i = it.exec(n)) &&\n                i[1] &&\n                ((n = st(t, e, i)), (o = \"number\")),\n                null != n &&\n                  n == n &&\n                  (\"number\" === o && (n += (i && i[3]) || (_.cssNumber[u] ? \"\" : \"px\")),\n                  m.clearCloneStyle ||\n                    \"\" !== n ||\n                    0 !== e.indexOf(\"background\") ||\n                    (c[e] = \"inherit\"),\n                  (a && \"set\" in a && void 0 === (n = a.set(t, n, r))) ||\n                    (s ? c.setProperty(e, n) : (c[e] = n)));\n            }\n          },\n          css: function(t, e, n, r) {\n            var i,\n              o,\n              a,\n              u = J(e);\n            return (\n              zt.test(e) || (e = Yt(u)),\n              (a = _.cssHooks[e] || _.cssHooks[u]) && \"get\" in a && (i = a.get(t, !0, n)),\n              void 0 === i && (i = Ft(t, e, r)),\n              \"normal\" === i && e in Gt && (i = Gt[e]),\n              \"\" === n || n ? ((o = parseFloat(i)), !0 === n || isFinite(o) ? o || 0 : i) : i\n            );\n          }\n        }),\n          _.each([\"height\", \"width\"], function(t, e) {\n            _.cssHooks[e] = {\n              get: function(t, n, r) {\n                if (n)\n                  return !Bt.test(_.css(t, \"display\")) ||\n                    (t.getClientRects().length && t.getBoundingClientRect().width)\n                    ? Qt(t, e, r)\n                    : ut(t, Wt, function() {\n                        return Qt(t, e, r);\n                      });\n              },\n              set: function(t, n, r) {\n                var i,\n                  o = qt(t),\n                  a = \"border-box\" === _.css(t, \"boxSizing\", !1, o),\n                  u = r && Xt(t, e, r, a, o);\n                return (\n                  a &&\n                    m.scrollboxSize() === o.position &&\n                    (u -= Math.ceil(\n                      t[\"offset\" + e[0].toUpperCase() + e.slice(1)] -\n                        parseFloat(o[e]) -\n                        Xt(t, e, \"border\", !1, o) -\n                        0.5\n                    )),\n                  u &&\n                    (i = it.exec(n)) &&\n                    \"px\" !== (i[3] || \"px\") &&\n                    ((t.style[e] = n), (n = _.css(t, e))),\n                  Zt(0, n, u)\n                );\n              }\n            };\n          }),\n          (_.cssHooks.marginLeft = Ht(m.reliableMarginLeft, function(t, e) {\n            if (e)\n              return (\n                (parseFloat(Ft(t, \"marginLeft\")) ||\n                  t.getBoundingClientRect().left -\n                    ut(t, { marginLeft: 0 }, function() {\n                      return t.getBoundingClientRect().left;\n                    })) + \"px\"\n              );\n          })),\n          _.each({ margin: \"\", padding: \"\", border: \"Width\" }, function(t, e) {\n            (_.cssHooks[t + e] = {\n              expand: function(n) {\n                for (var r = 0, i = {}, o = \"string\" == typeof n ? n.split(\" \") : [n]; r < 4; r++)\n                  i[t + ot[r] + e] = o[r] || o[r - 2] || o[0];\n                return i;\n              }\n            }),\n              \"margin\" !== t && (_.cssHooks[t + e].set = Zt);\n          }),\n          _.fn.extend({\n            css: function(t, e) {\n              return z(\n                this,\n                function(t, e, n) {\n                  var r,\n                    i,\n                    o = {},\n                    a = 0;\n                  if (Array.isArray(e)) {\n                    for (r = qt(t), i = e.length; a < i; a++) o[e[a]] = _.css(t, e[a], !1, r);\n                    return o;\n                  }\n                  return void 0 !== n ? _.style(t, e, n) : _.css(t, e);\n                },\n                t,\n                e,\n                arguments.length > 1\n              );\n            }\n          }),\n          (_.Tween = te),\n          (te.prototype = {\n            constructor: te,\n            init: function(t, e, n, r, i, o) {\n              (this.elem = t),\n                (this.prop = n),\n                (this.easing = i || _.easing._default),\n                (this.options = e),\n                (this.start = this.now = this.cur()),\n                (this.end = r),\n                (this.unit = o || (_.cssNumber[n] ? \"\" : \"px\"));\n            },\n            cur: function() {\n              var t = te.propHooks[this.prop];\n              return t && t.get ? t.get(this) : te.propHooks._default.get(this);\n            },\n            run: function(t) {\n              var e,\n                n = te.propHooks[this.prop];\n              return (\n                this.options.duration\n                  ? (this.pos = e = _.easing[this.easing](\n                      t,\n                      this.options.duration * t,\n                      0,\n                      1,\n                      this.options.duration\n                    ))\n                  : (this.pos = e = t),\n                (this.now = (this.end - this.start) * e + this.start),\n                this.options.step && this.options.step.call(this.elem, this.now, this),\n                n && n.set ? n.set(this) : te.propHooks._default.set(this),\n                this\n              );\n            }\n          }),\n          (te.prototype.init.prototype = te.prototype),\n          (te.propHooks = {\n            _default: {\n              get: function(t) {\n                var e;\n                return 1 !== t.elem.nodeType ||\n                  (null != t.elem[t.prop] && null == t.elem.style[t.prop])\n                  ? t.elem[t.prop]\n                  : (e = _.css(t.elem, t.prop, \"\")) && \"auto\" !== e\n                    ? e\n                    : 0;\n              },\n              set: function(t) {\n                _.fx.step[t.prop]\n                  ? _.fx.step[t.prop](t)\n                  : 1 !== t.elem.nodeType ||\n                    (null == t.elem.style[_.cssProps[t.prop]] && !_.cssHooks[t.prop])\n                    ? (t.elem[t.prop] = t.now)\n                    : _.style(t.elem, t.prop, t.now + t.unit);\n              }\n            }\n          }),\n          (te.propHooks.scrollTop = te.propHooks.scrollLeft = {\n            set: function(t) {\n              t.elem.nodeType && t.elem.parentNode && (t.elem[t.prop] = t.now);\n            }\n          }),\n          (_.easing = {\n            linear: function(t) {\n              return t;\n            },\n            swing: function(t) {\n              return 0.5 - Math.cos(t * Math.PI) / 2;\n            },\n            _default: \"swing\"\n          }),\n          (_.fx = te.prototype.init),\n          (_.fx.step = {});\n        var ee,\n          ne,\n          re = /^(?:toggle|show|hide)$/,\n          ie = /queueHooks$/;\n        function oe() {\n          ne &&\n            (!1 === a.hidden && n.requestAnimationFrame\n              ? n.requestAnimationFrame(oe)\n              : n.setTimeout(oe, _.fx.interval),\n            _.fx.tick());\n        }\n        function ae() {\n          return (\n            n.setTimeout(function() {\n              ee = void 0;\n            }),\n            (ee = Date.now())\n          );\n        }\n        function ue(t, e) {\n          var n,\n            r = 0,\n            i = { height: t };\n          for (e = e ? 1 : 0; r < 4; r += 2 - e) i[\"margin\" + (n = ot[r])] = i[\"padding\" + n] = t;\n          return e && (i.opacity = i.width = t), i;\n        }\n        function se(t, e, n) {\n          for (\n            var r, i = (ce.tweeners[e] || []).concat(ce.tweeners[\"*\"]), o = 0, a = i.length;\n            o < a;\n            o++\n          )\n            if ((r = i[o].call(n, e, t))) return r;\n        }\n        function ce(t, e, n) {\n          var r,\n            i,\n            o = 0,\n            a = ce.prefilters.length,\n            u = _.Deferred().always(function() {\n              delete s.elem;\n            }),\n            s = function() {\n              if (i) return !1;\n              for (\n                var e = ee || ae(),\n                  n = Math.max(0, c.startTime + c.duration - e),\n                  r = 1 - (n / c.duration || 0),\n                  o = 0,\n                  a = c.tweens.length;\n                o < a;\n                o++\n              )\n                c.tweens[o].run(r);\n              return (\n                u.notifyWith(t, [c, r, n]),\n                r < 1 && a ? n : (a || u.notifyWith(t, [c, 1, 0]), u.resolveWith(t, [c]), !1)\n              );\n            },\n            c = u.promise({\n              elem: t,\n              props: _.extend({}, e),\n              opts: _.extend(!0, { specialEasing: {}, easing: _.easing._default }, n),\n              originalProperties: e,\n              originalOptions: n,\n              startTime: ee || ae(),\n              duration: n.duration,\n              tweens: [],\n              createTween: function(e, n) {\n                var r = _.Tween(t, c.opts, e, n, c.opts.specialEasing[e] || c.opts.easing);\n                return c.tweens.push(r), r;\n              },\n              stop: function(e) {\n                var n = 0,\n                  r = e ? c.tweens.length : 0;\n                if (i) return this;\n                for (i = !0; n < r; n++) c.tweens[n].run(1);\n                return (\n                  e\n                    ? (u.notifyWith(t, [c, 1, 0]), u.resolveWith(t, [c, e]))\n                    : u.rejectWith(t, [c, e]),\n                  this\n                );\n              }\n            }),\n            l = c.props;\n          for (\n            !(function(t, e) {\n              var n, r, i, o, a;\n              for (n in t)\n                if (\n                  ((i = e[(r = J(n))]),\n                  (o = t[n]),\n                  Array.isArray(o) && ((i = o[1]), (o = t[n] = o[0])),\n                  n !== r && ((t[r] = o), delete t[n]),\n                  (a = _.cssHooks[r]) && (\"expand\" in a))\n                )\n                  for (n in ((o = a.expand(o)), delete t[r], o))\n                    (n in t) || ((t[n] = o[n]), (e[n] = i));\n                else e[r] = i;\n            })(l, c.opts.specialEasing);\n            o < a;\n            o++\n          )\n            if ((r = ce.prefilters[o].call(c, t, l, c.opts)))\n              return $(r.stop) && (_._queueHooks(c.elem, c.opts.queue).stop = r.stop.bind(r)), r;\n          return (\n            _.map(l, se, c),\n            $(c.opts.start) && c.opts.start.call(t, c),\n            c\n              .progress(c.opts.progress)\n              .done(c.opts.done, c.opts.complete)\n              .fail(c.opts.fail)\n              .always(c.opts.always),\n            _.fx.timer(_.extend(s, { elem: t, anim: c, queue: c.opts.queue })),\n            c\n          );\n        }\n        (_.Animation = _.extend(ce, {\n          tweeners: {\n            \"*\": [\n              function(t, e) {\n                var n = this.createTween(t, e);\n                return st(n.elem, t, it.exec(e), n), n;\n              }\n            ]\n          },\n          tweener: function(t, e) {\n            $(t) ? ((e = t), (t = [\"*\"])) : (t = t.match(P));\n            for (var n, r = 0, i = t.length; r < i; r++)\n              (n = t[r]), (ce.tweeners[n] = ce.tweeners[n] || []), ce.tweeners[n].unshift(e);\n          },\n          prefilters: [\n            function(t, e, n) {\n              var r,\n                i,\n                o,\n                a,\n                u,\n                s,\n                c,\n                l,\n                f = \"width\" in e || \"height\" in e,\n                p = this,\n                h = {},\n                d = t.style,\n                v = t.nodeType && at(t),\n                g = X.get(t, \"fxshow\");\n              for (r in (n.queue ||\n                (null == (a = _._queueHooks(t, \"fx\")).unqueued &&\n                  ((a.unqueued = 0),\n                  (u = a.empty.fire),\n                  (a.empty.fire = function() {\n                    a.unqueued || u();\n                  })),\n                a.unqueued++,\n                p.always(function() {\n                  p.always(function() {\n                    a.unqueued--, _.queue(t, \"fx\").length || a.empty.fire();\n                  });\n                })),\n              e))\n                if (((i = e[r]), re.test(i))) {\n                  if ((delete e[r], (o = o || \"toggle\" === i), i === (v ? \"hide\" : \"show\"))) {\n                    if (\"show\" !== i || !g || void 0 === g[r]) continue;\n                    v = !0;\n                  }\n                  h[r] = (g && g[r]) || _.style(t, r);\n                }\n              if ((s = !_.isEmptyObject(e)) || !_.isEmptyObject(h))\n                for (r in (f &&\n                  1 === t.nodeType &&\n                  ((n.overflow = [d.overflow, d.overflowX, d.overflowY]),\n                  null == (c = g && g.display) && (c = X.get(t, \"display\")),\n                  \"none\" === (l = _.css(t, \"display\")) &&\n                    (c\n                      ? (l = c)\n                      : (ft([t], !0),\n                        (c = t.style.display || c),\n                        (l = _.css(t, \"display\")),\n                        ft([t]))),\n                  (\"inline\" === l || (\"inline-block\" === l && null != c)) &&\n                    \"none\" === _.css(t, \"float\") &&\n                    (s ||\n                      (p.done(function() {\n                        d.display = c;\n                      }),\n                      null == c && ((l = d.display), (c = \"none\" === l ? \"\" : l))),\n                    (d.display = \"inline-block\"))),\n                n.overflow &&\n                  ((d.overflow = \"hidden\"),\n                  p.always(function() {\n                    (d.overflow = n.overflow[0]),\n                      (d.overflowX = n.overflow[1]),\n                      (d.overflowY = n.overflow[2]);\n                  })),\n                (s = !1),\n                h))\n                  s ||\n                    (g\n                      ? \"hidden\" in g && (v = g.hidden)\n                      : (g = X.access(t, \"fxshow\", { display: c })),\n                    o && (g.hidden = !v),\n                    v && ft([t], !0),\n                    p.done(function() {\n                      for (r in (v || ft([t]), X.remove(t, \"fxshow\"), h)) _.style(t, r, h[r]);\n                    })),\n                    (s = se(v ? g[r] : 0, r, p)),\n                    r in g || ((g[r] = s.start), v && ((s.end = s.start), (s.start = 0)));\n            }\n          ],\n          prefilter: function(t, e) {\n            e ? ce.prefilters.unshift(t) : ce.prefilters.push(t);\n          }\n        })),\n          (_.speed = function(t, e, n) {\n            var r =\n              t && \"object\" == typeof t\n                ? _.extend({}, t)\n                : {\n                    complete: n || (!n && e) || ($(t) && t),\n                    duration: t,\n                    easing: (n && e) || (e && !$(e) && e)\n                  };\n            return (\n              _.fx.off\n                ? (r.duration = 0)\n                : \"number\" != typeof r.duration &&\n                  (r.duration in _.fx.speeds\n                    ? (r.duration = _.fx.speeds[r.duration])\n                    : (r.duration = _.fx.speeds._default)),\n              (null != r.queue && !0 !== r.queue) || (r.queue = \"fx\"),\n              (r.old = r.complete),\n              (r.complete = function() {\n                $(r.old) && r.old.call(this), r.queue && _.dequeue(this, r.queue);\n              }),\n              r\n            );\n          }),\n          _.fn.extend({\n            fadeTo: function(t, e, n, r) {\n              return this.filter(at)\n                .css(\"opacity\", 0)\n                .show()\n                .end()\n                .animate({ opacity: e }, t, n, r);\n            },\n            animate: function(t, e, n, r) {\n              var i = _.isEmptyObject(t),\n                o = _.speed(e, n, r),\n                a = function() {\n                  var e = ce(this, _.extend({}, t), o);\n                  (i || X.get(this, \"finish\")) && e.stop(!0);\n                };\n              return (a.finish = a), i || !1 === o.queue ? this.each(a) : this.queue(o.queue, a);\n            },\n            stop: function(t, e, n) {\n              var r = function(t) {\n                var e = t.stop;\n                delete t.stop, e(n);\n              };\n              return (\n                \"string\" != typeof t && ((n = e), (e = t), (t = void 0)),\n                e && !1 !== t && this.queue(t || \"fx\", []),\n                this.each(function() {\n                  var e = !0,\n                    i = null != t && t + \"queueHooks\",\n                    o = _.timers,\n                    a = X.get(this);\n                  if (i) a[i] && a[i].stop && r(a[i]);\n                  else for (i in a) a[i] && a[i].stop && ie.test(i) && r(a[i]);\n                  for (i = o.length; i--; )\n                    o[i].elem !== this ||\n                      (null != t && o[i].queue !== t) ||\n                      (o[i].anim.stop(n), (e = !1), o.splice(i, 1));\n                  (!e && n) || _.dequeue(this, t);\n                })\n              );\n            },\n            finish: function(t) {\n              return (\n                !1 !== t && (t = t || \"fx\"),\n                this.each(function() {\n                  var e,\n                    n = X.get(this),\n                    r = n[t + \"queue\"],\n                    i = n[t + \"queueHooks\"],\n                    o = _.timers,\n                    a = r ? r.length : 0;\n                  for (\n                    n.finish = !0,\n                      _.queue(this, t, []),\n                      i && i.stop && i.stop.call(this, !0),\n                      e = o.length;\n                    e--;\n\n                  )\n                    o[e].elem === this && o[e].queue === t && (o[e].anim.stop(!0), o.splice(e, 1));\n                  for (e = 0; e < a; e++) r[e] && r[e].finish && r[e].finish.call(this);\n                  delete n.finish;\n                })\n              );\n            }\n          }),\n          _.each([\"toggle\", \"show\", \"hide\"], function(t, e) {\n            var n = _.fn[e];\n            _.fn[e] = function(t, r, i) {\n              return null == t || \"boolean\" == typeof t\n                ? n.apply(this, arguments)\n                : this.animate(ue(e, !0), t, r, i);\n            };\n          }),\n          _.each(\n            {\n              slideDown: ue(\"show\"),\n              slideUp: ue(\"hide\"),\n              slideToggle: ue(\"toggle\"),\n              fadeIn: { opacity: \"show\" },\n              fadeOut: { opacity: \"hide\" },\n              fadeToggle: { opacity: \"toggle\" }\n            },\n            function(t, e) {\n              _.fn[t] = function(t, n, r) {\n                return this.animate(e, t, n, r);\n              };\n            }\n          ),\n          (_.timers = []),\n          (_.fx.tick = function() {\n            var t,\n              e = 0,\n              n = _.timers;\n            for (ee = Date.now(); e < n.length; e++) (t = n[e])() || n[e] !== t || n.splice(e--, 1);\n            n.length || _.fx.stop(), (ee = void 0);\n          }),\n          (_.fx.timer = function(t) {\n            _.timers.push(t), _.fx.start();\n          }),\n          (_.fx.interval = 13),\n          (_.fx.start = function() {\n            ne || ((ne = !0), oe());\n          }),\n          (_.fx.stop = function() {\n            ne = null;\n          }),\n          (_.fx.speeds = { slow: 600, fast: 200, _default: 400 }),\n          (_.fn.delay = function(t, e) {\n            return (\n              (t = (_.fx && _.fx.speeds[t]) || t),\n              (e = e || \"fx\"),\n              this.queue(e, function(e, r) {\n                var i = n.setTimeout(e, t);\n                r.stop = function() {\n                  n.clearTimeout(i);\n                };\n              })\n            );\n          }),\n          (function() {\n            var t = a.createElement(\"input\"),\n              e = a.createElement(\"select\").appendChild(a.createElement(\"option\"));\n            (t.type = \"checkbox\"),\n              (m.checkOn = \"\" !== t.value),\n              (m.optSelected = e.selected),\n              ((t = a.createElement(\"input\")).value = \"t\"),\n              (t.type = \"radio\"),\n              (m.radioValue = \"t\" === t.value);\n          })();\n        var le,\n          fe = _.expr.attrHandle;\n        _.fn.extend({\n          attr: function(t, e) {\n            return z(this, _.attr, t, e, arguments.length > 1);\n          },\n          removeAttr: function(t) {\n            return this.each(function() {\n              _.removeAttr(this, t);\n            });\n          }\n        }),\n          _.extend({\n            attr: function(t, e, n) {\n              var r,\n                i,\n                o = t.nodeType;\n              if (3 !== o && 8 !== o && 2 !== o)\n                return void 0 === t.getAttribute\n                  ? _.prop(t, e, n)\n                  : ((1 === o && _.isXMLDoc(t)) ||\n                      (i =\n                        _.attrHooks[e.toLowerCase()] || (_.expr.match.bool.test(e) ? le : void 0)),\n                    void 0 !== n\n                      ? null === n\n                        ? void _.removeAttr(t, e)\n                        : i && \"set\" in i && void 0 !== (r = i.set(t, n, e))\n                          ? r\n                          : (t.setAttribute(e, n + \"\"), n)\n                      : i && \"get\" in i && null !== (r = i.get(t, e))\n                        ? r\n                        : null == (r = _.find.attr(t, e))\n                          ? void 0\n                          : r);\n            },\n            attrHooks: {\n              type: {\n                set: function(t, e) {\n                  if (!m.radioValue && \"radio\" === e && O(t, \"input\")) {\n                    var n = t.value;\n                    return t.setAttribute(\"type\", e), n && (t.value = n), e;\n                  }\n                }\n              }\n            },\n            removeAttr: function(t, e) {\n              var n,\n                r = 0,\n                i = e && e.match(P);\n              if (i && 1 === t.nodeType) for (; (n = i[r++]); ) t.removeAttribute(n);\n            }\n          }),\n          (le = {\n            set: function(t, e, n) {\n              return !1 === e ? _.removeAttr(t, n) : t.setAttribute(n, n), n;\n            }\n          }),\n          _.each(_.expr.match.bool.source.match(/\\w+/g), function(t, e) {\n            var n = fe[e] || _.find.attr;\n            fe[e] = function(t, e, r) {\n              var i,\n                o,\n                a = e.toLowerCase();\n              return (\n                r || ((o = fe[a]), (fe[a] = i), (i = null != n(t, e, r) ? a : null), (fe[a] = o)), i\n              );\n            };\n          });\n        var pe = /^(?:input|select|textarea|button)$/i,\n          he = /^(?:a|area)$/i;\n        function de(t) {\n          return (t.match(P) || []).join(\" \");\n        }\n        function ve(t) {\n          return (t.getAttribute && t.getAttribute(\"class\")) || \"\";\n        }\n        function ge(t) {\n          return Array.isArray(t) ? t : (\"string\" == typeof t && t.match(P)) || [];\n        }\n        _.fn.extend({\n          prop: function(t, e) {\n            return z(this, _.prop, t, e, arguments.length > 1);\n          },\n          removeProp: function(t) {\n            return this.each(function() {\n              delete this[_.propFix[t] || t];\n            });\n          }\n        }),\n          _.extend({\n            prop: function(t, e, n) {\n              var r,\n                i,\n                o = t.nodeType;\n              if (3 !== o && 8 !== o && 2 !== o)\n                return (\n                  (1 === o && _.isXMLDoc(t)) || ((e = _.propFix[e] || e), (i = _.propHooks[e])),\n                  void 0 !== n\n                    ? i && \"set\" in i && void 0 !== (r = i.set(t, n, e))\n                      ? r\n                      : (t[e] = n)\n                    : i && \"get\" in i && null !== (r = i.get(t, e))\n                      ? r\n                      : t[e]\n                );\n            },\n            propHooks: {\n              tabIndex: {\n                get: function(t) {\n                  var e = _.find.attr(t, \"tabindex\");\n                  return e\n                    ? parseInt(e, 10)\n                    : pe.test(t.nodeName) || (he.test(t.nodeName) && t.href)\n                      ? 0\n                      : -1;\n                }\n              }\n            },\n            propFix: { for: \"htmlFor\", class: \"className\" }\n          }),\n          m.optSelected ||\n            (_.propHooks.selected = {\n              get: function(t) {\n                var e = t.parentNode;\n                return e && e.parentNode && e.parentNode.selectedIndex, null;\n              },\n              set: function(t) {\n                var e = t.parentNode;\n                e && (e.selectedIndex, e.parentNode && e.parentNode.selectedIndex);\n              }\n            }),\n          _.each(\n            [\n              \"tabIndex\",\n              \"readOnly\",\n              \"maxLength\",\n              \"cellSpacing\",\n              \"cellPadding\",\n              \"rowSpan\",\n              \"colSpan\",\n              \"useMap\",\n              \"frameBorder\",\n              \"contentEditable\"\n            ],\n            function() {\n              _.propFix[this.toLowerCase()] = this;\n            }\n          ),\n          _.fn.extend({\n            addClass: function(t) {\n              var e,\n                n,\n                r,\n                i,\n                o,\n                a,\n                u,\n                s = 0;\n              if ($(t))\n                return this.each(function(e) {\n                  _(this).addClass(t.call(this, e, ve(this)));\n                });\n              if ((e = ge(t)).length)\n                for (; (n = this[s++]); )\n                  if (((i = ve(n)), (r = 1 === n.nodeType && \" \" + de(i) + \" \"))) {\n                    for (a = 0; (o = e[a++]); ) r.indexOf(\" \" + o + \" \") < 0 && (r += o + \" \");\n                    i !== (u = de(r)) && n.setAttribute(\"class\", u);\n                  }\n              return this;\n            },\n            removeClass: function(t) {\n              var e,\n                n,\n                r,\n                i,\n                o,\n                a,\n                u,\n                s = 0;\n              if ($(t))\n                return this.each(function(e) {\n                  _(this).removeClass(t.call(this, e, ve(this)));\n                });\n              if (!arguments.length) return this.attr(\"class\", \"\");\n              if ((e = ge(t)).length)\n                for (; (n = this[s++]); )\n                  if (((i = ve(n)), (r = 1 === n.nodeType && \" \" + de(i) + \" \"))) {\n                    for (a = 0; (o = e[a++]); )\n                      for (; r.indexOf(\" \" + o + \" \") > -1; ) r = r.replace(\" \" + o + \" \", \" \");\n                    i !== (u = de(r)) && n.setAttribute(\"class\", u);\n                  }\n              return this;\n            },\n            toggleClass: function(t, e) {\n              var n = typeof t,\n                r = \"string\" === n || Array.isArray(t);\n              return \"boolean\" == typeof e && r\n                ? e\n                  ? this.addClass(t)\n                  : this.removeClass(t)\n                : $(t)\n                  ? this.each(function(n) {\n                      _(this).toggleClass(t.call(this, n, ve(this), e), e);\n                    })\n                  : this.each(function() {\n                      var e, i, o, a;\n                      if (r)\n                        for (i = 0, o = _(this), a = ge(t); (e = a[i++]); )\n                          o.hasClass(e) ? o.removeClass(e) : o.addClass(e);\n                      else\n                        (void 0 !== t && \"boolean\" !== n) ||\n                          ((e = ve(this)) && X.set(this, \"__className__\", e),\n                          this.setAttribute &&\n                            this.setAttribute(\n                              \"class\",\n                              e || !1 === t ? \"\" : X.get(this, \"__className__\") || \"\"\n                            ));\n                    });\n            },\n            hasClass: function(t) {\n              var e,\n                n,\n                r = 0;\n              for (e = \" \" + t + \" \"; (n = this[r++]); )\n                if (1 === n.nodeType && (\" \" + de(ve(n)) + \" \").indexOf(e) > -1) return !0;\n              return !1;\n            }\n          });\n        var me = /\\r/g;\n        _.fn.extend({\n          val: function(t) {\n            var e,\n              n,\n              r,\n              i = this[0];\n            return arguments.length\n              ? ((r = $(t)),\n                this.each(function(n) {\n                  var i;\n                  1 === this.nodeType &&\n                    (null == (i = r ? t.call(this, n, _(this).val()) : t)\n                      ? (i = \"\")\n                      : \"number\" == typeof i\n                        ? (i += \"\")\n                        : Array.isArray(i) &&\n                          (i = _.map(i, function(t) {\n                            return null == t ? \"\" : t + \"\";\n                          })),\n                    ((e = _.valHooks[this.type] || _.valHooks[this.nodeName.toLowerCase()]) &&\n                      \"set\" in e &&\n                      void 0 !== e.set(this, i, \"value\")) ||\n                      (this.value = i));\n                }))\n              : i\n                ? (e = _.valHooks[i.type] || _.valHooks[i.nodeName.toLowerCase()]) &&\n                  \"get\" in e &&\n                  void 0 !== (n = e.get(i, \"value\"))\n                  ? n\n                  : \"string\" == typeof (n = i.value)\n                    ? n.replace(me, \"\")\n                    : null == n\n                      ? \"\"\n                      : n\n                : void 0;\n          }\n        }),\n          _.extend({\n            valHooks: {\n              option: {\n                get: function(t) {\n                  var e = _.find.attr(t, \"value\");\n                  return null != e ? e : de(_.text(t));\n                }\n              },\n              select: {\n                get: function(t) {\n                  var e,\n                    n,\n                    r,\n                    i = t.options,\n                    o = t.selectedIndex,\n                    a = \"select-one\" === t.type,\n                    u = a ? null : [],\n                    s = a ? o + 1 : i.length;\n                  for (r = o < 0 ? s : a ? o : 0; r < s; r++)\n                    if (\n                      ((n = i[r]).selected || r === o) &&\n                      !n.disabled &&\n                      (!n.parentNode.disabled || !O(n.parentNode, \"optgroup\"))\n                    ) {\n                      if (((e = _(n).val()), a)) return e;\n                      u.push(e);\n                    }\n                  return u;\n                },\n                set: function(t, e) {\n                  for (var n, r, i = t.options, o = _.makeArray(e), a = i.length; a--; )\n                    ((r = i[a]).selected = _.inArray(_.valHooks.option.get(r), o) > -1) && (n = !0);\n                  return n || (t.selectedIndex = -1), o;\n                }\n              }\n            }\n          }),\n          _.each([\"radio\", \"checkbox\"], function() {\n            (_.valHooks[this] = {\n              set: function(t, e) {\n                if (Array.isArray(e)) return (t.checked = _.inArray(_(t).val(), e) > -1);\n              }\n            }),\n              m.checkOn ||\n                (_.valHooks[this].get = function(t) {\n                  return null === t.getAttribute(\"value\") ? \"on\" : t.value;\n                });\n          }),\n          (m.focusin = \"onfocusin\" in n);\n        var $e = /^(?:focusinfocus|focusoutblur)$/,\n          ye = function(t) {\n            t.stopPropagation();\n          };\n        _.extend(_.event, {\n          trigger: function(t, e, r, i) {\n            var o,\n              u,\n              s,\n              c,\n              l,\n              f,\n              p,\n              h,\n              v = [r || a],\n              g = d.call(t, \"type\") ? t.type : t,\n              m = d.call(t, \"namespace\") ? t.namespace.split(\".\") : [];\n            if (\n              ((u = h = s = r = r || a),\n              3 !== r.nodeType &&\n                8 !== r.nodeType &&\n                !$e.test(g + _.event.triggered) &&\n                (g.indexOf(\".\") > -1 && ((g = (m = g.split(\".\")).shift()), m.sort()),\n                (l = g.indexOf(\":\") < 0 && \"on\" + g),\n                ((t = t[_.expando] ? t : new _.Event(g, \"object\" == typeof t && t)).isTrigger = i\n                  ? 2\n                  : 3),\n                (t.namespace = m.join(\".\")),\n                (t.rnamespace = t.namespace\n                  ? new RegExp(\"(^|\\\\.)\" + m.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\")\n                  : null),\n                (t.result = void 0),\n                t.target || (t.target = r),\n                (e = null == e ? [t] : _.makeArray(e, [t])),\n                (p = _.event.special[g] || {}),\n                i || !p.trigger || !1 !== p.trigger.apply(r, e)))\n            ) {\n              if (!i && !p.noBubble && !y(r)) {\n                for (\n                  c = p.delegateType || g, $e.test(c + g) || (u = u.parentNode);\n                  u;\n                  u = u.parentNode\n                )\n                  v.push(u), (s = u);\n                s === (r.ownerDocument || a) && v.push(s.defaultView || s.parentWindow || n);\n              }\n              for (o = 0; (u = v[o++]) && !t.isPropagationStopped(); )\n                (h = u),\n                  (t.type = o > 1 ? c : p.bindType || g),\n                  (f = (X.get(u, \"events\") || {})[t.type] && X.get(u, \"handle\")) && f.apply(u, e),\n                  (f = l && u[l]) &&\n                    f.apply &&\n                    Y(u) &&\n                    ((t.result = f.apply(u, e)), !1 === t.result && t.preventDefault());\n              return (\n                (t.type = g),\n                i ||\n                  t.isDefaultPrevented() ||\n                  (p._default && !1 !== p._default.apply(v.pop(), e)) ||\n                  !Y(r) ||\n                  (l &&\n                    $(r[g]) &&\n                    !y(r) &&\n                    ((s = r[l]) && (r[l] = null),\n                    (_.event.triggered = g),\n                    t.isPropagationStopped() && h.addEventListener(g, ye),\n                    r[g](),\n                    t.isPropagationStopped() && h.removeEventListener(g, ye),\n                    (_.event.triggered = void 0),\n                    s && (r[l] = s))),\n                t.result\n              );\n            }\n          },\n          simulate: function(t, e, n) {\n            var r = _.extend(new _.Event(), n, { type: t, isSimulated: !0 });\n            _.event.trigger(r, null, e);\n          }\n        }),\n          _.fn.extend({\n            trigger: function(t, e) {\n              return this.each(function() {\n                _.event.trigger(t, e, this);\n              });\n            },\n            triggerHandler: function(t, e) {\n              var n = this[0];\n              if (n) return _.event.trigger(t, e, n, !0);\n            }\n          }),\n          m.focusin ||\n            _.each({ focus: \"focusin\", blur: \"focusout\" }, function(t, e) {\n              var n = function(t) {\n                _.event.simulate(e, t.target, _.event.fix(t));\n              };\n              _.event.special[e] = {\n                setup: function() {\n                  var r = this.ownerDocument || this,\n                    i = X.access(r, e);\n                  i || r.addEventListener(t, n, !0), X.access(r, e, (i || 0) + 1);\n                },\n                teardown: function() {\n                  var r = this.ownerDocument || this,\n                    i = X.access(r, e) - 1;\n                  i ? X.access(r, e, i) : (r.removeEventListener(t, n, !0), X.remove(r, e));\n                }\n              };\n            });\n        var be = n.location,\n          we = Date.now(),\n          xe = /\\?/;\n        _.parseXML = function(t) {\n          var e;\n          if (!t || \"string\" != typeof t) return null;\n          try {\n            e = new n.DOMParser().parseFromString(t, \"text/xml\");\n          } catch (t) {\n            e = void 0;\n          }\n          return (\n            (e && !e.getElementsByTagName(\"parsererror\").length) || _.error(\"Invalid XML: \" + t), e\n          );\n        };\n        var _e = /\\[\\]$/,\n          Ce = /\\r?\\n/g,\n          Se = /^(?:submit|button|image|reset|file)$/i,\n          Ee = /^(?:input|select|textarea|keygen)/i;\n        function ke(t, e, n, r) {\n          var i;\n          if (Array.isArray(e))\n            _.each(e, function(e, i) {\n              n || _e.test(t)\n                ? r(t, i)\n                : ke(t + \"[\" + (\"object\" == typeof i && null != i ? e : \"\") + \"]\", i, n, r);\n            });\n          else if (n || \"object\" !== x(e)) r(t, e);\n          else for (i in e) ke(t + \"[\" + i + \"]\", e[i], n, r);\n        }\n        (_.param = function(t, e) {\n          var n,\n            r = [],\n            i = function(t, e) {\n              var n = $(e) ? e() : e;\n              r[r.length] = encodeURIComponent(t) + \"=\" + encodeURIComponent(null == n ? \"\" : n);\n            };\n          if (Array.isArray(t) || (t.jquery && !_.isPlainObject(t)))\n            _.each(t, function() {\n              i(this.name, this.value);\n            });\n          else for (n in t) ke(n, t[n], e, i);\n          return r.join(\"&\");\n        }),\n          _.fn.extend({\n            serialize: function() {\n              return _.param(this.serializeArray());\n            },\n            serializeArray: function() {\n              return this.map(function() {\n                var t = _.prop(this, \"elements\");\n                return t ? _.makeArray(t) : this;\n              })\n                .filter(function() {\n                  var t = this.type;\n                  return (\n                    this.name &&\n                    !_(this).is(\":disabled\") &&\n                    Ee.test(this.nodeName) &&\n                    !Se.test(t) &&\n                    (this.checked || !pt.test(t))\n                  );\n                })\n                .map(function(t, e) {\n                  var n = _(this).val();\n                  return null == n\n                    ? null\n                    : Array.isArray(n)\n                      ? _.map(n, function(t) {\n                          return { name: e.name, value: t.replace(Ce, \"\\r\\n\") };\n                        })\n                      : { name: e.name, value: n.replace(Ce, \"\\r\\n\") };\n                })\n                .get();\n            }\n          });\n        var Ae = /%20/g,\n          Te = /#.*$/,\n          Oe = /([?&])_=[^&]*/,\n          je = /^(.*?):[ \\t]*([^\\r\\n]*)$/gm,\n          Ne = /^(?:GET|HEAD)$/,\n          Me = /^\\/\\//,\n          Le = {},\n          De = {},\n          Ie = \"*/\".concat(\"*\"),\n          Re = a.createElement(\"a\");\n        function Pe(t) {\n          return function(e, n) {\n            \"string\" != typeof e && ((n = e), (e = \"*\"));\n            var r,\n              i = 0,\n              o = e.toLowerCase().match(P) || [];\n            if ($(n))\n              for (; (r = o[i++]); )\n                \"+\" === r[0]\n                  ? ((r = r.slice(1) || \"*\"), (t[r] = t[r] || []).unshift(n))\n                  : (t[r] = t[r] || []).push(n);\n          };\n        }\n        function Ve(t, e, n, r) {\n          var i = {},\n            o = t === De;\n          function a(u) {\n            var s;\n            return (\n              (i[u] = !0),\n              _.each(t[u] || [], function(t, u) {\n                var c = u(e, n, r);\n                return \"string\" != typeof c || o || i[c]\n                  ? o\n                    ? !(s = c)\n                    : void 0\n                  : (e.dataTypes.unshift(c), a(c), !1);\n              }),\n              s\n            );\n          }\n          return a(e.dataTypes[0]) || (!i[\"*\"] && a(\"*\"));\n        }\n        function qe(t, e) {\n          var n,\n            r,\n            i = _.ajaxSettings.flatOptions || {};\n          for (n in e) void 0 !== e[n] && ((i[n] ? t : r || (r = {}))[n] = e[n]);\n          return r && _.extend(!0, t, r), t;\n        }\n        (Re.href = be.href),\n          _.extend({\n            active: 0,\n            lastModified: {},\n            etag: {},\n            ajaxSettings: {\n              url: be.href,\n              type: \"GET\",\n              isLocal: /^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(\n                be.protocol\n              ),\n              global: !0,\n              processData: !0,\n              async: !0,\n              contentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n              accepts: {\n                \"*\": Ie,\n                text: \"text/plain\",\n                html: \"text/html\",\n                xml: \"application/xml, text/xml\",\n                json: \"application/json, text/javascript\"\n              },\n              contents: { xml: /\\bxml\\b/, html: /\\bhtml/, json: /\\bjson\\b/ },\n              responseFields: { xml: \"responseXML\", text: \"responseText\", json: \"responseJSON\" },\n              converters: {\n                \"* text\": String,\n                \"text html\": !0,\n                \"text json\": JSON.parse,\n                \"text xml\": _.parseXML\n              },\n              flatOptions: { url: !0, context: !0 }\n            },\n            ajaxSetup: function(t, e) {\n              return e ? qe(qe(t, _.ajaxSettings), e) : qe(_.ajaxSettings, t);\n            },\n            ajaxPrefilter: Pe(Le),\n            ajaxTransport: Pe(De),\n            ajax: function(t, e) {\n              \"object\" == typeof t && ((e = t), (t = void 0)), (e = e || {});\n              var r,\n                i,\n                o,\n                u,\n                s,\n                c,\n                l,\n                f,\n                p,\n                h,\n                d = _.ajaxSetup({}, e),\n                v = d.context || d,\n                g = d.context && (v.nodeType || v.jquery) ? _(v) : _.event,\n                m = _.Deferred(),\n                $ = _.Callbacks(\"once memory\"),\n                y = d.statusCode || {},\n                b = {},\n                w = {},\n                x = \"canceled\",\n                C = {\n                  readyState: 0,\n                  getResponseHeader: function(t) {\n                    var e;\n                    if (l) {\n                      if (!u) for (u = {}; (e = je.exec(o)); ) u[e[1].toLowerCase()] = e[2];\n                      e = u[t.toLowerCase()];\n                    }\n                    return null == e ? null : e;\n                  },\n                  getAllResponseHeaders: function() {\n                    return l ? o : null;\n                  },\n                  setRequestHeader: function(t, e) {\n                    return (\n                      null == l && ((t = w[t.toLowerCase()] = w[t.toLowerCase()] || t), (b[t] = e)),\n                      this\n                    );\n                  },\n                  overrideMimeType: function(t) {\n                    return null == l && (d.mimeType = t), this;\n                  },\n                  statusCode: function(t) {\n                    var e;\n                    if (t)\n                      if (l) C.always(t[C.status]);\n                      else for (e in t) y[e] = [y[e], t[e]];\n                    return this;\n                  },\n                  abort: function(t) {\n                    var e = t || x;\n                    return r && r.abort(e), S(0, e), this;\n                  }\n                };\n              if (\n                (m.promise(C),\n                (d.url = ((t || d.url || be.href) + \"\").replace(Me, be.protocol + \"//\")),\n                (d.type = e.method || e.type || d.method || d.type),\n                (d.dataTypes = (d.dataType || \"*\").toLowerCase().match(P) || [\"\"]),\n                null == d.crossDomain)\n              ) {\n                c = a.createElement(\"a\");\n                try {\n                  (c.href = d.url),\n                    (c.href = c.href),\n                    (d.crossDomain = Re.protocol + \"//\" + Re.host != c.protocol + \"//\" + c.host);\n                } catch (t) {\n                  d.crossDomain = !0;\n                }\n              }\n              if (\n                (d.data &&\n                  d.processData &&\n                  \"string\" != typeof d.data &&\n                  (d.data = _.param(d.data, d.traditional)),\n                Ve(Le, d, e, C),\n                l)\n              )\n                return C;\n              for (p in ((f = _.event && d.global) &&\n                0 == _.active++ &&\n                _.event.trigger(\"ajaxStart\"),\n              (d.type = d.type.toUpperCase()),\n              (d.hasContent = !Ne.test(d.type)),\n              (i = d.url.replace(Te, \"\")),\n              d.hasContent\n                ? d.data &&\n                  d.processData &&\n                  0 === (d.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") &&\n                  (d.data = d.data.replace(Ae, \"+\"))\n                : ((h = d.url.slice(i.length)),\n                  d.data &&\n                    (d.processData || \"string\" == typeof d.data) &&\n                    ((i += (xe.test(i) ? \"&\" : \"?\") + d.data), delete d.data),\n                  !1 === d.cache &&\n                    ((i = i.replace(Oe, \"$1\")), (h = (xe.test(i) ? \"&\" : \"?\") + \"_=\" + we++ + h)),\n                  (d.url = i + h)),\n              d.ifModified &&\n                (_.lastModified[i] && C.setRequestHeader(\"If-Modified-Since\", _.lastModified[i]),\n                _.etag[i] && C.setRequestHeader(\"If-None-Match\", _.etag[i])),\n              ((d.data && d.hasContent && !1 !== d.contentType) || e.contentType) &&\n                C.setRequestHeader(\"Content-Type\", d.contentType),\n              C.setRequestHeader(\n                \"Accept\",\n                d.dataTypes[0] && d.accepts[d.dataTypes[0]]\n                  ? d.accepts[d.dataTypes[0]] +\n                    (\"*\" !== d.dataTypes[0] ? \", \" + Ie + \"; q=0.01\" : \"\")\n                  : d.accepts[\"*\"]\n              ),\n              d.headers))\n                C.setRequestHeader(p, d.headers[p]);\n              if (d.beforeSend && (!1 === d.beforeSend.call(v, C, d) || l)) return C.abort();\n              if (\n                ((x = \"abort\"),\n                $.add(d.complete),\n                C.done(d.success),\n                C.fail(d.error),\n                (r = Ve(De, d, e, C)))\n              ) {\n                if (((C.readyState = 1), f && g.trigger(\"ajaxSend\", [C, d]), l)) return C;\n                d.async &&\n                  d.timeout > 0 &&\n                  (s = n.setTimeout(function() {\n                    C.abort(\"timeout\");\n                  }, d.timeout));\n                try {\n                  (l = !1), r.send(b, S);\n                } catch (t) {\n                  if (l) throw t;\n                  S(-1, t);\n                }\n              } else S(-1, \"No Transport\");\n              function S(t, e, a, u) {\n                var c,\n                  p,\n                  h,\n                  b,\n                  w,\n                  x = e;\n                l ||\n                  ((l = !0),\n                  s && n.clearTimeout(s),\n                  (r = void 0),\n                  (o = u || \"\"),\n                  (C.readyState = t > 0 ? 4 : 0),\n                  (c = (t >= 200 && t < 300) || 304 === t),\n                  a &&\n                    (b = (function(t, e, n) {\n                      for (var r, i, o, a, u = t.contents, s = t.dataTypes; \"*\" === s[0]; )\n                        s.shift(),\n                          void 0 === r && (r = t.mimeType || e.getResponseHeader(\"Content-Type\"));\n                      if (r)\n                        for (i in u)\n                          if (u[i] && u[i].test(r)) {\n                            s.unshift(i);\n                            break;\n                          }\n                      if (s[0] in n) o = s[0];\n                      else {\n                        for (i in n) {\n                          if (!s[0] || t.converters[i + \" \" + s[0]]) {\n                            o = i;\n                            break;\n                          }\n                          a || (a = i);\n                        }\n                        o = o || a;\n                      }\n                      if (o) return o !== s[0] && s.unshift(o), n[o];\n                    })(d, C, a)),\n                  (b = (function(t, e, n, r) {\n                    var i,\n                      o,\n                      a,\n                      u,\n                      s,\n                      c = {},\n                      l = t.dataTypes.slice();\n                    if (l[1]) for (a in t.converters) c[a.toLowerCase()] = t.converters[a];\n                    for (o = l.shift(); o; )\n                      if (\n                        (t.responseFields[o] && (n[t.responseFields[o]] = e),\n                        !s && r && t.dataFilter && (e = t.dataFilter(e, t.dataType)),\n                        (s = o),\n                        (o = l.shift()))\n                      )\n                        if (\"*\" === o) o = s;\n                        else if (\"*\" !== s && s !== o) {\n                          if (!(a = c[s + \" \" + o] || c[\"* \" + o]))\n                            for (i in c)\n                              if (\n                                (u = i.split(\" \"))[1] === o &&\n                                (a = c[s + \" \" + u[0]] || c[\"* \" + u[0]])\n                              ) {\n                                !0 === a\n                                  ? (a = c[i])\n                                  : !0 !== c[i] && ((o = u[0]), l.unshift(u[1]));\n                                break;\n                              }\n                          if (!0 !== a)\n                            if (a && t.throws) e = a(e);\n                            else\n                              try {\n                                e = a(e);\n                              } catch (t) {\n                                return {\n                                  state: \"parsererror\",\n                                  error: a ? t : \"No conversion from \" + s + \" to \" + o\n                                };\n                              }\n                        }\n                    return { state: \"success\", data: e };\n                  })(d, b, C, c)),\n                  c\n                    ? (d.ifModified &&\n                        ((w = C.getResponseHeader(\"Last-Modified\")) && (_.lastModified[i] = w),\n                        (w = C.getResponseHeader(\"etag\")) && (_.etag[i] = w)),\n                      204 === t || \"HEAD\" === d.type\n                        ? (x = \"nocontent\")\n                        : 304 === t\n                          ? (x = \"notmodified\")\n                          : ((x = b.state), (p = b.data), (c = !(h = b.error))))\n                    : ((h = x), (!t && x) || ((x = \"error\"), t < 0 && (t = 0))),\n                  (C.status = t),\n                  (C.statusText = (e || x) + \"\"),\n                  c ? m.resolveWith(v, [p, x, C]) : m.rejectWith(v, [C, x, h]),\n                  C.statusCode(y),\n                  (y = void 0),\n                  f && g.trigger(c ? \"ajaxSuccess\" : \"ajaxError\", [C, d, c ? p : h]),\n                  $.fireWith(v, [C, x]),\n                  f &&\n                    (g.trigger(\"ajaxComplete\", [C, d]), --_.active || _.event.trigger(\"ajaxStop\")));\n              }\n              return C;\n            },\n            getJSON: function(t, e, n) {\n              return _.get(t, e, n, \"json\");\n            },\n            getScript: function(t, e) {\n              return _.get(t, void 0, e, \"script\");\n            }\n          }),\n          _.each([\"get\", \"post\"], function(t, e) {\n            _[e] = function(t, n, r, i) {\n              return (\n                $(n) && ((i = i || r), (r = n), (n = void 0)),\n                _.ajax(\n                  _.extend(\n                    { url: t, type: e, dataType: i, data: n, success: r },\n                    _.isPlainObject(t) && t\n                  )\n                )\n              );\n            };\n          }),\n          (_._evalUrl = function(t) {\n            return _.ajax({\n              url: t,\n              type: \"GET\",\n              dataType: \"script\",\n              cache: !0,\n              async: !1,\n              global: !1,\n              throws: !0\n            });\n          }),\n          _.fn.extend({\n            wrapAll: function(t) {\n              var e;\n              return (\n                this[0] &&\n                  ($(t) && (t = t.call(this[0])),\n                  (e = _(t, this[0].ownerDocument)\n                    .eq(0)\n                    .clone(!0)),\n                  this[0].parentNode && e.insertBefore(this[0]),\n                  e\n                    .map(function() {\n                      for (var t = this; t.firstElementChild; ) t = t.firstElementChild;\n                      return t;\n                    })\n                    .append(this)),\n                this\n              );\n            },\n            wrapInner: function(t) {\n              return $(t)\n                ? this.each(function(e) {\n                    _(this).wrapInner(t.call(this, e));\n                  })\n                : this.each(function() {\n                    var e = _(this),\n                      n = e.contents();\n                    n.length ? n.wrapAll(t) : e.append(t);\n                  });\n            },\n            wrap: function(t) {\n              var e = $(t);\n              return this.each(function(n) {\n                _(this).wrapAll(e ? t.call(this, n) : t);\n              });\n            },\n            unwrap: function(t) {\n              return (\n                this.parent(t)\n                  .not(\"body\")\n                  .each(function() {\n                    _(this).replaceWith(this.childNodes);\n                  }),\n                this\n              );\n            }\n          }),\n          (_.expr.pseudos.hidden = function(t) {\n            return !_.expr.pseudos.visible(t);\n          }),\n          (_.expr.pseudos.visible = function(t) {\n            return !!(t.offsetWidth || t.offsetHeight || t.getClientRects().length);\n          }),\n          (_.ajaxSettings.xhr = function() {\n            try {\n              return new n.XMLHttpRequest();\n            } catch (t) {}\n          });\n        var Ue = { 0: 200, 1223: 204 },\n          Fe = _.ajaxSettings.xhr();\n        (m.cors = !!Fe && \"withCredentials\" in Fe),\n          (m.ajax = Fe = !!Fe),\n          _.ajaxTransport(function(t) {\n            var e, r;\n            if (m.cors || (Fe && !t.crossDomain))\n              return {\n                send: function(i, o) {\n                  var a,\n                    u = t.xhr();\n                  if ((u.open(t.type, t.url, t.async, t.username, t.password), t.xhrFields))\n                    for (a in t.xhrFields) u[a] = t.xhrFields[a];\n                  for (a in (t.mimeType && u.overrideMimeType && u.overrideMimeType(t.mimeType),\n                  t.crossDomain ||\n                    i[\"X-Requested-With\"] ||\n                    (i[\"X-Requested-With\"] = \"XMLHttpRequest\"),\n                  i))\n                    u.setRequestHeader(a, i[a]);\n                  (e = function(t) {\n                    return function() {\n                      e &&\n                        ((e = r = u.onload = u.onerror = u.onabort = u.ontimeout = u.onreadystatechange = null),\n                        \"abort\" === t\n                          ? u.abort()\n                          : \"error\" === t\n                            ? \"number\" != typeof u.status\n                              ? o(0, \"error\")\n                              : o(u.status, u.statusText)\n                            : o(\n                                Ue[u.status] || u.status,\n                                u.statusText,\n                                \"text\" !== (u.responseType || \"text\") ||\n                                \"string\" != typeof u.responseText\n                                  ? { binary: u.response }\n                                  : { text: u.responseText },\n                                u.getAllResponseHeaders()\n                              ));\n                    };\n                  }),\n                    (u.onload = e()),\n                    (r = u.onerror = u.ontimeout = e(\"error\")),\n                    void 0 !== u.onabort\n                      ? (u.onabort = r)\n                      : (u.onreadystatechange = function() {\n                          4 === u.readyState &&\n                            n.setTimeout(function() {\n                              e && r();\n                            });\n                        }),\n                    (e = e(\"abort\"));\n                  try {\n                    u.send((t.hasContent && t.data) || null);\n                  } catch (t) {\n                    if (e) throw t;\n                  }\n                },\n                abort: function() {\n                  e && e();\n                }\n              };\n          }),\n          _.ajaxPrefilter(function(t) {\n            t.crossDomain && (t.contents.script = !1);\n          }),\n          _.ajaxSetup({\n            accepts: {\n              script:\n                \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n            },\n            contents: { script: /\\b(?:java|ecma)script\\b/ },\n            converters: {\n              \"text script\": function(t) {\n                return _.globalEval(t), t;\n              }\n            }\n          }),\n          _.ajaxPrefilter(\"script\", function(t) {\n            void 0 === t.cache && (t.cache = !1), t.crossDomain && (t.type = \"GET\");\n          }),\n          _.ajaxTransport(\"script\", function(t) {\n            var e, n;\n            if (t.crossDomain)\n              return {\n                send: function(r, i) {\n                  (e = _(\"<script>\")\n                    .prop({ charset: t.scriptCharset, src: t.url })\n                    .on(\n                      \"load error\",\n                      (n = function(t) {\n                        e.remove(), (n = null), t && i(\"error\" === t.type ? 404 : 200, t.type);\n                      })\n                    )),\n                    a.head.appendChild(e[0]);\n                },\n                abort: function() {\n                  n && n();\n                }\n              };\n          });\n        var He = [],\n          Be = /(=)\\?(?=&|$)|\\?\\?/;\n        _.ajaxSetup({\n          jsonp: \"callback\",\n          jsonpCallback: function() {\n            var t = He.pop() || _.expando + \"_\" + we++;\n            return (this[t] = !0), t;\n          }\n        }),\n          _.ajaxPrefilter(\"json jsonp\", function(t, e, r) {\n            var i,\n              o,\n              a,\n              u =\n                !1 !== t.jsonp &&\n                (Be.test(t.url)\n                  ? \"url\"\n                  : \"string\" == typeof t.data &&\n                    0 === (t.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") &&\n                    Be.test(t.data) &&\n                    \"data\");\n            if (u || \"jsonp\" === t.dataTypes[0])\n              return (\n                (i = t.jsonpCallback = $(t.jsonpCallback) ? t.jsonpCallback() : t.jsonpCallback),\n                u\n                  ? (t[u] = t[u].replace(Be, \"$1\" + i))\n                  : !1 !== t.jsonp && (t.url += (xe.test(t.url) ? \"&\" : \"?\") + t.jsonp + \"=\" + i),\n                (t.converters[\"script json\"] = function() {\n                  return a || _.error(i + \" was not called\"), a[0];\n                }),\n                (t.dataTypes[0] = \"json\"),\n                (o = n[i]),\n                (n[i] = function() {\n                  a = arguments;\n                }),\n                r.always(function() {\n                  void 0 === o ? _(n).removeProp(i) : (n[i] = o),\n                    t[i] && ((t.jsonpCallback = e.jsonpCallback), He.push(i)),\n                    a && $(o) && o(a[0]),\n                    (a = o = void 0);\n                }),\n                \"script\"\n              );\n          }),\n          (m.createHTMLDocument = (function() {\n            var t = a.implementation.createHTMLDocument(\"\").body;\n            return (t.innerHTML = \"<form></form><form></form>\"), 2 === t.childNodes.length;\n          })()),\n          (_.parseHTML = function(t, e, n) {\n            return \"string\" != typeof t\n              ? []\n              : (\"boolean\" == typeof e && ((n = e), (e = !1)),\n                e ||\n                  (m.createHTMLDocument\n                    ? (((r = (e = a.implementation.createHTMLDocument(\"\")).createElement(\n                        \"base\"\n                      )).href = a.location.href),\n                      e.head.appendChild(r))\n                    : (e = a)),\n                (i = j.exec(t)),\n                (o = !n && []),\n                i\n                  ? [e.createElement(i[1])]\n                  : ((i = yt([t], e, o)),\n                    o && o.length && _(o).remove(),\n                    _.merge([], i.childNodes)));\n            var r, i, o;\n          }),\n          (_.fn.load = function(t, e, n) {\n            var r,\n              i,\n              o,\n              a = this,\n              u = t.indexOf(\" \");\n            return (\n              u > -1 && ((r = de(t.slice(u))), (t = t.slice(0, u))),\n              $(e) ? ((n = e), (e = void 0)) : e && \"object\" == typeof e && (i = \"POST\"),\n              a.length > 0 &&\n                _.ajax({ url: t, type: i || \"GET\", dataType: \"html\", data: e })\n                  .done(function(t) {\n                    (o = arguments),\n                      a.html(\n                        r\n                          ? _(\"<div>\")\n                              .append(_.parseHTML(t))\n                              .find(r)\n                          : t\n                      );\n                  })\n                  .always(\n                    n &&\n                      function(t, e) {\n                        a.each(function() {\n                          n.apply(this, o || [t.responseText, e, t]);\n                        });\n                      }\n                  ),\n              this\n            );\n          }),\n          _.each(\n            [\"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\"],\n            function(t, e) {\n              _.fn[e] = function(t) {\n                return this.on(e, t);\n              };\n            }\n          ),\n          (_.expr.pseudos.animated = function(t) {\n            return _.grep(_.timers, function(e) {\n              return t === e.elem;\n            }).length;\n          }),\n          (_.offset = {\n            setOffset: function(t, e, n) {\n              var r,\n                i,\n                o,\n                a,\n                u,\n                s,\n                c = _.css(t, \"position\"),\n                l = _(t),\n                f = {};\n              \"static\" === c && (t.style.position = \"relative\"),\n                (u = l.offset()),\n                (o = _.css(t, \"top\")),\n                (s = _.css(t, \"left\")),\n                (\"absolute\" === c || \"fixed\" === c) && (o + s).indexOf(\"auto\") > -1\n                  ? ((a = (r = l.position()).top), (i = r.left))\n                  : ((a = parseFloat(o) || 0), (i = parseFloat(s) || 0)),\n                $(e) && (e = e.call(t, n, _.extend({}, u))),\n                null != e.top && (f.top = e.top - u.top + a),\n                null != e.left && (f.left = e.left - u.left + i),\n                \"using\" in e ? e.using.call(t, f) : l.css(f);\n            }\n          }),\n          _.fn.extend({\n            offset: function(t) {\n              if (arguments.length)\n                return void 0 === t\n                  ? this\n                  : this.each(function(e) {\n                      _.offset.setOffset(this, t, e);\n                    });\n              var e,\n                n,\n                r = this[0];\n              return r\n                ? r.getClientRects().length\n                  ? ((e = r.getBoundingClientRect()),\n                    (n = r.ownerDocument.defaultView),\n                    { top: e.top + n.pageYOffset, left: e.left + n.pageXOffset })\n                  : { top: 0, left: 0 }\n                : void 0;\n            },\n            position: function() {\n              if (this[0]) {\n                var t,\n                  e,\n                  n,\n                  r = this[0],\n                  i = { top: 0, left: 0 };\n                if (\"fixed\" === _.css(r, \"position\")) e = r.getBoundingClientRect();\n                else {\n                  for (\n                    e = this.offset(), n = r.ownerDocument, t = r.offsetParent || n.documentElement;\n                    t &&\n                    (t === n.body || t === n.documentElement) &&\n                    \"static\" === _.css(t, \"position\");\n\n                  )\n                    t = t.parentNode;\n                  t &&\n                    t !== r &&\n                    1 === t.nodeType &&\n                    (((i = _(t).offset()).top += _.css(t, \"borderTopWidth\", !0)),\n                    (i.left += _.css(t, \"borderLeftWidth\", !0)));\n                }\n                return {\n                  top: e.top - i.top - _.css(r, \"marginTop\", !0),\n                  left: e.left - i.left - _.css(r, \"marginLeft\", !0)\n                };\n              }\n            },\n            offsetParent: function() {\n              return this.map(function() {\n                for (var t = this.offsetParent; t && \"static\" === _.css(t, \"position\"); )\n                  t = t.offsetParent;\n                return t || bt;\n              });\n            }\n          }),\n          _.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function(t, e) {\n            var n = \"pageYOffset\" === e;\n            _.fn[t] = function(r) {\n              return z(\n                this,\n                function(t, r, i) {\n                  var o;\n                  if ((y(t) ? (o = t) : 9 === t.nodeType && (o = t.defaultView), void 0 === i))\n                    return o ? o[e] : t[r];\n                  o ? o.scrollTo(n ? o.pageXOffset : i, n ? i : o.pageYOffset) : (t[r] = i);\n                },\n                t,\n                r,\n                arguments.length\n              );\n            };\n          }),\n          _.each([\"top\", \"left\"], function(t, e) {\n            _.cssHooks[e] = Ht(m.pixelPosition, function(t, n) {\n              if (n) return (n = Ft(t, e)), Vt.test(n) ? _(t).position()[e] + \"px\" : n;\n            });\n          }),\n          _.each({ Height: \"height\", Width: \"width\" }, function(t, e) {\n            _.each({ padding: \"inner\" + t, content: e, \"\": \"outer\" + t }, function(n, r) {\n              _.fn[r] = function(i, o) {\n                var a = arguments.length && (n || \"boolean\" != typeof i),\n                  u = n || (!0 === i || !0 === o ? \"margin\" : \"border\");\n                return z(\n                  this,\n                  function(e, n, i) {\n                    var o;\n                    return y(e)\n                      ? 0 === r.indexOf(\"outer\")\n                        ? e[\"inner\" + t]\n                        : e.document.documentElement[\"client\" + t]\n                      : 9 === e.nodeType\n                        ? ((o = e.documentElement),\n                          Math.max(\n                            e.body[\"scroll\" + t],\n                            o[\"scroll\" + t],\n                            e.body[\"offset\" + t],\n                            o[\"offset\" + t],\n                            o[\"client\" + t]\n                          ))\n                        : void 0 === i\n                          ? _.css(e, n, u)\n                          : _.style(e, n, i, u);\n                  },\n                  e,\n                  a ? i : void 0,\n                  a\n                );\n              };\n            });\n          }),\n          _.each(\n            \"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\n              \" \"\n            ),\n            function(t, e) {\n              _.fn[e] = function(t, n) {\n                return arguments.length > 0 ? this.on(e, null, t, n) : this.trigger(e);\n              };\n            }\n          ),\n          _.fn.extend({\n            hover: function(t, e) {\n              return this.mouseenter(t).mouseleave(e || t);\n            }\n          }),\n          _.fn.extend({\n            bind: function(t, e, n) {\n              return this.on(t, null, e, n);\n            },\n            unbind: function(t, e) {\n              return this.off(t, null, e);\n            },\n            delegate: function(t, e, n, r) {\n              return this.on(e, t, n, r);\n            },\n            undelegate: function(t, e, n) {\n              return 1 === arguments.length ? this.off(t, \"**\") : this.off(e, t || \"**\", n);\n            }\n          }),\n          (_.proxy = function(t, e) {\n            var n, r, i;\n            if ((\"string\" == typeof e && ((n = t[e]), (e = t), (t = n)), $(t)))\n              return (\n                (r = s.call(arguments, 2)),\n                ((i = function() {\n                  return t.apply(e || this, r.concat(s.call(arguments)));\n                }).guid = t.guid = t.guid || _.guid++),\n                i\n              );\n          }),\n          (_.holdReady = function(t) {\n            t ? _.readyWait++ : _.ready(!0);\n          }),\n          (_.isArray = Array.isArray),\n          (_.parseJSON = JSON.parse),\n          (_.nodeName = O),\n          (_.isFunction = $),\n          (_.isWindow = y),\n          (_.camelCase = J),\n          (_.type = x),\n          (_.now = Date.now),\n          (_.isNumeric = function(t) {\n            var e = _.type(t);\n            return (\"number\" === e || \"string\" === e) && !isNaN(t - parseFloat(t));\n          }),\n          void 0 ===\n            (r = function() {\n              return _;\n            }.apply(e, [])) || (t.exports = r);\n        var ze = n.jQuery,\n          We = n.$;\n        return (\n          (_.noConflict = function(t) {\n            return n.$ === _ && (n.$ = We), t && n.jQuery === _ && (n.jQuery = ze), _;\n          }),\n          i || (n.jQuery = n.$ = _),\n          _\n        );\n      });\n    },\n    30: function(t, e, n) {\n      (function(t) {\n        /**\n         * @license AngularJS v1.7.3\n         * (c) 2010-2018 Google, Inc. http://angularjs.org\n         * License: MIT\n         */\n        !(function(e) {\n          \"use strict\";\n          var n = { objectMaxDepth: 5, urlErrorParamsEnabled: !0 };\n          function r(t) {\n            if (!U(t)) return n;\n            q(t.objectMaxDepth) &&\n              (n.objectMaxDepth = i(t.objectMaxDepth) ? t.objectMaxDepth : NaN),\n              q(t.urlErrorParamsEnabled) &&\n                X(t.urlErrorParamsEnabled) &&\n                (n.urlErrorParamsEnabled = t.urlErrorParamsEnabled);\n          }\n          function i(t) {\n            return B(t) && t > 0;\n          }\n          function o(t, e) {\n            e = e || Error;\n            var r = \"https://errors.angularjs.org/1.7.3/\",\n              i = r.replace(\".\", \"\\\\.\") + \"[\\\\s\\\\S]*\",\n              o = new RegExp(i, \"g\");\n            return function() {\n              var i,\n                a,\n                u = arguments[0],\n                s = arguments[1],\n                c = \"[\" + (t ? t + \":\" : \"\") + u + \"] \",\n                l = ht(arguments, 2).map(function(t) {\n                  return Kt(t, n.objectMaxDepth);\n                });\n              if (\n                ((c += s.replace(/\\{\\d+\\}/g, function(t) {\n                  var e = +t.slice(1, -1);\n                  return e < l.length ? l[e].replace(o, \"\") : t;\n                })),\n                (c += \"\\n\" + r + (t ? t + \"/\" : \"\") + u),\n                n.urlErrorParamsEnabled)\n              )\n                for (a = 0, i = \"?\"; a < l.length; a++, i = \"&\")\n                  c += i + \"p\" + a + \"=\" + encodeURIComponent(l[a]);\n              return new e(c);\n            };\n          }\n          var a,\n            u,\n            s,\n            c,\n            l = /^\\/(.+)\\/([a-z]*)$/,\n            f = \"validity\",\n            p = Object.prototype.hasOwnProperty,\n            h = function(t) {\n              return H(t) ? t.toLowerCase() : t;\n            },\n            d = function(t) {\n              return H(t) ? t.toUpperCase() : t;\n            },\n            v = [].slice,\n            g = [].splice,\n            m = [].push,\n            $ = Object.prototype.toString,\n            y = Object.getPrototypeOf,\n            b = o(\"ng\"),\n            w = e.angular || (e.angular = {}),\n            x = 0;\n          function _(t) {\n            if (null == t || Y(t)) return !1;\n            if (W(t) || H(t) || (u && t instanceof u)) return !0;\n            var e = \"length\" in Object(t) && t.length;\n            return B(e) && ((e >= 0 && e - 1 in t) || \"function\" == typeof t.item);\n          }\n          function C(t, e, n) {\n            var r, i;\n            if (t)\n              if (K(t))\n                for (r in t)\n                  \"prototype\" !== r &&\n                    \"length\" !== r &&\n                    \"name\" !== r &&\n                    t.hasOwnProperty(r) &&\n                    e.call(n, t[r], r, t);\n              else if (W(t) || _(t)) {\n                var o = \"object\" != typeof t;\n                for (r = 0, i = t.length; r < i; r++) (o || r in t) && e.call(n, t[r], r, t);\n              } else if (t.forEach && t.forEach !== C) t.forEach(e, n, t);\n              else if (F(t)) for (r in t) e.call(n, t[r], r, t);\n              else if (\"function\" == typeof t.hasOwnProperty)\n                for (r in t) t.hasOwnProperty(r) && e.call(n, t[r], r, t);\n              else for (r in t) p.call(t, r) && e.call(n, t[r], r, t);\n            return t;\n          }\n          function S(t, e, n) {\n            for (var r = Object.keys(t).sort(), i = 0; i < r.length; i++) e.call(n, t[r[i]], r[i]);\n            return r;\n          }\n          function E(t) {\n            return function(e, n) {\n              t(n, e);\n            };\n          }\n          function k() {\n            return ++x;\n          }\n          function A(t, e) {\n            e ? (t.$$hashKey = e) : delete t.$$hashKey;\n          }\n          function T(t, e, n) {\n            for (var r = t.$$hashKey, i = 0, o = e.length; i < o; ++i) {\n              var a = e[i];\n              if (U(a) || K(a))\n                for (var u = Object.keys(a), s = 0, c = u.length; s < c; s++) {\n                  var l = u[s],\n                    f = a[l];\n                  n && U(f)\n                    ? z(f)\n                      ? (t[l] = new Date(f.valueOf()))\n                      : J(f)\n                        ? (t[l] = new RegExp(f))\n                        : f.nodeName\n                          ? (t[l] = f.cloneNode(!0))\n                          : rt(f)\n                            ? (t[l] = f.clone())\n                            : (U(t[l]) || (t[l] = W(f) ? [] : {}), T(t[l], [f], !0))\n                    : (t[l] = f);\n                }\n            }\n            return A(t, r), t;\n          }\n          function O(t) {\n            return T(t, v.call(arguments, 1), !1);\n          }\n          function j(t) {\n            return T(t, v.call(arguments, 1), !0);\n          }\n          function N(t) {\n            return parseInt(t, 10);\n          }\n          a = e.document.documentMode;\n          var M =\n            Number.isNaN ||\n            function(t) {\n              return t != t;\n            };\n          function L(t, e) {\n            return O(Object.create(t), e);\n          }\n          function D() {}\n          function I(t) {\n            return t;\n          }\n          function R(t) {\n            return function() {\n              return t;\n            };\n          }\n          function P(t) {\n            return K(t.toString) && t.toString !== $;\n          }\n          function V(t) {\n            return void 0 === t;\n          }\n          function q(t) {\n            return void 0 !== t;\n          }\n          function U(t) {\n            return null !== t && \"object\" == typeof t;\n          }\n          function F(t) {\n            return null !== t && \"object\" == typeof t && !y(t);\n          }\n          function H(t) {\n            return \"string\" == typeof t;\n          }\n          function B(t) {\n            return \"number\" == typeof t;\n          }\n          function z(t) {\n            return \"[object Date]\" === $.call(t);\n          }\n          function W(t) {\n            return Array.isArray(t) || t instanceof Array;\n          }\n          function G(t) {\n            switch ($.call(t)) {\n              case \"[object Error]\":\n              case \"[object Exception]\":\n              case \"[object DOMException]\":\n                return !0;\n              default:\n                return t instanceof Error;\n            }\n          }\n          function K(t) {\n            return \"function\" == typeof t;\n          }\n          function J(t) {\n            return \"[object RegExp]\" === $.call(t);\n          }\n          function Y(t) {\n            return t && t.window === t;\n          }\n          function Z(t) {\n            return t && t.$evalAsync && t.$watch;\n          }\n          function X(t) {\n            return \"boolean\" == typeof t;\n          }\n          function Q(t) {\n            return t && K(t.then);\n          }\n          (D.$inject = []), (I.$inject = []);\n          var tt = /^\\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array]$/;\n          var et = function(t) {\n              return H(t) ? t.trim() : t;\n            },\n            nt = function(t) {\n              return t.replace(/([-()[\\]{}+?*.$^|,:#<!\\\\])/g, \"\\\\$1\").replace(/\\x08/g, \"\\\\x08\");\n            };\n          function rt(t) {\n            return !(!t || !(t.nodeName || (t.prop && t.attr && t.find)));\n          }\n          function it(t) {\n            return h(t.nodeName || (t[0] && t[0].nodeName));\n          }\n          function ot(t, e) {\n            return -1 !== Array.prototype.indexOf.call(t, e);\n          }\n          function at(t, e) {\n            var n = t.indexOf(e);\n            return n >= 0 && t.splice(n, 1), n;\n          }\n          function ut(t, e, n) {\n            var r = [],\n              o = [];\n            if (((n = i(n) ? n : NaN), e)) {\n              if (\n                (function(t) {\n                  return t && B(t.length) && tt.test($.call(t));\n                })(e) ||\n                (function(t) {\n                  return \"[object ArrayBuffer]\" === $.call(t);\n                })(e)\n              )\n                throw b(\"cpta\", \"Can't copy! TypedArray destination cannot be mutated.\");\n              if (t === e) throw b(\"cpi\", \"Can't copy! Source and destination are identical.\");\n              return (\n                W(e)\n                  ? (e.length = 0)\n                  : C(e, function(t, n) {\n                      \"$$hashKey\" !== n && delete e[n];\n                    }),\n                r.push(t),\n                o.push(e),\n                a(t, e, n)\n              );\n            }\n            return u(t, n);\n            function a(t, e, n) {\n              if (--n < 0) return \"...\";\n              var r,\n                i = e.$$hashKey;\n              if (W(t)) for (var o = 0, a = t.length; o < a; o++) e.push(u(t[o], n));\n              else if (F(t)) for (r in t) e[r] = u(t[r], n);\n              else if (t && \"function\" == typeof t.hasOwnProperty)\n                for (r in t) t.hasOwnProperty(r) && (e[r] = u(t[r], n));\n              else for (r in t) p.call(t, r) && (e[r] = u(t[r], n));\n              return A(e, i), e;\n            }\n            function u(t, e) {\n              if (!U(t)) return t;\n              var n = r.indexOf(t);\n              if (-1 !== n) return o[n];\n              if (Y(t) || Z(t))\n                throw b(\n                  \"cpws\",\n                  \"Can't copy! Making copies of Window or Scope instances is not supported.\"\n                );\n              var i = !1,\n                s = (function(t) {\n                  switch ($.call(t)) {\n                    case \"[object Int8Array]\":\n                    case \"[object Int16Array]\":\n                    case \"[object Int32Array]\":\n                    case \"[object Float32Array]\":\n                    case \"[object Float64Array]\":\n                    case \"[object Uint8Array]\":\n                    case \"[object Uint8ClampedArray]\":\n                    case \"[object Uint16Array]\":\n                    case \"[object Uint32Array]\":\n                      return new t.constructor(u(t.buffer), t.byteOffset, t.length);\n                    case \"[object ArrayBuffer]\":\n                      if (!t.slice) {\n                        var e = new ArrayBuffer(t.byteLength);\n                        return new Uint8Array(e).set(new Uint8Array(t)), e;\n                      }\n                      return t.slice(0);\n                    case \"[object Boolean]\":\n                    case \"[object Number]\":\n                    case \"[object String]\":\n                    case \"[object Date]\":\n                      return new t.constructor(t.valueOf());\n                    case \"[object RegExp]\":\n                      var n = new RegExp(t.source, t.toString().match(/[^/]*$/)[0]);\n                      return (n.lastIndex = t.lastIndex), n;\n                    case \"[object Blob]\":\n                      return new t.constructor([t], { type: t.type });\n                  }\n                  if (K(t.cloneNode)) return t.cloneNode(!0);\n                })(t);\n              return (\n                void 0 === s && ((s = W(t) ? [] : Object.create(y(t))), (i = !0)),\n                r.push(t),\n                o.push(s),\n                i ? a(t, s, e) : s\n              );\n            }\n          }\n          function st(t, e) {\n            return t === e || (t != t && e != e);\n          }\n          function ct(t, e) {\n            if (t === e) return !0;\n            if (null === t || null === e) return !1;\n            if (t != t && e != e) return !0;\n            var n,\n              r,\n              i,\n              o = typeof t;\n            if (o === typeof e && \"object\" === o) {\n              if (!W(t)) {\n                if (z(t)) return !!z(e) && st(t.getTime(), e.getTime());\n                if (J(t)) return !!J(e) && t.toString() === e.toString();\n                if (Z(t) || Z(e) || Y(t) || Y(e) || W(e) || z(e) || J(e)) return !1;\n                for (r in ((i = qt()), t))\n                  if (\"$\" !== r.charAt(0) && !K(t[r])) {\n                    if (!ct(t[r], e[r])) return !1;\n                    i[r] = !0;\n                  }\n                for (r in e) if (!(r in i) && \"$\" !== r.charAt(0) && q(e[r]) && !K(e[r])) return !1;\n                return !0;\n              }\n              if (!W(e)) return !1;\n              if ((n = t.length) === e.length) {\n                for (r = 0; r < n; r++) if (!ct(t[r], e[r])) return !1;\n                return !0;\n              }\n            }\n            return !1;\n          }\n          var lt = function() {\n              if (!q(lt.rules)) {\n                var t =\n                  e.document.querySelector(\"[ng-csp]\") || e.document.querySelector(\"[data-ng-csp]\");\n                if (t) {\n                  var n = t.getAttribute(\"ng-csp\") || t.getAttribute(\"data-ng-csp\");\n                  lt.rules = {\n                    noUnsafeEval: !n || -1 !== n.indexOf(\"no-unsafe-eval\"),\n                    noInlineStyle: !n || -1 !== n.indexOf(\"no-inline-style\")\n                  };\n                } else\n                  lt.rules = {\n                    noUnsafeEval: (function() {\n                      try {\n                        return new Function(\"\"), !1;\n                      } catch (t) {\n                        return !0;\n                      }\n                    })(),\n                    noInlineStyle: !1\n                  };\n              }\n              return lt.rules;\n            },\n            ft = function() {\n              if (q(ft.name_)) return ft.name_;\n              var t,\n                n,\n                r,\n                i,\n                o = kt.length;\n              for (n = 0; n < o; ++n)\n                if (\n                  ((r = kt[n]), (t = e.document.querySelector(\"[\" + r.replace(\":\", \"\\\\:\") + \"jq]\")))\n                ) {\n                  i = t.getAttribute(r + \"jq\");\n                  break;\n                }\n              return (ft.name_ = i);\n            };\n          function pt(t, e, n) {\n            return t.concat(v.call(e, n));\n          }\n          function ht(t, e) {\n            return v.call(t, e || 0);\n          }\n          function dt(t, e) {\n            var n = arguments.length > 2 ? ht(arguments, 2) : [];\n            return !K(e) || e instanceof RegExp\n              ? e\n              : n.length\n                ? function() {\n                    return arguments.length ? e.apply(t, pt(n, arguments, 0)) : e.apply(t, n);\n                  }\n                : function() {\n                    return arguments.length ? e.apply(t, arguments) : e.call(t);\n                  };\n          }\n          function vt(t, n) {\n            var r = n;\n            return (\n              \"string\" == typeof t && \"$\" === t.charAt(0) && \"$\" === t.charAt(1)\n                ? (r = void 0)\n                : Y(n)\n                  ? (r = \"$WINDOW\")\n                  : n && e.document === n\n                    ? (r = \"$DOCUMENT\")\n                    : Z(n) && (r = \"$SCOPE\"),\n              r\n            );\n          }\n          function gt(t, e) {\n            if (!V(t)) return B(e) || (e = e ? 2 : null), JSON.stringify(t, vt, e);\n          }\n          function mt(t) {\n            return H(t) ? JSON.parse(t) : t;\n          }\n          var $t = /:/g;\n          function yt(t, e) {\n            t = t.replace($t, \"\");\n            var n = Date.parse(\"Jan 01, 1970 00:00:00 \" + t) / 6e4;\n            return M(n) ? e : n;\n          }\n          function bt(t, e) {\n            return (t = new Date(t.getTime())).setMinutes(t.getMinutes() + e), t;\n          }\n          function wt(t, e, n) {\n            n = n ? -1 : 1;\n            var r = t.getTimezoneOffset();\n            return bt(t, n * (yt(e, r) - r));\n          }\n          function xt(t) {\n            t = u(t)\n              .clone()\n              .empty();\n            var e = u(\"<div></div>\")\n              .append(t)\n              .html();\n            try {\n              return t[0].nodeType === Ht\n                ? h(e)\n                : e.match(/^(<[^>]+>)/)[1].replace(/^<([\\w-]+)/, function(t, e) {\n                    return \"<\" + h(e);\n                  });\n            } catch (t) {\n              return h(e);\n            }\n          }\n          function _t(t) {\n            try {\n              return decodeURIComponent(t);\n            } catch (t) {}\n          }\n          function Ct(t) {\n            var e = {};\n            return (\n              C((t || \"\").split(\"&\"), function(t) {\n                var n, r, i;\n                t &&\n                  ((r = t = t.replace(/\\+/g, \"%20\")),\n                  -1 !== (n = t.indexOf(\"=\")) &&\n                    ((r = t.substring(0, n)), (i = t.substring(n + 1))),\n                  q((r = _t(r))) &&\n                    ((i = !q(i) || _t(i)),\n                    p.call(e, r) ? (W(e[r]) ? e[r].push(i) : (e[r] = [e[r], i])) : (e[r] = i)));\n              }),\n              e\n            );\n          }\n          function St(t) {\n            return Et(t, !0)\n              .replace(/%26/gi, \"&\")\n              .replace(/%3D/gi, \"=\")\n              .replace(/%2B/gi, \"+\");\n          }\n          function Et(t, e) {\n            return encodeURIComponent(t)\n              .replace(/%40/gi, \"@\")\n              .replace(/%3A/gi, \":\")\n              .replace(/%24/g, \"$\")\n              .replace(/%2C/gi, \",\")\n              .replace(/%3B/gi, \";\")\n              .replace(/%20/g, e ? \"%20\" : \"+\");\n          }\n          var kt = [\"ng-\", \"data-ng-\", \"ng:\", \"x-ng-\"];\n          var At = (function(t) {\n            var n = t.currentScript;\n            if (!n) return !0;\n            if (!(n instanceof e.HTMLScriptElement || n instanceof e.SVGScriptElement)) return !1;\n            var r = n.attributes;\n            return [\n              r.getNamedItem(\"src\"),\n              r.getNamedItem(\"href\"),\n              r.getNamedItem(\"xlink:href\")\n            ].every(function(e) {\n              if (!e) return !0;\n              if (!e.value) return !1;\n              var n = t.createElement(\"a\");\n              if (((n.href = e.value), t.location.origin === n.origin)) return !0;\n              switch (n.protocol) {\n                case \"http:\":\n                case \"https:\":\n                case \"ftp:\":\n                case \"blob:\":\n                case \"file:\":\n                case \"data:\":\n                  return !0;\n                default:\n                  return !1;\n              }\n            });\n          })(e.document);\n          function Tt(t, n) {\n            var r,\n              i,\n              o = {};\n            if (\n              (C(kt, function(e) {\n                var n = e + \"app\";\n                !r && t.hasAttribute && t.hasAttribute(n) && ((r = t), (i = t.getAttribute(n)));\n              }),\n              C(kt, function(e) {\n                var n,\n                  o = e + \"app\";\n                !r &&\n                  (n = t.querySelector(\"[\" + o.replace(\":\", \"\\\\:\") + \"]\")) &&\n                  ((r = n), (i = n.getAttribute(o)));\n              }),\n              r)\n            ) {\n              if (!At) {\n                try {\n                  e.console.error(\n                    \"AngularJS: disabling automatic bootstrap. <script> protocol indicates an extension, document.location.href does not match.\"\n                  );\n                } catch (t) {}\n                return;\n              }\n              (o.strictDi =\n                null !==\n                (function(t, e) {\n                  var n,\n                    r,\n                    i = kt.length;\n                  for (r = 0; r < i; ++r)\n                    if (((n = kt[r] + e), H((n = t.getAttribute(n))))) return n;\n                  return null;\n                })(r, \"strict-di\")),\n                n(r, i ? [i] : [], o);\n            }\n          }\n          function Ot(t, n, r) {\n            U(r) || (r = {});\n            r = O({ strictDi: !1 }, r);\n            var i = function() {\n                if ((t = u(t)).injector()) {\n                  var i = t[0] === e.document ? \"document\" : xt(t);\n                  throw b(\n                    \"btstrpd\",\n                    \"App already bootstrapped with this element '{0}'\",\n                    i.replace(/</, \"&lt;\").replace(/>/, \"&gt;\")\n                  );\n                }\n                (n = n || []).unshift([\n                  \"$provide\",\n                  function(e) {\n                    e.value(\"$rootElement\", t);\n                  }\n                ]),\n                  r.debugInfoEnabled &&\n                    n.push([\n                      \"$compileProvider\",\n                      function(t) {\n                        t.debugInfoEnabled(!0);\n                      }\n                    ]),\n                  n.unshift(\"ng\");\n                var o = Xe(n, r.strictDi);\n                return (\n                  o.invoke([\n                    \"$rootScope\",\n                    \"$rootElement\",\n                    \"$compile\",\n                    \"$injector\",\n                    function(t, e, n, r) {\n                      t.$apply(function() {\n                        e.data(\"$injector\", r), n(e)(t);\n                      });\n                    }\n                  ]),\n                  o\n                );\n              },\n              o = /^NG_ENABLE_DEBUG_INFO!/,\n              a = /^NG_DEFER_BOOTSTRAP!/;\n            if (\n              (e && o.test(e.name) && ((r.debugInfoEnabled = !0), (e.name = e.name.replace(o, \"\"))),\n              e && !a.test(e.name))\n            )\n              return i();\n            (e.name = e.name.replace(a, \"\")),\n              (w.resumeBootstrap = function(t) {\n                return (\n                  C(t, function(t) {\n                    n.push(t);\n                  }),\n                  i()\n                );\n              }),\n              K(w.resumeDeferredBootstrap) && w.resumeDeferredBootstrap();\n          }\n          function jt() {\n            (e.name = \"NG_ENABLE_DEBUG_INFO!\" + e.name), e.location.reload();\n          }\n          function Nt(t) {\n            var e = w.element(t).injector();\n            if (!e) throw b(\"test\", \"no injector found for element argument to getTestability\");\n            return e.get(\"$$testability\");\n          }\n          var Mt = /[A-Z]/g;\n          function Lt(t, e) {\n            return (\n              (e = e || \"_\"),\n              t.replace(Mt, function(t, n) {\n                return (n ? e : \"\") + t.toLowerCase();\n              })\n            );\n          }\n          var Dt = !1;\n          function It(t, e, n) {\n            if (!t) throw b(\"areq\", \"Argument '{0}' is {1}\", e || \"?\", n || \"required\");\n            return t;\n          }\n          function Rt(t, e, n) {\n            return (\n              n && W(t) && (t = t[t.length - 1]),\n              It(\n                K(t),\n                e,\n                \"not a function, got \" +\n                  (t && \"object\" == typeof t ? t.constructor.name || \"Object\" : typeof t)\n              ),\n              t\n            );\n          }\n          function Pt(t, e) {\n            if (\"hasOwnProperty\" === t)\n              throw b(\"badname\", \"hasOwnProperty is not a valid {0} name\", e);\n          }\n          function Vt(t) {\n            for (var e, n = t[0], r = t[t.length - 1], i = 1; n !== r && (n = n.nextSibling); i++)\n              (e || t[i] !== n) && (e || (e = u(v.call(t, 0, i))), e.push(n));\n            return e || t;\n          }\n          function qt() {\n            return Object.create(null);\n          }\n          function Ut(t) {\n            if (null == t) return \"\";\n            switch (typeof t) {\n              case \"string\":\n                break;\n              case \"number\":\n                t = \"\" + t;\n                break;\n              default:\n                t = !P(t) || W(t) || z(t) ? gt(t) : t.toString();\n            }\n            return t;\n          }\n          var Ft = 1,\n            Ht = 3,\n            Bt = 8,\n            zt = 9,\n            Wt = 11;\n          function Gt(t, e) {\n            if (W(t)) {\n              e = e || [];\n              for (var n = 0, r = t.length; n < r; n++) e[n] = t[n];\n            } else if (U(t))\n              for (var i in ((e = e || {}), t))\n                (\"$\" === i.charAt(0) && \"$\" === i.charAt(1)) || (e[i] = t[i]);\n            return e || t;\n          }\n          function Kt(t, e) {\n            return \"function\" == typeof t\n              ? t.toString().replace(/ \\{[\\s\\S]*$/, \"\")\n              : V(t)\n                ? \"undefined\"\n                : \"string\" != typeof t\n                  ? (function(t, e) {\n                      var n = [];\n                      return (\n                        i(e) && (t = w.copy(t, null, e)),\n                        JSON.stringify(t, function(t, e) {\n                          if (U((e = vt(t, e)))) {\n                            if (n.indexOf(e) >= 0) return \"...\";\n                            n.push(e);\n                          }\n                          return e;\n                        })\n                      );\n                    })(t, e)\n                  : t;\n          }\n          var Jt = { full: \"1.7.3\", major: 1, minor: 7, dot: 3, codeName: \"eventful-proposal\" };\n          he.expando = \"ng339\";\n          var Yt = (he.cache = {}),\n            Zt = 1;\n          he._data = function(t) {\n            return this.cache[t[this.expando]] || {};\n          };\n          var Xt = /-([a-z])/g,\n            Qt = /^-ms-/,\n            te = { mouseleave: \"mouseout\", mouseenter: \"mouseover\" },\n            ee = o(\"jqLite\");\n          function ne(t, e) {\n            return e.toUpperCase();\n          }\n          function re(t) {\n            return t.replace(Xt, ne);\n          }\n          var ie = /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/,\n            oe = /<|&#?\\w+;/,\n            ae = /<([\\w:-]+)/,\n            ue = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n            se = {\n              option: [1, '<select multiple=\"multiple\">', \"</select>\"],\n              thead: [1, \"<table>\", \"</table>\"],\n              col: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n              tr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n              td: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n              _default: [0, \"\", \"\"]\n            };\n          function ce(t) {\n            return !oe.test(t);\n          }\n          function le(t) {\n            var e = t.nodeType;\n            return e === Ft || !e || e === zt;\n          }\n          function fe(t, e) {\n            var n,\n              r,\n              i,\n              o,\n              a = e.createDocumentFragment(),\n              u = [];\n            if (ce(t)) u.push(e.createTextNode(t));\n            else {\n              for (\n                n = a.appendChild(e.createElement(\"div\")),\n                  r = (ae.exec(t) || [\"\", \"\"])[1].toLowerCase(),\n                  i = se[r] || se._default,\n                  n.innerHTML = i[1] + t.replace(ue, \"<$1></$2>\") + i[2],\n                  o = i[0];\n                o--;\n\n              )\n                n = n.lastChild;\n              (u = pt(u, n.childNodes)), ((n = a.firstChild).textContent = \"\");\n            }\n            return (\n              (a.textContent = \"\"),\n              (a.innerHTML = \"\"),\n              C(u, function(t) {\n                a.appendChild(t);\n              }),\n              a\n            );\n          }\n          (se.optgroup = se.option),\n            (se.tbody = se.tfoot = se.colgroup = se.caption = se.thead),\n            (se.th = se.td);\n          var pe =\n            e.Node.prototype.contains ||\n            function(t) {\n              return !!(16 & this.compareDocumentPosition(t));\n            };\n          function he(t) {\n            if (t instanceof he) return t;\n            var n;\n            if ((H(t) && ((t = et(t)), (n = !0)), !(this instanceof he))) {\n              if (n && \"<\" !== t.charAt(0))\n                throw ee(\n                  \"nosel\",\n                  \"Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element\"\n                );\n              return new he(t);\n            }\n            n\n              ? Se(\n                  this,\n                  (function(t, n) {\n                    var r;\n                    return (\n                      (n = n || e.document),\n                      (r = ie.exec(t))\n                        ? [n.createElement(r[1])]\n                        : (r = fe(t, n))\n                          ? r.childNodes\n                          : []\n                    );\n                  })(t)\n                )\n              : K(t)\n                ? Oe(t)\n                : Se(this, t);\n          }\n          function de(t) {\n            return t.cloneNode(!0);\n          }\n          function ve(t, e) {\n            !e && le(t) && u.cleanData([t]),\n              t.querySelectorAll && u.cleanData(t.querySelectorAll(\"*\"));\n          }\n          function ge(t) {\n            var e;\n            for (e in t) return !1;\n            return !0;\n          }\n          function me(t) {\n            var e = t.ng339,\n              n = e && Yt[e],\n              r = n && n.events,\n              i = n && n.data;\n            (i && !ge(i)) || (r && !ge(r)) || (delete Yt[e], (t.ng339 = void 0));\n          }\n          function $e(t, e, n, r) {\n            if (q(r)) throw ee(\"offargs\", \"jqLite#off() does not support the `selector` argument\");\n            var i = be(t),\n              o = i && i.events,\n              a = i && i.handle;\n            if (a) {\n              if (e) {\n                var u = function(e) {\n                  var r = o[e];\n                  q(n) && at(r || [], n),\n                    (q(n) && r && r.length > 0) || (t.removeEventListener(e, a), delete o[e]);\n                };\n                C(e.split(\" \"), function(t) {\n                  u(t), te[t] && u(te[t]);\n                });\n              } else for (e in o) \"$destroy\" !== e && t.removeEventListener(e, a), delete o[e];\n              me(t);\n            }\n          }\n          function ye(t, e) {\n            var n = t.ng339,\n              r = n && Yt[n];\n            r && (e ? delete r.data[e] : (r.data = {}), me(t));\n          }\n          function be(t, e) {\n            var n = t.ng339,\n              r = n && Yt[n];\n            return (\n              e &&\n                !r &&\n                ((t.ng339 = n = ++Zt), (r = Yt[n] = { events: {}, data: {}, handle: void 0 })),\n              r\n            );\n          }\n          function we(t, e, n) {\n            if (le(t)) {\n              var r,\n                i = q(n),\n                o = !i && e && !U(e),\n                a = !e,\n                u = be(t, !o),\n                s = u && u.data;\n              if (i) s[re(e)] = n;\n              else {\n                if (a) return s;\n                if (o) return s && s[re(e)];\n                for (r in e) s[re(r)] = e[r];\n              }\n            }\n          }\n          function xe(t, e) {\n            return (\n              !!t.getAttribute &&\n              (\" \" + (t.getAttribute(\"class\") || \"\") + \" \")\n                .replace(/[\\n\\t]/g, \" \")\n                .indexOf(\" \" + e + \" \") > -1\n            );\n          }\n          function _e(t, e) {\n            if (e && t.setAttribute) {\n              var n = (\" \" + (t.getAttribute(\"class\") || \"\") + \" \").replace(/[\\n\\t]/g, \" \"),\n                r = n;\n              C(e.split(\" \"), function(t) {\n                (t = et(t)), (r = r.replace(\" \" + t + \" \", \" \"));\n              }),\n                r !== n && t.setAttribute(\"class\", et(r));\n            }\n          }\n          function Ce(t, e) {\n            if (e && t.setAttribute) {\n              var n = (\" \" + (t.getAttribute(\"class\") || \"\") + \" \").replace(/[\\n\\t]/g, \" \"),\n                r = n;\n              C(e.split(\" \"), function(t) {\n                (t = et(t)), -1 === r.indexOf(\" \" + t + \" \") && (r += t + \" \");\n              }),\n                r !== n && t.setAttribute(\"class\", et(r));\n            }\n          }\n          function Se(t, e) {\n            if (e)\n              if (e.nodeType) t[t.length++] = e;\n              else {\n                var n = e.length;\n                if (\"number\" == typeof n && e.window !== e) {\n                  if (n) for (var r = 0; r < n; r++) t[t.length++] = e[r];\n                } else t[t.length++] = e;\n              }\n          }\n          function Ee(t, e) {\n            return ke(t, \"$\" + (e || \"ngController\") + \"Controller\");\n          }\n          function ke(t, e, n) {\n            t.nodeType === zt && (t = t.documentElement);\n            for (var r = W(e) ? e : [e]; t; ) {\n              for (var i = 0, o = r.length; i < o; i++) if (q((n = u.data(t, r[i])))) return n;\n              t = t.parentNode || (t.nodeType === Wt && t.host);\n            }\n          }\n          function Ae(t) {\n            for (ve(t, !0); t.firstChild; ) t.removeChild(t.firstChild);\n          }\n          function Te(t, e) {\n            e || ve(t);\n            var n = t.parentNode;\n            n && n.removeChild(t);\n          }\n          function Oe(t) {\n            function n() {\n              e.document.removeEventListener(\"DOMContentLoaded\", n),\n                e.removeEventListener(\"load\", n),\n                t();\n            }\n            \"complete\" === e.document.readyState\n              ? e.setTimeout(t)\n              : (e.document.addEventListener(\"DOMContentLoaded\", n), e.addEventListener(\"load\", n));\n          }\n          var je = (he.prototype = {\n              ready: Oe,\n              toString: function() {\n                var t = [];\n                return (\n                  C(this, function(e) {\n                    t.push(\"\" + e);\n                  }),\n                  \"[\" + t.join(\", \") + \"]\"\n                );\n              },\n              eq: function(t) {\n                return u(t >= 0 ? this[t] : this[this.length + t]);\n              },\n              length: 0,\n              push: m,\n              sort: [].sort,\n              splice: [].splice\n            }),\n            Ne = {};\n          C(\"multiple,selected,checked,disabled,readOnly,required,open\".split(\",\"), function(t) {\n            Ne[h(t)] = t;\n          });\n          var Me = {};\n          C(\"input,select,option,textarea,button,form,details\".split(\",\"), function(t) {\n            Me[t] = !0;\n          });\n          var Le = {\n            ngMinlength: \"minlength\",\n            ngMaxlength: \"maxlength\",\n            ngMin: \"min\",\n            ngMax: \"max\",\n            ngPattern: \"pattern\",\n            ngStep: \"step\"\n          };\n          function De(t, e) {\n            var n = Ne[e.toLowerCase()];\n            return n && Me[it(t)] && n;\n          }\n          function Ie(t, e, n) {\n            n.call(t, e);\n          }\n          function Re(t, e, n) {\n            var r = e.relatedTarget;\n            (r && (r === t || pe.call(t, r))) || n.call(t, e);\n          }\n          function Pe() {\n            this.$get = function() {\n              return O(he, {\n                hasClass: function(t, e) {\n                  return t.attr && (t = t[0]), xe(t, e);\n                },\n                addClass: function(t, e) {\n                  return t.attr && (t = t[0]), Ce(t, e);\n                },\n                removeClass: function(t, e) {\n                  return t.attr && (t = t[0]), _e(t, e);\n                }\n              });\n            };\n          }\n          function Ve(t, e) {\n            var n = t && t.$$hashKey;\n            if (n) return \"function\" == typeof n && (n = t.$$hashKey()), n;\n            var r = typeof t;\n            return (n =\n              \"function\" === r || (\"object\" === r && null !== t)\n                ? (t.$$hashKey = r + \":\" + (e || k)())\n                : r + \":\" + t);\n          }\n          C(\n            {\n              data: we,\n              removeData: ye,\n              hasData: function(t) {\n                for (var e in Yt[t.ng339]) return !0;\n                return !1;\n              },\n              cleanData: function(t) {\n                for (var e = 0, n = t.length; e < n; e++) ye(t[e]), $e(t[e]);\n              }\n            },\n            function(t, e) {\n              he[e] = t;\n            }\n          ),\n            C(\n              {\n                data: we,\n                inheritedData: ke,\n                scope: function(t) {\n                  return u.data(t, \"$scope\") || ke(t.parentNode || t, [\"$isolateScope\", \"$scope\"]);\n                },\n                isolateScope: function(t) {\n                  return u.data(t, \"$isolateScope\") || u.data(t, \"$isolateScopeNoTemplate\");\n                },\n                controller: Ee,\n                injector: function(t) {\n                  return ke(t, \"$injector\");\n                },\n                removeAttr: function(t, e) {\n                  t.removeAttribute(e);\n                },\n                hasClass: xe,\n                css: function(t, e, n) {\n                  if (\n                    ((e = (function(t) {\n                      return re(t.replace(Qt, \"ms-\"));\n                    })(e)),\n                    !q(n))\n                  )\n                    return t.style[e];\n                  t.style[e] = n;\n                },\n                attr: function(t, e, n) {\n                  var r,\n                    i = t.nodeType;\n                  if (i !== Ht && 2 !== i && i !== Bt && t.getAttribute) {\n                    var o = h(e),\n                      a = Ne[o];\n                    if (!q(n))\n                      return (\n                        (r = t.getAttribute(e)), a && null !== r && (r = o), null === r ? void 0 : r\n                      );\n                    null === n || (!1 === n && a)\n                      ? t.removeAttribute(e)\n                      : t.setAttribute(e, a ? o : n);\n                  }\n                },\n                prop: function(t, e, n) {\n                  if (!q(n)) return t[e];\n                  t[e] = n;\n                },\n                text: (function() {\n                  return (t.$dv = \"\"), t;\n                  function t(t, e) {\n                    if (V(e)) {\n                      var n = t.nodeType;\n                      return n === Ft || n === Ht ? t.textContent : \"\";\n                    }\n                    t.textContent = e;\n                  }\n                })(),\n                val: function(t, e) {\n                  if (V(e)) {\n                    if (t.multiple && \"select\" === it(t)) {\n                      var n = [];\n                      return (\n                        C(t.options, function(t) {\n                          t.selected && n.push(t.value || t.text);\n                        }),\n                        n\n                      );\n                    }\n                    return t.value;\n                  }\n                  t.value = e;\n                },\n                html: function(t, e) {\n                  if (V(e)) return t.innerHTML;\n                  ve(t, !0), (t.innerHTML = e);\n                },\n                empty: Ae\n              },\n              function(t, e) {\n                he.prototype[e] = function(e, n) {\n                  var r,\n                    i,\n                    o = this.length;\n                  if (t !== Ae && V(2 === t.length && t !== xe && t !== Ee ? e : n)) {\n                    if (U(e)) {\n                      for (r = 0; r < o; r++)\n                        if (t === we) t(this[r], e);\n                        else for (i in e) t(this[r], i, e[i]);\n                      return this;\n                    }\n                    for (var a = t.$dv, u = V(a) ? Math.min(o, 1) : o, s = 0; s < u; s++) {\n                      var c = t(this[s], e, n);\n                      a = a ? a + c : c;\n                    }\n                    return a;\n                  }\n                  for (r = 0; r < o; r++) t(this[r], e, n);\n                  return this;\n                };\n              }\n            ),\n            C(\n              {\n                removeData: ye,\n                on: function(t, e, n, r) {\n                  if (q(r))\n                    throw ee(\n                      \"onargs\",\n                      \"jqLite#on() does not support the `selector` or `eventData` parameters\"\n                    );\n                  if (le(t)) {\n                    var i = be(t, !0),\n                      o = i.events,\n                      a = i.handle;\n                    a ||\n                      (a = i.handle = (function(t, e) {\n                        var n = function(n, r) {\n                          n.isDefaultPrevented = function() {\n                            return n.defaultPrevented;\n                          };\n                          var i = e[r || n.type],\n                            o = i ? i.length : 0;\n                          if (o) {\n                            if (V(n.immediatePropagationStopped)) {\n                              var a = n.stopImmediatePropagation;\n                              n.stopImmediatePropagation = function() {\n                                (n.immediatePropagationStopped = !0),\n                                  n.stopPropagation && n.stopPropagation(),\n                                  a && a.call(n);\n                              };\n                            }\n                            n.isImmediatePropagationStopped = function() {\n                              return !0 === n.immediatePropagationStopped;\n                            };\n                            var u = i.specialHandlerWrapper || Ie;\n                            o > 1 && (i = Gt(i));\n                            for (var s = 0; s < o; s++)\n                              n.isImmediatePropagationStopped() || u(t, n, i[s]);\n                          }\n                        };\n                        return (n.elem = t), n;\n                      })(t, o));\n                    for (\n                      var u = e.indexOf(\" \") >= 0 ? e.split(\" \") : [e],\n                        s = u.length,\n                        c = function(e, r, i) {\n                          var u = o[e];\n                          u ||\n                            (((u = o[e] = []).specialHandlerWrapper = r),\n                            \"$destroy\" === e || i || t.addEventListener(e, a)),\n                            u.push(n);\n                        };\n                      s--;\n\n                    )\n                      (e = u[s]), te[e] ? (c(te[e], Re), c(e, void 0, !0)) : c(e);\n                  }\n                },\n                off: $e,\n                one: function(t, e, n) {\n                  (t = u(t)).on(e, function r() {\n                    t.off(e, n), t.off(e, r);\n                  }),\n                    t.on(e, n);\n                },\n                replaceWith: function(t, e) {\n                  var n,\n                    r = t.parentNode;\n                  ve(t),\n                    C(new he(e), function(e) {\n                      n ? r.insertBefore(e, n.nextSibling) : r.replaceChild(e, t), (n = e);\n                    });\n                },\n                children: function(t) {\n                  var e = [];\n                  return (\n                    C(t.childNodes, function(t) {\n                      t.nodeType === Ft && e.push(t);\n                    }),\n                    e\n                  );\n                },\n                contents: function(t) {\n                  return t.contentDocument || t.childNodes || [];\n                },\n                append: function(t, e) {\n                  var n = t.nodeType;\n                  if (n === Ft || n === Wt)\n                    for (var r = 0, i = (e = new he(e)).length; r < i; r++) {\n                      var o = e[r];\n                      t.appendChild(o);\n                    }\n                },\n                prepend: function(t, e) {\n                  if (t.nodeType === Ft) {\n                    var n = t.firstChild;\n                    C(new he(e), function(e) {\n                      t.insertBefore(e, n);\n                    });\n                  }\n                },\n                wrap: function(t, e) {\n                  !(function(t, e) {\n                    var n = t.parentNode;\n                    n && n.replaceChild(e, t), e.appendChild(t);\n                  })(\n                    t,\n                    u(e)\n                      .eq(0)\n                      .clone()[0]\n                  );\n                },\n                remove: Te,\n                detach: function(t) {\n                  Te(t, !0);\n                },\n                after: function(t, e) {\n                  var n = t,\n                    r = t.parentNode;\n                  if (r)\n                    for (var i = 0, o = (e = new he(e)).length; i < o; i++) {\n                      var a = e[i];\n                      r.insertBefore(a, n.nextSibling), (n = a);\n                    }\n                },\n                addClass: Ce,\n                removeClass: _e,\n                toggleClass: function(t, e, n) {\n                  e &&\n                    C(e.split(\" \"), function(e) {\n                      var r = n;\n                      V(r) && (r = !xe(t, e)), (r ? Ce : _e)(t, e);\n                    });\n                },\n                parent: function(t) {\n                  var e = t.parentNode;\n                  return e && e.nodeType !== Wt ? e : null;\n                },\n                next: function(t) {\n                  return t.nextElementSibling;\n                },\n                find: function(t, e) {\n                  return t.getElementsByTagName ? t.getElementsByTagName(e) : [];\n                },\n                clone: de,\n                triggerHandler: function(t, e, n) {\n                  var r,\n                    i,\n                    o,\n                    a = e.type || e,\n                    u = be(t),\n                    s = u && u.events,\n                    c = s && s[a];\n                  c &&\n                    ((r = {\n                      preventDefault: function() {\n                        this.defaultPrevented = !0;\n                      },\n                      isDefaultPrevented: function() {\n                        return !0 === this.defaultPrevented;\n                      },\n                      stopImmediatePropagation: function() {\n                        this.immediatePropagationStopped = !0;\n                      },\n                      isImmediatePropagationStopped: function() {\n                        return !0 === this.immediatePropagationStopped;\n                      },\n                      stopPropagation: D,\n                      type: a,\n                      target: t\n                    }),\n                    e.type && (r = O(r, e)),\n                    (i = Gt(c)),\n                    (o = n ? [r].concat(n) : [r]),\n                    C(i, function(e) {\n                      r.isImmediatePropagationStopped() || e.apply(t, o);\n                    }));\n                }\n              },\n              function(t, e) {\n                he.prototype[e] = function(e, n, r) {\n                  for (var i, o = 0, a = this.length; o < a; o++)\n                    V(i) ? q((i = t(this[o], e, n, r))) && (i = u(i)) : Se(i, t(this[o], e, n, r));\n                  return q(i) ? i : this;\n                };\n              }\n            ),\n            (he.prototype.bind = he.prototype.on),\n            (he.prototype.unbind = he.prototype.off);\n          var qe = Object.create(null);\n          function Ue() {\n            (this._keys = []), (this._values = []), (this._lastKey = NaN), (this._lastIndex = -1);\n          }\n          Ue.prototype = {\n            _idx: function(t) {\n              return (\n                t !== this._lastKey &&\n                  ((this._lastKey = t), (this._lastIndex = this._keys.indexOf(t))),\n                this._lastIndex\n              );\n            },\n            _transformKey: function(t) {\n              return M(t) ? qe : t;\n            },\n            get: function(t) {\n              t = this._transformKey(t);\n              var e = this._idx(t);\n              if (-1 !== e) return this._values[e];\n            },\n            has: function(t) {\n              return (t = this._transformKey(t)), -1 !== this._idx(t);\n            },\n            set: function(t, e) {\n              t = this._transformKey(t);\n              var n = this._idx(t);\n              -1 === n && (n = this._lastIndex = this._keys.length),\n                (this._keys[n] = t),\n                (this._values[n] = e);\n            },\n            delete: function(t) {\n              t = this._transformKey(t);\n              var e = this._idx(t);\n              return (\n                -1 !== e &&\n                (this._keys.splice(e, 1),\n                this._values.splice(e, 1),\n                (this._lastKey = NaN),\n                (this._lastIndex = -1),\n                !0)\n              );\n            }\n          };\n          var Fe = Ue,\n            He = [\n              function() {\n                this.$get = [\n                  function() {\n                    return Fe;\n                  }\n                ];\n              }\n            ],\n            Be = /^([^(]+?)=>/,\n            ze = /^[^(]*\\(\\s*([^)]*)\\)/m,\n            We = /,/,\n            Ge = /^\\s*(_?)(\\S+?)\\1\\s*$/,\n            Ke = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/gm,\n            Je = o(\"$injector\");\n          function Ye(t) {\n            return Function.prototype.toString.call(t);\n          }\n          function Ze(t) {\n            var e = Ye(t).replace(Ke, \"\");\n            return e.match(Be) || e.match(ze);\n          }\n          function Xe(t, e) {\n            e = !0 === e;\n            var n = {},\n              r = \"Provider\",\n              i = [],\n              o = new Fe(),\n              u = {\n                $provide: {\n                  provider: d(v),\n                  factory: d(g),\n                  service: d(function(t, e) {\n                    return g(t, [\n                      \"$injector\",\n                      function(t) {\n                        return t.instantiate(e);\n                      }\n                    ]);\n                  }),\n                  value: d(function(t, e) {\n                    return g(t, R(e), !1);\n                  }),\n                  constant: d(function(t, e) {\n                    Pt(t, \"constant\"), (u[t] = e), (l[t] = e);\n                  }),\n                  decorator: function(t, e) {\n                    var n = s.get(t + r),\n                      i = n.$get;\n                    n.$get = function() {\n                      var t = p.invoke(i, n);\n                      return p.invoke(e, null, { $delegate: t });\n                    };\n                  }\n                }\n              },\n              s = (u.$injector = $(u, function(t, e) {\n                throw (w.isString(e) && i.push(e),\n                Je(\"unpr\", \"Unknown provider: {0}\", i.join(\" <- \")));\n              })),\n              l = {},\n              f = $(l, function(t, e) {\n                var n = s.get(t + r, e);\n                return p.invoke(n.$get, n, void 0, t);\n              }),\n              p = f;\n            (u[\"$injector\" + r] = { $get: R(f) }), (p.modules = s.modules = qt());\n            var h = m(t);\n            return (\n              ((p = f.get(\"$injector\")).strictDi = e),\n              C(h, function(t) {\n                t && p.invoke(t);\n              }),\n              (p.loadNewModules = function(t) {\n                C(m(t), function(t) {\n                  t && p.invoke(t);\n                });\n              }),\n              p\n            );\n            function d(t) {\n              return function(e, n) {\n                if (!U(e)) return t(e, n);\n                C(e, E(t));\n              };\n            }\n            function v(t, e) {\n              if ((Pt(t, \"service\"), (K(e) || W(e)) && (e = s.instantiate(e)), !e.$get))\n                throw Je(\"pget\", \"Provider '{0}' must define $get factory method.\", t);\n              return (u[t + r] = e);\n            }\n            function g(t, e, n) {\n              return v(t, {\n                $get:\n                  !1 !== n\n                    ? (function(t, e) {\n                        return function() {\n                          var n = p.invoke(e, this);\n                          if (V(n))\n                            throw Je(\n                              \"undef\",\n                              \"Provider '{0}' must return a value from $get factory method.\",\n                              t\n                            );\n                          return n;\n                        };\n                      })(t, e)\n                    : e\n              });\n            }\n            function m(t) {\n              It(V(t) || W(t), \"modulesToLoad\", \"not an array\");\n              var e,\n                n = [];\n              return (\n                C(t, function(t) {\n                  if (!o.get(t)) {\n                    o.set(t, !0);\n                    try {\n                      H(t)\n                        ? ((e = c(t)),\n                          (p.modules[t] = e),\n                          (n = n.concat(m(e.requires)).concat(e._runBlocks)),\n                          r(e._invokeQueue),\n                          r(e._configBlocks))\n                        : K(t)\n                          ? n.push(s.invoke(t))\n                          : W(t)\n                            ? n.push(s.invoke(t))\n                            : Rt(t, \"module\");\n                    } catch (e) {\n                      throw (W(t) && (t = t[t.length - 1]),\n                      e.message &&\n                        e.stack &&\n                        -1 === e.stack.indexOf(e.message) &&\n                        (e = e.message + \"\\n\" + e.stack),\n                      Je(\n                        \"modulerr\",\n                        \"Failed to instantiate module {0} due to:\\n{1}\",\n                        t,\n                        e.stack || e.message || e\n                      ));\n                    }\n                  }\n                  function r(t) {\n                    var e, n;\n                    for (e = 0, n = t.length; e < n; e++) {\n                      var r = t[e],\n                        i = s.get(r[0]);\n                      i[r[1]].apply(i, r[2]);\n                    }\n                  }\n                }),\n                n\n              );\n            }\n            function $(t, o) {\n              function s(e, r) {\n                if (t.hasOwnProperty(e)) {\n                  if (t[e] === n)\n                    throw Je(\"cdep\", \"Circular dependency found: {0}\", e + \" <- \" + i.join(\" <- \"));\n                  return t[e];\n                }\n                try {\n                  return i.unshift(e), (t[e] = n), (t[e] = o(e, r)), t[e];\n                } catch (r) {\n                  throw (t[e] === n && delete t[e], r);\n                } finally {\n                  i.shift();\n                }\n              }\n              function c(t, n, r) {\n                for (var i = [], o = Xe.$$annotate(t, e, r), a = 0, u = o.length; a < u; a++) {\n                  var c = o[a];\n                  if (\"string\" != typeof c)\n                    throw Je(\n                      \"itkn\",\n                      \"Incorrect injection token! Expected service name as string, got {0}\",\n                      c\n                    );\n                  i.push(n && n.hasOwnProperty(c) ? n[c] : s(c, r));\n                }\n                return i;\n              }\n              return {\n                invoke: function(t, e, n, r) {\n                  \"string\" == typeof n && ((r = n), (n = null));\n                  var i = c(t, n, r);\n                  return (\n                    W(t) && (t = t[t.length - 1]),\n                    (function(t) {\n                      if (a || \"function\" != typeof t) return !1;\n                      var e = t.$$ngIsClass;\n                      return X(e) || (e = t.$$ngIsClass = /^class\\b/.test(Ye(t))), e;\n                    })(t)\n                      ? (i.unshift(null), new (Function.prototype.bind.apply(t, i))())\n                      : t.apply(e, i)\n                  );\n                },\n                instantiate: function(t, e, n) {\n                  var r = W(t) ? t[t.length - 1] : t,\n                    i = c(t, e, n);\n                  return i.unshift(null), new (Function.prototype.bind.apply(r, i))();\n                },\n                get: s,\n                annotate: Xe.$$annotate,\n                has: function(e) {\n                  return u.hasOwnProperty(e + r) || t.hasOwnProperty(e);\n                }\n              };\n            }\n          }\n          function Qe() {\n            var t = !0;\n            (this.disableAutoScrolling = function() {\n              t = !1;\n            }),\n              (this.$get = [\n                \"$window\",\n                \"$location\",\n                \"$rootScope\",\n                function(n, r, i) {\n                  var o = n.document;\n                  function a(t) {\n                    if (t) {\n                      t.scrollIntoView();\n                      var e = (function() {\n                        var t = s.yOffset;\n                        if (K(t)) t = t();\n                        else if (rt(t)) {\n                          var e = t[0];\n                          t =\n                            \"fixed\" !== n.getComputedStyle(e).position\n                              ? 0\n                              : e.getBoundingClientRect().bottom;\n                        } else B(t) || (t = 0);\n                        return t;\n                      })();\n                      if (e) {\n                        var r = t.getBoundingClientRect().top;\n                        n.scrollBy(0, r - e);\n                      }\n                    } else n.scrollTo(0, 0);\n                  }\n                  function s(t) {\n                    var e;\n                    (t = H(t) ? t : B(t) ? t.toString() : r.hash())\n                      ? (e = o.getElementById(t))\n                        ? a(e)\n                        : (e = (function(t) {\n                            var e = null;\n                            return (\n                              Array.prototype.some.call(t, function(t) {\n                                if (\"a\" === it(t)) return (e = t), !0;\n                              }),\n                              e\n                            );\n                          })(o.getElementsByName(t)))\n                          ? a(e)\n                          : \"top\" === t && a(null)\n                      : a(null);\n                  }\n                  return (\n                    t &&\n                      i.$watch(\n                        function() {\n                          return r.hash();\n                        },\n                        function(t, n) {\n                          (t === n && \"\" === t) ||\n                            (function(t, n) {\n                              \"complete\" === (n = n || e).document.readyState\n                                ? n.setTimeout(t)\n                                : u(n).on(\"load\", t);\n                            })(function() {\n                              i.$evalAsync(s);\n                            });\n                        }\n                      ),\n                    s\n                  );\n                }\n              ]);\n          }\n          Xe.$$annotate = function(t, e, n) {\n            var r, i;\n            if (\"function\" == typeof t) {\n              if (!(r = t.$inject)) {\n                if (((r = []), t.length)) {\n                  if (e)\n                    throw ((H(n) && n) ||\n                      (n =\n                        t.name ||\n                        (function(t) {\n                          var e = Ze(t);\n                          return e\n                            ? \"function(\" + (e[1] || \"\").replace(/[\\s\\r\\n]+/, \" \") + \")\"\n                            : \"fn\";\n                        })(t)),\n                    Je(\n                      \"strictdi\",\n                      \"{0} is not using explicit annotation and cannot be invoked in strict mode\",\n                      n\n                    ));\n                  C(Ze(t)[1].split(We), function(t) {\n                    t.replace(Ge, function(t, e, n) {\n                      r.push(n);\n                    });\n                  });\n                }\n                t.$inject = r;\n              }\n            } else W(t) ? (Rt(t[(i = t.length - 1)], \"fn\"), (r = t.slice(0, i))) : Rt(t, \"fn\", !0);\n            return r;\n          };\n          var tn = o(\"$animate\"),\n            en = 1;\n          function nn(t, e) {\n            return t || e\n              ? t\n                ? e\n                  ? (W(t) && (t = t.join(\" \")), W(e) && (e = e.join(\" \")), t + \" \" + e)\n                  : t\n                : e\n              : \"\";\n          }\n          function rn(t) {\n            return U(t) ? t : {};\n          }\n          var on = function() {\n              this.$get = D;\n            },\n            an = function() {\n              var t = new Fe(),\n                e = [];\n              this.$get = [\n                \"$$AnimateRunner\",\n                \"$rootScope\",\n                function(n, r) {\n                  return {\n                    enabled: D,\n                    on: D,\n                    off: D,\n                    pin: D,\n                    push: function(a, u, s, c) {\n                      c && c(),\n                        (s = s || {}).from && a.css(s.from),\n                        s.to && a.css(s.to),\n                        (s.addClass || s.removeClass) &&\n                          (function(n, a, u) {\n                            var s = t.get(n) || {},\n                              c = i(s, a, !0),\n                              l = i(s, u, !1);\n                            (c || l) &&\n                              (t.set(n, s), e.push(n), 1 === e.length && r.$$postDigest(o));\n                          })(a, s.addClass, s.removeClass);\n                      var l = new n();\n                      return l.complete(), l;\n                    }\n                  };\n                  function i(t, e, n) {\n                    var r = !1;\n                    return (\n                      e &&\n                        C((e = H(e) ? e.split(\" \") : W(e) ? e : []), function(e) {\n                          e && ((r = !0), (t[e] = n));\n                        }),\n                      r\n                    );\n                  }\n                  function o() {\n                    C(e, function(e) {\n                      var n = t.get(e);\n                      if (n) {\n                        var r = (function(t) {\n                            H(t) && (t = t.split(\" \"));\n                            var e = qt();\n                            return (\n                              C(t, function(t) {\n                                t.length && (e[t] = !0);\n                              }),\n                              e\n                            );\n                          })(e.attr(\"class\")),\n                          i = \"\",\n                          o = \"\";\n                        C(n, function(t, e) {\n                          t !== !!r[e] &&\n                            (t\n                              ? (i += (i.length ? \" \" : \"\") + e)\n                              : (o += (o.length ? \" \" : \"\") + e));\n                        }),\n                          C(e, function(t) {\n                            i && Ce(t, i), o && _e(t, o);\n                          }),\n                          t.delete(e);\n                      }\n                    }),\n                      (e.length = 0);\n                  }\n                }\n              ];\n            },\n            un = [\n              \"$provide\",\n              function(t) {\n                var e = this,\n                  n = null,\n                  r = null;\n                (this.$$registeredAnimations = Object.create(null)),\n                  (this.register = function(n, r) {\n                    if (n && \".\" !== n.charAt(0))\n                      throw tn(\n                        \"notcsel\",\n                        \"Expecting class selector starting with '.' got '{0}'.\",\n                        n\n                      );\n                    var i = n + \"-animation\";\n                    (e.$$registeredAnimations[n.substr(1)] = i), t.factory(i, r);\n                  }),\n                  (this.customFilter = function(t) {\n                    return 1 === arguments.length && (r = K(t) ? t : null), r;\n                  }),\n                  (this.classNameFilter = function(t) {\n                    if (\n                      1 === arguments.length &&\n                      ((n = t instanceof RegExp ? t : null) &&\n                        new RegExp(\"[(\\\\s|\\\\/)]ng-animate[(\\\\s|\\\\/)]\").test(n.toString()))\n                    )\n                      throw ((n = null),\n                      tn(\n                        \"nongcls\",\n                        '$animateProvider.classNameFilter(regex) prohibits accepting a regex value which matches/contains the \"{0}\" CSS class.',\n                        \"ng-animate\"\n                      ));\n                    return n;\n                  }),\n                  (this.$get = [\n                    \"$$animateQueue\",\n                    function(t) {\n                      function e(t, e, n) {\n                        if (n) {\n                          var r = (function(t) {\n                            for (var e = 0; e < t.length; e++) {\n                              var n = t[e];\n                              if (n.nodeType === en) return n;\n                            }\n                          })(n);\n                          !r || r.parentNode || r.previousElementSibling || (n = null);\n                        }\n                        n ? n.after(t) : e.prepend(t);\n                      }\n                      return {\n                        on: t.on,\n                        off: t.off,\n                        pin: t.pin,\n                        enabled: t.enabled,\n                        cancel: function(t) {\n                          t.cancel && t.cancel();\n                        },\n                        enter: function(n, r, i, o) {\n                          return (\n                            (r = r && u(r)),\n                            (i = i && u(i)),\n                            e(n, (r = r || i.parent()), i),\n                            t.push(n, \"enter\", rn(o))\n                          );\n                        },\n                        move: function(n, r, i, o) {\n                          return (\n                            (r = r && u(r)),\n                            (i = i && u(i)),\n                            e(n, (r = r || i.parent()), i),\n                            t.push(n, \"move\", rn(o))\n                          );\n                        },\n                        leave: function(e, n) {\n                          return t.push(e, \"leave\", rn(n), function() {\n                            e.remove();\n                          });\n                        },\n                        addClass: function(e, n, r) {\n                          return (\n                            ((r = rn(r)).addClass = nn(r.addclass, n)), t.push(e, \"addClass\", r)\n                          );\n                        },\n                        removeClass: function(e, n, r) {\n                          return (\n                            ((r = rn(r)).removeClass = nn(r.removeClass, n)),\n                            t.push(e, \"removeClass\", r)\n                          );\n                        },\n                        setClass: function(e, n, r, i) {\n                          return (\n                            ((i = rn(i)).addClass = nn(i.addClass, n)),\n                            (i.removeClass = nn(i.removeClass, r)),\n                            t.push(e, \"setClass\", i)\n                          );\n                        },\n                        animate: function(e, n, r, i, o) {\n                          return (\n                            ((o = rn(o)).from = o.from ? O(o.from, n) : n),\n                            (o.to = o.to ? O(o.to, r) : r),\n                            (i = i || \"ng-inline-animate\"),\n                            (o.tempClasses = nn(o.tempClasses, i)),\n                            t.push(e, \"animate\", o)\n                          );\n                        }\n                      };\n                    }\n                  ]);\n              }\n            ],\n            sn = function() {\n              this.$get = [\n                \"$$rAF\",\n                function(t) {\n                  var e = [];\n                  function n(n) {\n                    e.push(n),\n                      e.length > 1 ||\n                        t(function() {\n                          for (var t = 0; t < e.length; t++) e[t]();\n                          e = [];\n                        });\n                  }\n                  return function() {\n                    var t = !1;\n                    return (\n                      n(function() {\n                        t = !0;\n                      }),\n                      function(e) {\n                        t ? e() : n(e);\n                      }\n                    );\n                  };\n                }\n              ];\n            },\n            cn = function() {\n              this.$get = [\n                \"$q\",\n                \"$sniffer\",\n                \"$$animateAsyncRun\",\n                \"$$isDocumentHidden\",\n                \"$timeout\",\n                function(t, e, n, r, i) {\n                  function o(t) {\n                    this.setHost(t);\n                    var e = n();\n                    (this._doneCallbacks = []),\n                      (this._tick = function(t) {\n                        r()\n                          ? (function(t) {\n                              i(t, 0, !1);\n                            })(t)\n                          : e(t);\n                      }),\n                      (this._state = 0);\n                  }\n                  return (\n                    (o.chain = function(t, e) {\n                      var n = 0;\n                      !(function r() {\n                        if (n === t.length) return void e(!0);\n                        t[n](function(t) {\n                          !1 !== t ? (n++, r()) : e(!1);\n                        });\n                      })();\n                    }),\n                    (o.all = function(t, e) {\n                      var n = 0,\n                        r = !0;\n                      function i(i) {\n                        (r = r && i), ++n === t.length && e(r);\n                      }\n                      C(t, function(t) {\n                        t.done(i);\n                      });\n                    }),\n                    (o.prototype = {\n                      setHost: function(t) {\n                        this.host = t || {};\n                      },\n                      done: function(t) {\n                        2 === this._state ? t() : this._doneCallbacks.push(t);\n                      },\n                      progress: D,\n                      getPromise: function() {\n                        if (!this.promise) {\n                          var e = this;\n                          this.promise = t(function(t, n) {\n                            e.done(function(e) {\n                              !1 === e ? n() : t();\n                            });\n                          });\n                        }\n                        return this.promise;\n                      },\n                      then: function(t, e) {\n                        return this.getPromise().then(t, e);\n                      },\n                      catch: function(t) {\n                        return this.getPromise().catch(t);\n                      },\n                      finally: function(t) {\n                        return this.getPromise().finally(t);\n                      },\n                      pause: function() {\n                        this.host.pause && this.host.pause();\n                      },\n                      resume: function() {\n                        this.host.resume && this.host.resume();\n                      },\n                      end: function() {\n                        this.host.end && this.host.end(), this._resolve(!0);\n                      },\n                      cancel: function() {\n                        this.host.cancel && this.host.cancel(), this._resolve(!1);\n                      },\n                      complete: function(t) {\n                        var e = this;\n                        0 === e._state &&\n                          ((e._state = 1),\n                          e._tick(function() {\n                            e._resolve(t);\n                          }));\n                      },\n                      _resolve: function(t) {\n                        2 !== this._state &&\n                          (C(this._doneCallbacks, function(e) {\n                            e(t);\n                          }),\n                          (this._doneCallbacks.length = 0),\n                          (this._state = 2));\n                      }\n                    }),\n                    o\n                  );\n                }\n              ];\n            },\n            ln = function() {\n              this.$get = [\n                \"$$rAF\",\n                \"$q\",\n                \"$$AnimateRunner\",\n                function(t, e, n) {\n                  return function(e, r) {\n                    var i = r || {};\n                    i.$$prepared || (i = ut(i)),\n                      i.cleanupStyles && (i.from = i.to = null),\n                      i.from && (e.css(i.from), (i.from = null));\n                    var o,\n                      a = new n();\n                    return { start: u, end: u };\n                    function u() {\n                      return (\n                        t(function() {\n                          !(function() {\n                            i.addClass && (e.addClass(i.addClass), (i.addClass = null));\n                            i.removeClass && (e.removeClass(i.removeClass), (i.removeClass = null));\n                            i.to && (e.css(i.to), (i.to = null));\n                          })(),\n                            o || a.complete(),\n                            (o = !0);\n                        }),\n                        a\n                      );\n                    }\n                  };\n                }\n              ];\n            };\n          function fn() {\n            this.$get = [\n              \"$window\",\n              \"$log\",\n              \"$sniffer\",\n              \"$document\",\n              \"$$taskTrackerFactory\",\n              function(t, e, n, r, i) {\n                return new function(t, e, n, r, i) {\n                  var o = this,\n                    a = t.location,\n                    s = t.history,\n                    c = t.setTimeout,\n                    l = t.clearTimeout,\n                    f = {},\n                    p = i(n);\n                  (o.isMock = !1),\n                    (o.$$completeOutstandingRequest = p.completeTask),\n                    (o.$$incOutstandingRequestCount = p.incTaskCount),\n                    (o.notifyWhenNoOutstandingRequests = p.notifyWhenNoPendingTasks);\n                  var h,\n                    d,\n                    v = a.href,\n                    g = e.find(\"base\"),\n                    m = null,\n                    $ = r.history\n                      ? function() {\n                          try {\n                            return s.state;\n                          } catch (t) {}\n                        }\n                      : D;\n                  _(),\n                    (o.url = function(e, n, i) {\n                      if (\n                        (V(i) && (i = null),\n                        a !== t.location && (a = t.location),\n                        s !== t.history && (s = t.history),\n                        e)\n                      ) {\n                        var u = d === i;\n                        if (v === e && (!r.history || u)) return o;\n                        var c = v && sr(v) === sr(e);\n                        return (\n                          (v = e),\n                          (d = i),\n                          !r.history || (c && u)\n                            ? (c || (m = e),\n                              n\n                                ? a.replace(e)\n                                : c\n                                  ? (a.hash = (function(t) {\n                                      var e = t.indexOf(\"#\");\n                                      return -1 === e ? \"\" : t.substr(e);\n                                    })(e))\n                                  : (a.href = e),\n                              a.href !== e && (m = e))\n                            : (s[n ? \"replaceState\" : \"pushState\"](i, \"\", e), _()),\n                          m && (m = e),\n                          o\n                        );\n                      }\n                      return (function(t) {\n                        return t.replace(/#$/, \"\");\n                      })(m || a.href);\n                    }),\n                    (o.state = function() {\n                      return h;\n                    });\n                  var y = [],\n                    b = !1;\n                  function w() {\n                    (m = null), S();\n                  }\n                  var x = null;\n                  function _() {\n                    ct((h = V((h = $())) ? null : h), x) && (h = x), (x = h), (d = h);\n                  }\n                  function S() {\n                    var t = d;\n                    _(),\n                      (v === o.url() && t === h) ||\n                        ((v = o.url()),\n                        (d = h),\n                        C(y, function(t) {\n                          t(o.url(), h);\n                        }));\n                  }\n                  (o.onUrlChange = function(e) {\n                    return (\n                      b ||\n                        (r.history && u(t).on(\"popstate\", w), u(t).on(\"hashchange\", w), (b = !0)),\n                      y.push(e),\n                      e\n                    );\n                  }),\n                    (o.$$applicationDestroyed = function() {\n                      u(t).off(\"hashchange popstate\", w);\n                    }),\n                    (o.$$checkUrlChange = S),\n                    (o.baseHref = function() {\n                      var t = g.attr(\"href\");\n                      return t ? t.replace(/^(https?:)?\\/\\/[^/]*/, \"\") : \"\";\n                    }),\n                    (o.defer = function(t, e, n) {\n                      var r;\n                      return (\n                        (e = e || 0),\n                        (n = n || p.DEFAULT_TASK_TYPE),\n                        p.incTaskCount(n),\n                        (r = c(function() {\n                          delete f[r], p.completeTask(t, n);\n                        }, e)),\n                        (f[r] = n),\n                        r\n                      );\n                    }),\n                    (o.defer.cancel = function(t) {\n                      if (f.hasOwnProperty(t)) {\n                        var e = f[t];\n                        return delete f[t], l(t), p.completeTask(D, e), !0;\n                      }\n                      return !1;\n                    });\n                }(t, r, e, n, i);\n              }\n            ];\n          }\n          function pn() {\n            this.$get = function() {\n              var t = {};\n              function e(e, n) {\n                if (e in t) throw o(\"$cacheFactory\")(\"iid\", \"CacheId '{0}' is already taken!\", e);\n                var r = 0,\n                  i = O({}, n, { id: e }),\n                  a = qt(),\n                  u = (n && n.capacity) || Number.MAX_VALUE,\n                  s = qt(),\n                  c = null,\n                  l = null;\n                return (t[e] = {\n                  put: function(t, e) {\n                    if (!V(e)) {\n                      if (u < Number.MAX_VALUE) f(s[t] || (s[t] = { key: t }));\n                      return t in a || r++, (a[t] = e), r > u && this.remove(l.key), e;\n                    }\n                  },\n                  get: function(t) {\n                    if (u < Number.MAX_VALUE) {\n                      var e = s[t];\n                      if (!e) return;\n                      f(e);\n                    }\n                    return a[t];\n                  },\n                  remove: function(t) {\n                    if (u < Number.MAX_VALUE) {\n                      var e = s[t];\n                      if (!e) return;\n                      e === c && (c = e.p), e === l && (l = e.n), p(e.n, e.p), delete s[t];\n                    }\n                    t in a && (delete a[t], r--);\n                  },\n                  removeAll: function() {\n                    (a = qt()), (r = 0), (s = qt()), (c = l = null);\n                  },\n                  destroy: function() {\n                    (a = null), (i = null), (s = null), delete t[e];\n                  },\n                  info: function() {\n                    return O({}, i, { size: r });\n                  }\n                });\n                function f(t) {\n                  t !== c &&\n                    (l ? l === t && (l = t.n) : (l = t), p(t.n, t.p), p(t, c), ((c = t).n = null));\n                }\n                function p(t, e) {\n                  t !== e && (t && (t.p = e), e && (e.n = t));\n                }\n              }\n              return (\n                (e.info = function() {\n                  var e = {};\n                  return (\n                    C(t, function(t, n) {\n                      e[n] = t.info();\n                    }),\n                    e\n                  );\n                }),\n                (e.get = function(e) {\n                  return t[e];\n                }),\n                e\n              );\n            };\n          }\n          function hn() {\n            this.$get = [\n              \"$cacheFactory\",\n              function(t) {\n                return t(\"templates\");\n              }\n            ];\n          }\n          var dn = o(\"$compile\");\n          var vn = new function() {}();\n          function gn(t, n) {\n            var r = {},\n              i = \"Directive\",\n              o = /^\\s*directive:\\s*([\\w-]+)\\s+(.*)$/,\n              s = /(([\\w-]+)(?::([^;]+))?;?)/,\n              c = (function(t) {\n                var e,\n                  n = {},\n                  r = t.split(\",\");\n                for (e = 0; e < r.length; e++) n[r[e]] = !0;\n                return n;\n              })(\"ngSrc,ngSrcset,src,srcset\"),\n              l = /^(?:(\\^\\^?)?(\\?)?(\\^\\^?)?)?/,\n              f = /^(on[a-z]+|formaction)$/,\n              d = qt();\n            function v(t, e, n) {\n              var r = /^([@&]|[=<](\\*?))(\\??)\\s*([\\w$]*)$/,\n                i = qt();\n              return (\n                C(t, function(t, o) {\n                  if ((t = t.trim()) in d) i[o] = d[t];\n                  else {\n                    var a = t.match(r);\n                    if (!a)\n                      throw dn(\n                        \"iscp\",\n                        \"Invalid {3} for directive '{0}'. Definition: {... {1}: '{2}' ...}\",\n                        e,\n                        o,\n                        t,\n                        n ? \"controller bindings definition\" : \"isolate scope definition\"\n                      );\n                    (i[o] = {\n                      mode: a[1][0],\n                      collection: \"*\" === a[2],\n                      optional: \"?\" === a[3],\n                      attrName: a[4] || o\n                    }),\n                      a[4] && (d[t] = i[o]);\n                  }\n                }),\n                i\n              );\n            }\n            function g(t, e) {\n              var n = { isolateScope: null, bindToController: null };\n              if (\n                (U(t.scope) &&\n                  (!0 === t.bindToController\n                    ? ((n.bindToController = v(t.scope, e, !0)), (n.isolateScope = {}))\n                    : (n.isolateScope = v(t.scope, e, !1))),\n                U(t.bindToController) && (n.bindToController = v(t.bindToController, e, !0)),\n                n.bindToController && !t.controller)\n              )\n                throw dn(\n                  \"noctrl\",\n                  \"Cannot bind to controller without directive '{0}'s controller.\",\n                  e\n                );\n              return n;\n            }\n            (this.directive = function e(n, o) {\n              return (\n                It(n, \"name\"),\n                Pt(n, \"directive\"),\n                H(n)\n                  ? (!(function(t) {\n                      var e = t.charAt(0);\n                      if (!e || e !== h(e))\n                        throw dn(\n                          \"baddir\",\n                          \"Directive/Component name '{0}' is invalid. The first character must be a lowercase letter\",\n                          t\n                        );\n                      if (t !== t.trim())\n                        throw dn(\n                          \"baddir\",\n                          \"Directive/Component name '{0}' is invalid. The name should not contain leading or trailing whitespaces\",\n                          t\n                        );\n                    })(n),\n                    It(o, \"directiveFactory\"),\n                    r.hasOwnProperty(n) ||\n                      ((r[n] = []),\n                      t.factory(n + i, [\n                        \"$injector\",\n                        \"$exceptionHandler\",\n                        function(t, e) {\n                          var i = [];\n                          return (\n                            C(r[n], function(r, o) {\n                              try {\n                                var a = t.invoke(r);\n                                K(a)\n                                  ? (a = { compile: R(a) })\n                                  : !a.compile && a.link && (a.compile = R(a.link)),\n                                  (a.priority = a.priority || 0),\n                                  (a.index = o),\n                                  (a.name = a.name || n),\n                                  (a.require = (function(t) {\n                                    var e = t.require || (t.controller && t.name);\n                                    return (\n                                      !W(e) &&\n                                        U(e) &&\n                                        C(e, function(t, n) {\n                                          var r = t.match(l);\n                                          t.substring(r[0].length) || (e[n] = r[0] + n);\n                                        }),\n                                      e\n                                    );\n                                  })(a)),\n                                  (a.restrict = (function(t, e) {\n                                    if (t && (!H(t) || !/[EACM]/.test(t)))\n                                      throw dn(\n                                        \"badrestrict\",\n                                        \"Restrict property '{0}' of directive '{1}' is invalid\",\n                                        t,\n                                        e\n                                      );\n                                    return t || \"EA\";\n                                  })(a.restrict, n)),\n                                  (a.$$moduleName = r.$$moduleName),\n                                  i.push(a);\n                              } catch (t) {\n                                e(t);\n                              }\n                            }),\n                            i\n                          );\n                        }\n                      ])),\n                    r[n].push(o))\n                  : C(n, E(e)),\n                this\n              );\n            }),\n              (this.component = function t(e, n) {\n                if (!H(e)) return C(e, E(dt(this, t))), this;\n                var r = n.controller || function() {};\n                function i(t) {\n                  function e(e) {\n                    return K(e) || W(e)\n                      ? function(n, r) {\n                          return t.invoke(e, this, { $element: n, $attrs: r });\n                        }\n                      : e;\n                  }\n                  var i = n.template || n.templateUrl ? n.template : \"\",\n                    o = {\n                      controller: r,\n                      controllerAs:\n                        (function(t, e) {\n                          if (e && H(e)) return e;\n                          if (H(t)) {\n                            var n = Cn.exec(t);\n                            if (n) return n[3];\n                          }\n                        })(n.controller) ||\n                        n.controllerAs ||\n                        \"$ctrl\",\n                      template: e(i),\n                      templateUrl: e(n.templateUrl),\n                      transclude: n.transclude,\n                      scope: {},\n                      bindToController: n.bindings || {},\n                      restrict: \"E\",\n                      require: n.require\n                    };\n                  return (\n                    C(n, function(t, e) {\n                      \"$\" === e.charAt(0) && (o[e] = t);\n                    }),\n                    o\n                  );\n                }\n                return (\n                  C(n, function(t, e) {\n                    \"$\" === e.charAt(0) && ((i[e] = t), K(r) && (r[e] = t));\n                  }),\n                  (i.$inject = [\"$injector\"]),\n                  this.directive(e, i)\n                );\n              }),\n              (this.aHrefSanitizationWhitelist = function(t) {\n                return q(t)\n                  ? (n.aHrefSanitizationWhitelist(t), this)\n                  : n.aHrefSanitizationWhitelist();\n              }),\n              (this.imgSrcSanitizationWhitelist = function(t) {\n                return q(t)\n                  ? (n.imgSrcSanitizationWhitelist(t), this)\n                  : n.imgSrcSanitizationWhitelist();\n              });\n            var m = !0;\n            this.debugInfoEnabled = function(t) {\n              return q(t) ? ((m = t), this) : m;\n            };\n            var y = !1;\n            this.strictComponentBindingsEnabled = function(t) {\n              return q(t) ? ((y = t), this) : y;\n            };\n            var b = 10;\n            this.onChangesTtl = function(t) {\n              return arguments.length ? ((b = t), this) : b;\n            };\n            var w = !0;\n            this.commentDirectivesEnabled = function(t) {\n              return arguments.length ? ((w = t), this) : w;\n            };\n            var x = !0;\n            this.cssClassDirectivesEnabled = function(t) {\n              return arguments.length ? ((x = t), this) : x;\n            };\n            var _ = qt();\n            (this.addPropertySecurityContext = function(t, e, n) {\n              var r = t.toLowerCase() + \"|\" + e.toLowerCase();\n              if (r in _ && _[r] !== n)\n                throw dn(\n                  \"ctxoverride\",\n                  \"Property context '{0}.{1}' already set to '{2}', cannot override to '{3}'.\",\n                  t,\n                  e,\n                  _[r],\n                  n\n                );\n              return (_[r] = n), this;\n            }),\n              (function() {\n                function t(t, e) {\n                  C(e, function(e) {\n                    _[e.toLowerCase()] = t;\n                  });\n                }\n                t(Gr.HTML, [\"iframe|srcdoc\", \"*|innerHTML\", \"*|outerHTML\"]),\n                  t(Gr.CSS, [\"*|style\"]),\n                  t(Gr.URL, [\n                    \"area|href\",\n                    \"area|ping\",\n                    \"a|href\",\n                    \"a|ping\",\n                    \"blockquote|cite\",\n                    \"body|background\",\n                    \"del|cite\",\n                    \"input|src\",\n                    \"ins|cite\",\n                    \"q|cite\"\n                  ]),\n                  t(Gr.MEDIA_URL, [\n                    \"audio|src\",\n                    \"img|src\",\n                    \"img|srcset\",\n                    \"source|src\",\n                    \"source|srcset\",\n                    \"track|src\",\n                    \"video|src\",\n                    \"video|poster\"\n                  ]),\n                  t(Gr.RESOURCE_URL, [\n                    \"*|formAction\",\n                    \"applet|code\",\n                    \"applet|codebase\",\n                    \"base|href\",\n                    \"embed|src\",\n                    \"frame|src\",\n                    \"form|action\",\n                    \"head|profile\",\n                    \"html|manifest\",\n                    \"iframe|src\",\n                    \"link|href\",\n                    \"media|src\",\n                    \"object|codebase\",\n                    \"object|data\",\n                    \"script|src\"\n                  ]);\n              })(),\n              (this.$get = [\n                \"$injector\",\n                \"$interpolate\",\n                \"$exceptionHandler\",\n                \"$templateRequest\",\n                \"$parse\",\n                \"$controller\",\n                \"$rootScope\",\n                \"$sce\",\n                \"$animate\",\n                function(t, n, d, v, S, E, k, A, T) {\n                  var j,\n                    N = /^\\w/,\n                    M = e.document.createElement(\"div\"),\n                    R = w,\n                    P = x,\n                    q = b;\n                  function F() {\n                    try {\n                      if (!--q)\n                        throw ((j = void 0),\n                        dn(\"infchng\", \"{0} $onChanges() iterations reached. Aborting!\\n\", b));\n                      k.$apply(function() {\n                        for (var t = 0, e = j.length; t < e; ++t)\n                          try {\n                            j[t]();\n                          } catch (t) {\n                            d(t);\n                          }\n                        j = void 0;\n                      });\n                    } finally {\n                      q++;\n                    }\n                  }\n                  function B(t, e) {\n                    if (!t) return t;\n                    if (!H(t))\n                      throw dn(\n                        \"srcset\",\n                        'Can\\'t pass trusted values to `{0}`: \"{1}\"',\n                        e,\n                        t.toString()\n                      );\n                    for (\n                      var n = \"\",\n                        r = et(t),\n                        i = /\\s/.test(r) ? /(\\s+\\d+x\\s*,|\\s+\\d+w\\s*,|\\s+,|,\\s+)/ : /(,)/,\n                        o = r.split(i),\n                        a = Math.floor(o.length / 2),\n                        u = 0;\n                      u < a;\n                      u++\n                    ) {\n                      var s = 2 * u;\n                      (n += A.getTrustedMediaUrl(et(o[s]))), (n += \" \" + et(o[s + 1]));\n                    }\n                    var c = et(o[2 * u]).split(/\\s/);\n                    return (\n                      (n += A.getTrustedMediaUrl(et(c[0]))),\n                      2 === c.length && (n += \" \" + et(c[1])),\n                      n\n                    );\n                  }\n                  function z(t, e) {\n                    if (e) {\n                      var n,\n                        r,\n                        i,\n                        o = Object.keys(e);\n                      for (n = 0, r = o.length; n < r; n++) this[(i = o[n])] = e[i];\n                    } else this.$attr = {};\n                    this.$$element = t;\n                  }\n                  function J(t, e) {\n                    try {\n                      t.addClass(e);\n                    } catch (t) {}\n                  }\n                  z.prototype = {\n                    $normalize: bn,\n                    $addClass: function(t) {\n                      t && t.length > 0 && T.addClass(this.$$element, t);\n                    },\n                    $removeClass: function(t) {\n                      t && t.length > 0 && T.removeClass(this.$$element, t);\n                    },\n                    $updateClass: function(t, e) {\n                      var n = wn(t, e);\n                      n && n.length && T.addClass(this.$$element, n);\n                      var r = wn(e, t);\n                      r && r.length && T.removeClass(this.$$element, r);\n                    },\n                    $set: function(t, e, n, r) {\n                      var i = De(this.$$element[0], t),\n                        o = (function(t) {\n                          return Le[t];\n                        })(t),\n                        a = t;\n                      i ? (this.$$element.prop(t, e), (r = i)) : o && ((this[o] = e), (a = o)),\n                        (this[t] = e),\n                        r\n                          ? (this.$attr[t] = r)\n                          : (r = this.$attr[t]) || (this.$attr[t] = r = Lt(t, \"-\")),\n                        \"img\" === it(this.$$element) &&\n                          \"srcset\" === t &&\n                          (this[t] = e = B(e, \"$set('srcset', value)\")),\n                        !1 !== n &&\n                          (null === e || V(e)\n                            ? this.$$element.removeAttr(r)\n                            : N.test(r)\n                              ? this.$$element.attr(r, e)\n                              : (function(t, e, n) {\n                                  M.innerHTML = \"<span \" + e + \">\";\n                                  var r = M.firstChild.attributes,\n                                    i = r[0];\n                                  r.removeNamedItem(i.name),\n                                    (i.value = n),\n                                    t.attributes.setNamedItem(i);\n                                })(this.$$element[0], r, e));\n                      var u = this.$$observers;\n                      u &&\n                        C(u[a], function(t) {\n                          try {\n                            t(e);\n                          } catch (t) {\n                            d(t);\n                          }\n                        });\n                    },\n                    $observe: function(t, e) {\n                      var n = this,\n                        r = n.$$observers || (n.$$observers = qt()),\n                        i = r[t] || (r[t] = []);\n                      return (\n                        i.push(e),\n                        k.$evalAsync(function() {\n                          i.$$inter || !n.hasOwnProperty(t) || V(n[t]) || e(n[t]);\n                        }),\n                        function() {\n                          at(i, e);\n                        }\n                      );\n                    }\n                  };\n                  var Y = n.startSymbol(),\n                    Q = n.endSymbol(),\n                    tt =\n                      \"{{\" === Y && \"}}\" === Q\n                        ? I\n                        : function(t) {\n                            return t.replace(/\\{\\{/g, Y).replace(/}}/g, Q);\n                          },\n                    nt = /^ng(Attr|Prop|On)([A-Z].*)$/,\n                    rt = /^(.+)Start$/;\n                  return (\n                    (ot.$$addBindingInfo = m\n                      ? function(t, e) {\n                          var n = t.data(\"$binding\") || [];\n                          W(e) ? (n = n.concat(e)) : n.push(e), t.data(\"$binding\", n);\n                        }\n                      : D),\n                    (ot.$$addBindingClass = m\n                      ? function(t) {\n                          J(t, \"ng-binding\");\n                        }\n                      : D),\n                    (ot.$$addScopeInfo = m\n                      ? function(t, e, n, r) {\n                          var i = n ? (r ? \"$isolateScopeNoTemplate\" : \"$isolateScope\") : \"$scope\";\n                          t.data(i, e);\n                        }\n                      : D),\n                    (ot.$$addScopeClass = m\n                      ? function(t, e) {\n                          J(t, e ? \"ng-isolate-scope\" : \"ng-scope\");\n                        }\n                      : D),\n                    (ot.$$createComment = function(t, n) {\n                      var r = \"\";\n                      return (\n                        m && ((r = \" \" + (t || \"\") + \": \"), n && (r += n + \" \")),\n                        e.document.createComment(r)\n                      );\n                    }),\n                    ot\n                  );\n                  function ot(t, e, n, r, i) {\n                    t instanceof u || (t = u(t));\n                    var o = ut(t, e, t, n, r, i);\n                    ot.$$addScopeClass(t);\n                    var a = null;\n                    return function(e, n, r) {\n                      if (!t) throw dn(\"multilink\", \"This element has already been linked.\");\n                      It(e, \"scope\"), i && i.needsNewScope && (e = e.$parent.$new());\n                      var s,\n                        c = (r = r || {}).parentBoundTranscludeFn,\n                        l = r.transcludeControllers,\n                        f = r.futureParentElement;\n                      if (\n                        (c && c.$$boundTransclude && (c = c.$$boundTransclude),\n                        a ||\n                          (a = (function(t) {\n                            var e = t && t[0];\n                            return e && \"foreignobject\" !== it(e) && $.call(e).match(/SVG/)\n                              ? \"svg\"\n                              : \"html\";\n                          })(f)),\n                        (s =\n                          \"html\" !== a\n                            ? u(\n                                At(\n                                  a,\n                                  u(\"<div></div>\")\n                                    .append(t)\n                                    .html()\n                                )\n                              )\n                            : n\n                              ? je.clone.call(t)\n                              : t),\n                        l)\n                      )\n                        for (var p in l) s.data(\"$\" + p + \"Controller\", l[p].instance);\n                      return (\n                        ot.$$addScopeInfo(s, e),\n                        n && n(s, e),\n                        o && o(e, s, s, c),\n                        n || (t = o = null),\n                        s\n                      );\n                    };\n                  }\n                  function ut(t, e, n, r, i, o) {\n                    for (\n                      var s, c, l, f, p, h, d, v = [], g = W(t) || t instanceof u, m = 0;\n                      m < t.length;\n                      m++\n                    )\n                      (s = new z()),\n                        11 === a && lt(t, m, g),\n                        (l = (c = pt(t[m], [], s, 0 === m ? r : void 0, i)).length\n                          ? $t(c, t[m], s, e, n, null, [], [], o)\n                          : null) &&\n                          l.scope &&\n                          ot.$$addScopeClass(s.$$element),\n                        (p =\n                          (l && l.terminal) || !(f = t[m].childNodes) || !f.length\n                            ? null\n                            : ut(\n                                f,\n                                l\n                                  ? (l.transcludeOnThisElement || !l.templateOnThisElement) &&\n                                    l.transclude\n                                  : e\n                              )),\n                        (l || p) && (v.push(m, l, p), (h = !0), (d = d || l)),\n                        (o = null);\n                    return h\n                      ? function(t, n, r, i) {\n                          var o, a, s, c, l, f, p, h, g;\n                          if (d) {\n                            var m = n.length;\n                            for (g = new Array(m), l = 0; l < v.length; l += 3)\n                              (p = v[l]), (g[p] = n[p]);\n                          } else g = n;\n                          for (l = 0, f = v.length; l < f; )\n                            (s = g[v[l++]]),\n                              (o = v[l++]),\n                              (a = v[l++]),\n                              o\n                                ? (o.scope ? ((c = t.$new()), ot.$$addScopeInfo(u(s), c)) : (c = t),\n                                  (h = o.transcludeOnThisElement\n                                    ? ft(t, o.transclude, i)\n                                    : !o.templateOnThisElement && i\n                                      ? i\n                                      : !i && e\n                                        ? ft(t, e)\n                                        : null),\n                                  o(a, c, s, r, h))\n                                : a && a(t, s.childNodes, void 0, i);\n                        }\n                      : null;\n                  }\n                  function lt(t, e, n) {\n                    var r,\n                      i = t[e],\n                      o = i.parentNode;\n                    if (i.nodeType === Ht)\n                      for (; (r = o ? i.nextSibling : t[e + 1]) && r.nodeType === Ht; )\n                        (i.nodeValue = i.nodeValue + r.nodeValue),\n                          r.parentNode && r.parentNode.removeChild(r),\n                          n && r === t[e + 1] && t.splice(e + 1, 1);\n                  }\n                  function ft(t, e, n) {\n                    function r(r, i, o, a, u) {\n                      return (\n                        r || ((r = t.$new(!1, u)).$$transcluded = !0),\n                        e(r, i, {\n                          parentBoundTranscludeFn: n,\n                          transcludeControllers: o,\n                          futureParentElement: a\n                        })\n                      );\n                    }\n                    var i = (r.$$slots = qt());\n                    for (var o in e.$$slots)\n                      e.$$slots[o] ? (i[o] = ft(t, e.$$slots[o], n)) : (i[o] = null);\n                    return r;\n                  }\n                  function pt(t, e, r, i, a) {\n                    var u,\n                      c,\n                      l,\n                      f = t.nodeType,\n                      p = r.$attr;\n                    switch (f) {\n                      case Ft:\n                        wt(e, bn((c = it(t))), \"E\", i, a);\n                        for (\n                          var h, d, v, g, m, $ = t.attributes, y = 0, b = $ && $.length;\n                          y < b;\n                          y++\n                        ) {\n                          var w,\n                            x = !1,\n                            _ = !1,\n                            C = !1,\n                            S = !1,\n                            E = !1;\n                          (d = (h = $[y]).name),\n                            (g = h.value),\n                            (m = (v = bn(d.toLowerCase())).match(nt))\n                              ? ((C = \"Attr\" === m[1]),\n                                (S = \"Prop\" === m[1]),\n                                (E = \"On\" === m[1]),\n                                (d = d\n                                  .replace($n, \"\")\n                                  .toLowerCase()\n                                  .substr(4 + m[1].length)\n                                  .replace(/_(.)/g, function(t, e) {\n                                    return e.toUpperCase();\n                                  })))\n                              : (w = v.match(rt)) &&\n                                _t(w[1]) &&\n                                ((x = d),\n                                (_ = d.substr(0, d.length - 5) + \"end\"),\n                                (d = d.substr(0, d.length - 6))),\n                            S || E\n                              ? ((r[v] = g), (p[v] = h.name), S ? Ot(t, e, v, d) : jt(e, v, d))\n                              : ((p[(v = bn(d.toLowerCase()))] = d),\n                                (!C && r.hasOwnProperty(v)) ||\n                                  ((r[v] = g), De(t, v) && (r[v] = !0)),\n                                Nt(t, e, g, v, C),\n                                wt(e, v, \"A\", i, a, x, _));\n                        }\n                        if (\n                          (\"input\" === c &&\n                            \"hidden\" === t.getAttribute(\"type\") &&\n                            t.setAttribute(\"autocomplete\", \"off\"),\n                          !P)\n                        )\n                          break;\n                        if ((U((l = t.className)) && (l = l.animVal), H(l) && \"\" !== l))\n                          for (; (u = s.exec(l)); )\n                            wt(e, (v = bn(u[2])), \"C\", i, a) && (r[v] = et(u[3])),\n                              (l = l.substr(u.index + u[0].length));\n                        break;\n                      case Ht:\n                        !(function(t, e) {\n                          var r = n(e, !0);\n                          r &&\n                            t.push({\n                              priority: 0,\n                              compile: function(t) {\n                                var e = t.parent(),\n                                  n = !!e.length;\n                                return (\n                                  n && ot.$$addBindingClass(e),\n                                  function(t, e) {\n                                    var i = e.parent();\n                                    n || ot.$$addBindingClass(i),\n                                      ot.$$addBindingInfo(i, r.expressions),\n                                      t.$watch(r, function(t) {\n                                        e[0].nodeValue = t;\n                                      });\n                                  }\n                                );\n                              }\n                            });\n                        })(e, t.nodeValue);\n                        break;\n                      case Bt:\n                        if (!R) break;\n                        !(function(t, e, n, r, i) {\n                          try {\n                            var a = o.exec(t.nodeValue);\n                            if (a) {\n                              var u = bn(a[1]);\n                              wt(e, u, \"M\", r, i) && (n[u] = et(a[2]));\n                            }\n                          } catch (t) {}\n                        })(t, e, r, i, a);\n                    }\n                    return e.sort(Et), e;\n                  }\n                  function vt(t, e, n) {\n                    var r = [],\n                      i = 0;\n                    if (e && t.hasAttribute && t.hasAttribute(e))\n                      do {\n                        if (!t)\n                          throw dn(\n                            \"uterdir\",\n                            \"Unterminated attribute, found '{0}' but no matching '{1}' found.\",\n                            e,\n                            n\n                          );\n                        t.nodeType === Ft && (t.hasAttribute(e) && i++, t.hasAttribute(n) && i--),\n                          r.push(t),\n                          (t = t.nextSibling);\n                      } while (i > 0);\n                    else r.push(t);\n                    return u(r);\n                  }\n                  function gt(t, e, n) {\n                    return function(r, i, o, a, u) {\n                      return (i = vt(i[0], e, n)), t(r, i, o, a, u);\n                    };\n                  }\n                  function mt(t, e, n, r, i, o) {\n                    var a;\n                    return t\n                      ? ot(e, n, r, i, o)\n                      : function() {\n                          return (\n                            a || ((a = ot(e, n, r, i, o)), (e = n = o = null)),\n                            a.apply(this, arguments)\n                          );\n                        };\n                  }\n                  function $t(t, n, r, i, o, a, s, c, l) {\n                    l = l || {};\n                    for (\n                      var f,\n                        p,\n                        h,\n                        v,\n                        g,\n                        m = -Number.MAX_VALUE,\n                        $ = l.newScopeDirective,\n                        y = l.controllerDirectives,\n                        b = l.newIsolateScopeDirective,\n                        w = l.templateDirective,\n                        x = l.nonTlbTranscludeDirective,\n                        _ = !1,\n                        S = !1,\n                        k = l.hasElementTranscludeDirective,\n                        A = (r.$$element = u(n)),\n                        T = a,\n                        j = i,\n                        N = !1,\n                        M = !1,\n                        L = 0,\n                        D = t.length;\n                      L < D;\n                      L++\n                    ) {\n                      var I = (f = t[L]).$$start,\n                        R = f.$$end;\n                      if ((I && (A = vt(n, I, R)), (h = void 0), m > f.priority)) break;\n                      if (\n                        ((g = f.scope) &&\n                          (f.templateUrl ||\n                            (U(g)\n                              ? (kt(\"new/isolated scope\", b || $, f, A), (b = f))\n                              : kt(\"new/isolated scope\", b, f, A)),\n                          ($ = $ || f)),\n                        (p = f.name),\n                        !N &&\n                          ((f.replace && (f.templateUrl || f.template)) ||\n                            (f.transclude && !f.$$tlb)))\n                      ) {\n                        for (var P, q = L + 1; (P = t[q++]); )\n                          if (\n                            (P.transclude && !P.$$tlb) ||\n                            (P.replace && (P.templateUrl || P.template))\n                          ) {\n                            M = !0;\n                            break;\n                          }\n                        N = !0;\n                      }\n                      if (\n                        (!f.templateUrl &&\n                          f.controller &&\n                          ((y = y || qt()), kt(\"'\" + p + \"' controller\", y[p], f, A), (y[p] = f)),\n                        (g = f.transclude))\n                      )\n                        if (\n                          ((_ = !0),\n                          f.$$tlb || (kt(\"transclusion\", x, f, A), (x = f)),\n                          \"element\" === g)\n                        )\n                          (k = !0),\n                            (m = f.priority),\n                            (h = A),\n                            (A = r.$$element = u(ot.$$createComment(p, r[p]))),\n                            (n = A[0]),\n                            Mt(o, ht(h), n),\n                            (j = mt(M, h, i, m, T && T.name, { nonTlbTranscludeDirective: x }));\n                        else {\n                          var F = qt();\n                          if (U(g)) {\n                            h = e.document.createDocumentFragment();\n                            var H = qt(),\n                              B = qt();\n                            for (var G in (C(g, function(t, e) {\n                              var n = \"?\" === t.charAt(0);\n                              (t = n ? t.substring(1) : t), (H[t] = e), (F[e] = null), (B[e] = n);\n                            }),\n                            C(A.contents(), function(t) {\n                              var n = H[bn(it(t))];\n                              n\n                                ? ((B[n] = !0),\n                                  (F[n] = F[n] || e.document.createDocumentFragment()),\n                                  F[n].appendChild(t))\n                                : h.appendChild(t);\n                            }),\n                            C(B, function(t, e) {\n                              if (!t)\n                                throw dn(\n                                  \"reqslot\",\n                                  \"Required transclusion slot `{0}` was not filled.\",\n                                  e\n                                );\n                            }),\n                            F))\n                              if (F[G]) {\n                                var J = u(F[G].childNodes);\n                                F[G] = mt(M, J, i);\n                              }\n                            h = u(h.childNodes);\n                          } else h = u(de(n)).contents();\n                          A.empty(),\n                            ((j = mt(M, h, i, void 0, void 0, {\n                              needsNewScope: f.$$isolateScope || f.$$newScope\n                            })).$$slots = F);\n                        }\n                      if (f.template)\n                        if (\n                          ((S = !0),\n                          kt(\"template\", w, f, A),\n                          (w = f),\n                          (g = K(f.template) ? f.template(A, r) : f.template),\n                          (g = tt(g)),\n                          f.replace)\n                        ) {\n                          if (\n                            ((T = f),\n                            (h = ce(g) ? [] : xn(At(f.templateNamespace, et(g)))),\n                            (n = h[0]),\n                            1 !== h.length || n.nodeType !== Ft)\n                          )\n                            throw dn(\n                              \"tplrt\",\n                              \"Template for directive '{0}' must have exactly one root element. {1}\",\n                              p,\n                              \"\"\n                            );\n                          Mt(o, A, n);\n                          var Y = { $attr: {} },\n                            X = pt(n, [], Y),\n                            Q = t.splice(L + 1, t.length - (L + 1));\n                          (b || $) && bt(X, b, $),\n                            (t = t.concat(X).concat(Q)),\n                            Ct(r, Y),\n                            (D = t.length);\n                        } else A.html(g);\n                      if (f.templateUrl)\n                        (S = !0),\n                          kt(\"template\", w, f, A),\n                          (w = f),\n                          f.replace && (T = f),\n                          (at = St(t.splice(L, t.length - L), A, r, o, _ && j, s, c, {\n                            controllerDirectives: y,\n                            newScopeDirective: $ !== f && $,\n                            newIsolateScopeDirective: b,\n                            templateDirective: w,\n                            nonTlbTranscludeDirective: x\n                          })),\n                          (D = t.length);\n                      else if (f.compile)\n                        try {\n                          v = f.compile(A, r, j);\n                          var nt = f.$$originalDirective || f;\n                          K(v)\n                            ? rt(null, dt(nt, v), I, R)\n                            : v && rt(dt(nt, v.pre), dt(nt, v.post), I, R);\n                        } catch (t) {\n                          d(t, xt(A));\n                        }\n                      f.terminal && ((at.terminal = !0), (m = Math.max(m, f.priority)));\n                    }\n                    return (\n                      (at.scope = $ && !0 === $.scope),\n                      (at.transcludeOnThisElement = _),\n                      (at.templateOnThisElement = S),\n                      (at.transclude = j),\n                      (l.hasElementTranscludeDirective = k),\n                      at\n                    );\n                    function rt(t, e, n, r) {\n                      t &&\n                        (n && (t = gt(t, n, r)),\n                        (t.require = f.require),\n                        (t.directiveName = p),\n                        (b === f || f.$$isolateScope) && (t = Dt(t, { isolateScope: !0 })),\n                        s.push(t)),\n                        e &&\n                          (n && (e = gt(e, n, r)),\n                          (e.require = f.require),\n                          (e.directiveName = p),\n                          (b === f || f.$$isolateScope) && (e = Dt(e, { isolateScope: !0 })),\n                          c.push(e));\n                    }\n                    function at(t, e, i, o, a) {\n                      var l, f, p, h, v, g, m, x, _, S;\n                      for (var A in (n === i\n                        ? ((_ = r), (x = r.$$element))\n                        : (_ = new z((x = u(i)), r)),\n                      (v = e),\n                      b ? (h = e.$new(!0)) : $ && (v = e.$parent),\n                      a &&\n                        (((m = function(t, e, n, r) {\n                          var i;\n                          Z(t) || ((r = n), (n = e), (e = t), (t = void 0));\n                          k && (i = g);\n                          n || (n = k ? x.parent() : x);\n                          if (!r) return a(t, e, i, n, M);\n                          var o = a.$$slots[r];\n                          if (o) return o(t, e, i, n, M);\n                          if (V(o))\n                            throw dn(\n                              \"noslot\",\n                              'No parent directive that requires a transclusion with slot name \"{0}\". Element: {1}',\n                              r,\n                              xt(x)\n                            );\n                        }).$$boundTransclude = a),\n                        (m.isSlotFilled = function(t) {\n                          return !!a.$$slots[t];\n                        })),\n                      y &&\n                        (g = (function(t, e, n, r, i, o, a) {\n                          var u = qt();\n                          for (var s in r) {\n                            var c = r[s],\n                              l = {\n                                $scope: c === a || c.$$isolateScope ? i : o,\n                                $element: t,\n                                $attrs: e,\n                                $transclude: n\n                              },\n                              f = c.controller;\n                            \"@\" === f && (f = e[c.name]);\n                            var p = E(f, l, !0, c.controllerAs);\n                            (u[c.name] = p), t.data(\"$\" + c.name + \"Controller\", p.instance);\n                          }\n                          return u;\n                        })(x, _, m, y, h, e, b)),\n                      b &&\n                        (ot.$$addScopeInfo(\n                          x,\n                          h,\n                          !0,\n                          !(w && (w === b || w === b.$$originalDirective))\n                        ),\n                        ot.$$addScopeClass(x, !0),\n                        (h.$$isolateBindings = b.$$isolateBindings),\n                        (S = Vt(e, _, h, h.$$isolateBindings, b)).removeWatches &&\n                          h.$on(\"$destroy\", S.removeWatches)),\n                      g)) {\n                        var T = y[A],\n                          j = g[A],\n                          N = T.$$bindings.bindToController;\n                        (j.instance = j()),\n                          x.data(\"$\" + T.name + \"Controller\", j.instance),\n                          (j.bindingInfo = Vt(v, _, j.instance, N, T));\n                      }\n                      for (\n                        C(y, function(t, e) {\n                          var n = t.require;\n                          t.bindToController && !W(n) && U(n) && O(g[e].instance, yt(e, n, x, g));\n                        }),\n                          C(g, function(t) {\n                            var e = t.instance;\n                            if (K(e.$onChanges))\n                              try {\n                                e.$onChanges(t.bindingInfo.initialChanges);\n                              } catch (t) {\n                                d(t);\n                              }\n                            if (K(e.$onInit))\n                              try {\n                                e.$onInit();\n                              } catch (t) {\n                                d(t);\n                              }\n                            K(e.$doCheck) &&\n                              (v.$watch(function() {\n                                e.$doCheck();\n                              }),\n                              e.$doCheck()),\n                              K(e.$onDestroy) &&\n                                v.$on(\"$destroy\", function() {\n                                  e.$onDestroy();\n                                });\n                          }),\n                          l = 0,\n                          f = s.length;\n                        l < f;\n                        l++\n                      )\n                        Rt(\n                          (p = s[l]),\n                          p.isolateScope ? h : e,\n                          x,\n                          _,\n                          p.require && yt(p.directiveName, p.require, x, g),\n                          m\n                        );\n                      var M = e;\n                      for (\n                        b && (b.template || null === b.templateUrl) && (M = h),\n                          t && t(M, i.childNodes, void 0, a),\n                          l = c.length - 1;\n                        l >= 0;\n                        l--\n                      )\n                        Rt(\n                          (p = c[l]),\n                          p.isolateScope ? h : e,\n                          x,\n                          _,\n                          p.require && yt(p.directiveName, p.require, x, g),\n                          m\n                        );\n                      C(g, function(t) {\n                        var e = t.instance;\n                        K(e.$postLink) && e.$postLink();\n                      });\n                    }\n                  }\n                  function yt(t, e, n, r) {\n                    var i;\n                    if (H(e)) {\n                      var o = e.match(l),\n                        a = e.substring(o[0].length),\n                        u = o[1] || o[3],\n                        s = \"?\" === o[2];\n                      if (\n                        (\"^^\" === u ? (n = n.parent()) : (i = (i = r && r[a]) && i.instance), !i)\n                      ) {\n                        var c = \"$\" + a + \"Controller\";\n                        i =\n                          \"^^\" === u && n[0] && n[0].nodeType === zt\n                            ? null\n                            : u\n                              ? n.inheritedData(c)\n                              : n.data(c);\n                      }\n                      if (!i && !s)\n                        throw dn(\n                          \"ctreq\",\n                          \"Controller '{0}', required by directive '{1}', can't be found!\",\n                          a,\n                          t\n                        );\n                    } else if (W(e)) {\n                      i = [];\n                      for (var f = 0, p = e.length; f < p; f++) i[f] = yt(t, e[f], n, r);\n                    } else\n                      U(e) &&\n                        ((i = {}),\n                        C(e, function(e, o) {\n                          i[o] = yt(t, e, n, r);\n                        }));\n                    return i || null;\n                  }\n                  function bt(t, e, n) {\n                    for (var r = 0, i = t.length; r < i; r++)\n                      t[r] = L(t[r], { $$isolateScope: e, $$newScope: n });\n                  }\n                  function wt(e, n, o, a, u, s, c) {\n                    if (n === u) return null;\n                    var l = null;\n                    if (r.hasOwnProperty(n))\n                      for (var f, p = t.get(n + i), h = 0, d = p.length; h < d; h++)\n                        if (\n                          ((f = p[h]), (V(a) || a > f.priority) && -1 !== f.restrict.indexOf(o))\n                        ) {\n                          if ((s && (f = L(f, { $$start: s, $$end: c })), !f.$$bindings)) {\n                            var v = (f.$$bindings = g(f, f.name));\n                            U(v.isolateScope) && (f.$$isolateBindings = v.isolateScope);\n                          }\n                          e.push(f), (l = f);\n                        }\n                    return l;\n                  }\n                  function _t(e) {\n                    if (r.hasOwnProperty(e))\n                      for (var n = t.get(e + i), o = 0, a = n.length; o < a; o++)\n                        if (n[o].multiElement) return !0;\n                    return !1;\n                  }\n                  function Ct(t, e) {\n                    var n = e.$attr,\n                      r = t.$attr;\n                    C(t, function(r, i) {\n                      \"$\" !== i.charAt(0) &&\n                        (e[i] &&\n                          e[i] !== r &&\n                          (r.length ? (r += (\"style\" === i ? \";\" : \" \") + e[i]) : (r = e[i])),\n                        t.$set(i, r, !0, n[i]));\n                    }),\n                      C(e, function(e, i) {\n                        t.hasOwnProperty(i) ||\n                          \"$\" === i.charAt(0) ||\n                          ((t[i] = e), \"class\" !== i && \"style\" !== i && (r[i] = n[i]));\n                      });\n                  }\n                  function St(t, e, n, r, i, o, a, s) {\n                    var c,\n                      l,\n                      f = [],\n                      p = e[0],\n                      h = t.shift(),\n                      g = L(h, {\n                        templateUrl: null,\n                        transclude: null,\n                        replace: null,\n                        $$originalDirective: h\n                      }),\n                      m = K(h.templateUrl) ? h.templateUrl(e, n) : h.templateUrl,\n                      $ = h.templateNamespace;\n                    return (\n                      e.empty(),\n                      v(m)\n                        .then(function(d) {\n                          var v, y, b, w;\n                          if (((d = tt(d)), h.replace)) {\n                            if (\n                              ((b = ce(d) ? [] : xn(At($, et(d)))),\n                              (v = b[0]),\n                              1 !== b.length || v.nodeType !== Ft)\n                            )\n                              throw dn(\n                                \"tplrt\",\n                                \"Template for directive '{0}' must have exactly one root element. {1}\",\n                                h.name,\n                                m\n                              );\n                            (y = { $attr: {} }), Mt(r, e, v);\n                            var x = pt(v, [], y);\n                            U(h.scope) && bt(x, !0), (t = x.concat(t)), Ct(n, y);\n                          } else (v = p), e.html(d);\n                          for (\n                            t.unshift(g),\n                              c = $t(t, v, n, i, e, h, o, a, s),\n                              C(r, function(t, n) {\n                                t === v && (r[n] = e[0]);\n                              }),\n                              l = ut(e[0].childNodes, i);\n                            f.length;\n\n                          ) {\n                            var _ = f.shift(),\n                              S = f.shift(),\n                              E = f.shift(),\n                              k = f.shift(),\n                              A = e[0];\n                            if (!_.$$destroyed) {\n                              if (S !== p) {\n                                var T = S.className;\n                                (s.hasElementTranscludeDirective && h.replace) || (A = de(v)),\n                                  Mt(E, u(S), A),\n                                  J(u(A), T);\n                              }\n                              (w = c.transcludeOnThisElement ? ft(_, c.transclude, k) : k),\n                                c(l, _, A, r, w);\n                            }\n                          }\n                          f = null;\n                        })\n                        .catch(function(t) {\n                          G(t) && d(t);\n                        }),\n                      function(t, e, n, r, i) {\n                        var o = i;\n                        e.$$destroyed ||\n                          (f\n                            ? f.push(e, n, r, o)\n                            : (c.transcludeOnThisElement && (o = ft(e, c.transclude, i)),\n                              c(l, e, n, r, o)));\n                      }\n                    );\n                  }\n                  function Et(t, e) {\n                    var n = e.priority - t.priority;\n                    return 0 !== n\n                      ? n\n                      : t.name !== e.name\n                        ? t.name < e.name\n                          ? -1\n                          : 1\n                        : t.index - e.index;\n                  }\n                  function kt(t, e, n, r) {\n                    function i(t) {\n                      return t ? \" (module: \" + t + \")\" : \"\";\n                    }\n                    if (e)\n                      throw dn(\n                        \"multidir\",\n                        \"Multiple directives [{0}{1}, {2}{3}] asking for {4} on: {5}\",\n                        e.name,\n                        i(e.$$moduleName),\n                        n.name,\n                        i(n.$$moduleName),\n                        t,\n                        xt(r)\n                      );\n                  }\n                  function At(t, n) {\n                    switch ((t = h(t || \"html\"))) {\n                      case \"svg\":\n                      case \"math\":\n                        var r = e.document.createElement(\"div\");\n                        return (\n                          (r.innerHTML = \"<\" + t + \">\" + n + \"</\" + t + \">\"),\n                          r.childNodes[0].childNodes\n                        );\n                      default:\n                        return n;\n                    }\n                  }\n                  function Tt(t) {\n                    return B(A.valueOf(t), \"ng-prop-srcset\");\n                  }\n                  function Ot(t, e, n, r) {\n                    if (f.test(r))\n                      throw dn(\n                        \"nodomevents\",\n                        \"Property bindings for HTML DOM event properties are disallowed\"\n                      );\n                    var i = it(t),\n                      o = (function(t, e) {\n                        var n = e.toLowerCase();\n                        return _[t + \"|\" + n] || _[\"*|\" + n];\n                      })(i, r),\n                      a = I;\n                    \"srcset\" !== r || (\"img\" !== i && \"source\" !== i)\n                      ? o && (a = A.getTrusted.bind(A, o))\n                      : (a = Tt),\n                      e.push({\n                        priority: 100,\n                        compile: function(t, e) {\n                          var i = S(e[n]),\n                            o = S(e[n], function(t) {\n                              return A.valueOf(t);\n                            });\n                          return {\n                            pre: function(t, e) {\n                              function n() {\n                                var n = i(t);\n                                e.prop(r, a(n));\n                              }\n                              n(), t.$watch(o, n);\n                            }\n                          };\n                        }\n                      });\n                  }\n                  function jt(t, e, n) {\n                    t.push(Ro(S, k, d, e, n, !1));\n                  }\n                  function Nt(t, e, r, i, o) {\n                    var a = it(t),\n                      u = (function(t, e) {\n                        return \"srcdoc\" === e\n                          ? A.HTML\n                          : \"src\" === e || \"ngSrc\" === e\n                            ? -1 === [\"img\", \"video\", \"audio\", \"source\", \"track\"].indexOf(t)\n                              ? A.RESOURCE_URL\n                              : A.MEDIA_URL\n                            : \"xlinkHref\" === e\n                              ? \"image\" === t\n                                ? A.MEDIA_URL\n                                : \"a\" === t\n                                  ? A.URL\n                                  : A.RESOURCE_URL\n                              : (\"form\" === t && \"action\" === e) ||\n                                (\"base\" === t && \"href\" === e) ||\n                                (\"link\" === t && \"href\" === e)\n                                ? A.RESOURCE_URL\n                                : \"a\" !== t || (\"href\" !== e && \"ngHref\" !== e)\n                                  ? void 0\n                                  : A.URL;\n                      })(a, i),\n                      s = !o,\n                      l = c[i] || o,\n                      p = n(r, s, u, l);\n                    if (p) {\n                      if (\"multiple\" === i && \"select\" === a)\n                        throw dn(\n                          \"selmulti\",\n                          \"Binding to the 'multiple' attribute is not supported. Element: {0}\",\n                          xt(t)\n                        );\n                      if (f.test(i))\n                        throw dn(\n                          \"nodomevents\",\n                          \"Interpolations for HTML DOM event attributes are disallowed\"\n                        );\n                      e.push({\n                        priority: 100,\n                        compile: function() {\n                          return {\n                            pre: function(t, e, o) {\n                              var a = o.$$observers || (o.$$observers = qt()),\n                                s = o[i];\n                              s !== r && ((p = s && n(s, !0, u, l)), (r = s)),\n                                p &&\n                                  ((o[i] = p(t)),\n                                  ((a[i] || (a[i] = [])).$$inter = !0),\n                                  ((o.$$observers && o.$$observers[i].$$scope) || t).$watch(\n                                    p,\n                                    function(t, e) {\n                                      \"class\" === i && t !== e\n                                        ? o.$updateClass(t, e)\n                                        : o.$set(i, t);\n                                    }\n                                  ));\n                            }\n                          };\n                        }\n                      });\n                    }\n                  }\n                  function Mt(t, n, r) {\n                    var i,\n                      o,\n                      a = n[0],\n                      s = n.length,\n                      c = a.parentNode;\n                    if (t)\n                      for (i = 0, o = t.length; i < o; i++)\n                        if (t[i] === a) {\n                          t[i++] = r;\n                          for (var l = i, f = l + s - 1, p = t.length; l < p; l++, f++)\n                            f < p ? (t[l] = t[f]) : delete t[l];\n                          (t.length -= s - 1), t.context === a && (t.context = r);\n                          break;\n                        }\n                    c && c.replaceChild(r, a);\n                    var h = e.document.createDocumentFragment();\n                    for (i = 0; i < s; i++) h.appendChild(n[i]);\n                    for (\n                      u.hasData(a) && (u.data(r, u.data(a)), u(a).off(\"$destroy\")),\n                        u.cleanData(h.querySelectorAll(\"*\")),\n                        i = 1;\n                      i < s;\n                      i++\n                    )\n                      delete n[i];\n                    (n[0] = r), (n.length = 1);\n                  }\n                  function Dt(t, e) {\n                    return O(\n                      function() {\n                        return t.apply(null, arguments);\n                      },\n                      t,\n                      e\n                    );\n                  }\n                  function Rt(t, e, n, r, i, o) {\n                    try {\n                      t(e, n, r, i, o);\n                    } catch (t) {\n                      d(t, xt(n));\n                    }\n                  }\n                  function Pt(t, e) {\n                    if (y)\n                      throw dn(\n                        \"missingattr\",\n                        \"Attribute '{0}' of '{1}' is non-optional and must be set!\",\n                        t,\n                        e\n                      );\n                  }\n                  function Vt(t, e, r, i, o) {\n                    var a,\n                      u = [],\n                      s = {};\n                    function c(e, n, i) {\n                      K(r.$onChanges) &&\n                        !st(n, i) &&\n                        (j || (t.$$postDigest(F), (j = [])),\n                        a || ((a = {}), j.push(l)),\n                        a[e] && (i = a[e].previousValue),\n                        (a[e] = new mn(i, n)));\n                    }\n                    function l() {\n                      r.$onChanges(a), (a = void 0);\n                    }\n                    return (\n                      C(i, function(i, a) {\n                        var l,\n                          f,\n                          h,\n                          d,\n                          v,\n                          g = i.attrName,\n                          m = i.optional;\n                        switch (i.mode) {\n                          case \"@\":\n                            m || p.call(e, g) || (Pt(g, o.name), (r[a] = e[g] = void 0)),\n                              (v = e.$observe(g, function(t) {\n                                if (H(t) || X(t)) {\n                                  var e = r[a];\n                                  c(a, t, e), (r[a] = t);\n                                }\n                              })),\n                              (e.$$observers[g].$$scope = t),\n                              H((l = e[g])) ? (r[a] = n(l)(t)) : X(l) && (r[a] = l),\n                              (s[a] = new mn(vn, r[a])),\n                              u.push(v);\n                            break;\n                          case \"=\":\n                            if (!p.call(e, g)) {\n                              if (m) break;\n                              Pt(g, o.name), (e[g] = void 0);\n                            }\n                            if (m && !e[g]) break;\n                            (f = S(e[g])),\n                              (d = f.literal ? ct : st),\n                              (h =\n                                f.assign ||\n                                function() {\n                                  throw ((l = r[a] = f(t)),\n                                  dn(\n                                    \"nonassign\",\n                                    \"Expression '{0}' in attribute '{1}' used with directive '{2}' is non-assignable!\",\n                                    e[g],\n                                    g,\n                                    o.name\n                                  ));\n                                }),\n                              (l = r[a] = f(t));\n                            var $ = function(e) {\n                              return (\n                                d(e, r[a]) || (d(e, l) ? h(t, (e = r[a])) : (r[a] = e)), (l = e)\n                              );\n                            };\n                            ($.$stateful = !0),\n                              (v = i.collection\n                                ? t.$watchCollection(e[g], $)\n                                : t.$watch(S(e[g], $), null, f.literal)),\n                              u.push(v);\n                            break;\n                          case \"<\":\n                            if (!p.call(e, g)) {\n                              if (m) break;\n                              Pt(g, o.name), (e[g] = void 0);\n                            }\n                            if (m && !e[g]) break;\n                            var y = (f = S(e[g])).literal,\n                              b = (r[a] = f(t));\n                            (s[a] = new mn(vn, r[a])),\n                              (v = t[i.collection ? \"$watchCollection\" : \"$watch\"](f, function(\n                                t,\n                                e\n                              ) {\n                                if (e === t) {\n                                  if (e === b || (y && ct(e, b))) return;\n                                  e = b;\n                                }\n                                c(a, t, e), (r[a] = t);\n                              })),\n                              u.push(v);\n                            break;\n                          case \"&\":\n                            if (\n                              (m || p.call(e, g) || Pt(g, o.name),\n                              (f = e.hasOwnProperty(g) ? S(e[g]) : D) === D && m)\n                            )\n                              break;\n                            r[a] = function(e) {\n                              return f(t, e);\n                            };\n                        }\n                      }),\n                      {\n                        initialChanges: s,\n                        removeWatches:\n                          u.length &&\n                          function() {\n                            for (var t = 0, e = u.length; t < e; ++t) u[t]();\n                          }\n                      }\n                    );\n                  }\n                }\n              ]);\n          }\n          function mn(t, e) {\n            (this.previousValue = t), (this.currentValue = e);\n          }\n          (gn.$inject = [\"$provide\", \"$$sanitizeUriProvider\"]),\n            (mn.prototype.isFirstChange = function() {\n              return this.previousValue === vn;\n            });\n          var $n = /^((?:x|data)[:\\-_])/i,\n            yn = /[:\\-_]+(.)/g;\n          function bn(t) {\n            return t.replace($n, \"\").replace(yn, function(t, e, n) {\n              return n ? e.toUpperCase() : e;\n            });\n          }\n          function wn(t, e) {\n            var n = \"\",\n              r = t.split(/\\s+/),\n              i = e.split(/\\s+/);\n            t: for (var o = 0; o < r.length; o++) {\n              for (var a = r[o], u = 0; u < i.length; u++) if (a === i[u]) continue t;\n              n += (n.length > 0 ? \" \" : \"\") + a;\n            }\n            return n;\n          }\n          function xn(t) {\n            var e = (t = u(t)).length;\n            if (e <= 1) return t;\n            for (; e--; ) {\n              var n = t[e];\n              (n.nodeType === Bt || (n.nodeType === Ht && \"\" === n.nodeValue.trim())) &&\n                g.call(t, e, 1);\n            }\n            return t;\n          }\n          var _n = o(\"$controller\"),\n            Cn = /^(\\S+)(\\s+as\\s+([\\w$]+))?$/;\n          function Sn() {\n            var t = {};\n            (this.has = function(e) {\n              return t.hasOwnProperty(e);\n            }),\n              (this.register = function(e, n) {\n                Pt(e, \"controller\"), U(e) ? O(t, e) : (t[e] = n);\n              }),\n              (this.$get = [\n                \"$injector\",\n                function(e) {\n                  return function(r, i, o, a) {\n                    var u, s, c, l;\n                    if (((o = !0 === o), a && H(a) && (l = a), H(r))) {\n                      if (!(s = r.match(Cn)))\n                        throw _n(\n                          \"ctrlfmt\",\n                          \"Badly formed controller string '{0}'. Must match `__name__ as __id__` or `__name__`.\",\n                          r\n                        );\n                      if (\n                        ((c = s[1]),\n                        (l = l || s[3]),\n                        !(r = t.hasOwnProperty(c)\n                          ? t[c]\n                          : (function(t, e, n) {\n                              if (!e) return t;\n                              for (var r, i = e.split(\".\"), o = t, a = i.length, u = 0; u < a; u++)\n                                (r = i[u]), t && (t = (o = t)[r]);\n                              return !n && K(t) ? dt(o, t) : t;\n                            })(i.$scope, c, !0)))\n                      )\n                        throw _n(\n                          \"ctrlreg\",\n                          \"The controller with the name '{0}' is not registered.\",\n                          c\n                        );\n                      Rt(r, c, !0);\n                    }\n                    if (o) {\n                      var f = (W(r) ? r[r.length - 1] : r).prototype;\n                      return (\n                        (u = Object.create(f || null)),\n                        l && n(i, l, u, c || r.name),\n                        O(\n                          function() {\n                            var t = e.invoke(r, u, i, c);\n                            return (\n                              t !== u && (U(t) || K(t)) && ((u = t), l && n(i, l, u, c || r.name)),\n                              u\n                            );\n                          },\n                          { instance: u, identifier: l }\n                        )\n                      );\n                    }\n                    return (u = e.instantiate(r, i, c)), l && n(i, l, u, c || r.name), u;\n                  };\n                  function n(t, e, n, r) {\n                    if (!t || !U(t.$scope))\n                      throw o(\"$controller\")(\n                        \"noscp\",\n                        \"Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.\",\n                        r,\n                        e\n                      );\n                    t.$scope[e] = n;\n                  }\n                }\n              ]);\n          }\n          function En() {\n            this.$get = [\n              \"$window\",\n              function(t) {\n                return u(t.document);\n              }\n            ];\n          }\n          function kn() {\n            this.$get = [\n              \"$document\",\n              \"$rootScope\",\n              function(t, e) {\n                var n = t[0],\n                  r = n && n.hidden;\n                function i() {\n                  r = n.hidden;\n                }\n                return (\n                  t.on(\"visibilitychange\", i),\n                  e.$on(\"$destroy\", function() {\n                    t.off(\"visibilitychange\", i);\n                  }),\n                  function() {\n                    return r;\n                  }\n                );\n              }\n            ];\n          }\n          function An() {\n            this.$get = [\n              \"$log\",\n              function(t) {\n                return function(e, n) {\n                  t.error.apply(t, arguments);\n                };\n              }\n            ];\n          }\n          var Tn = function() {\n              this.$get = [\n                \"$document\",\n                function(t) {\n                  return function(e) {\n                    return (\n                      e ? !e.nodeType && e instanceof u && (e = e[0]) : (e = t[0].body),\n                      e.offsetWidth + 1\n                    );\n                  };\n                }\n              ];\n            },\n            On = \"application/json\",\n            jn = { \"Content-Type\": On + \";charset=utf-8\" },\n            Nn = /^\\[|^\\{(?!\\{)/,\n            Mn = { \"[\": /]$/, \"{\": /}$/ },\n            Ln = /^\\)]\\}',?\\n/,\n            Dn = o(\"$http\");\n          function In(t) {\n            return U(t) ? (z(t) ? t.toISOString() : gt(t)) : t;\n          }\n          function Rn() {\n            this.$get = function() {\n              return function(t) {\n                if (!t) return \"\";\n                var e = [];\n                return (\n                  S(t, function(t, n) {\n                    null === t ||\n                      V(t) ||\n                      K(t) ||\n                      (W(t)\n                        ? C(t, function(t) {\n                            e.push(Et(n) + \"=\" + Et(In(t)));\n                          })\n                        : e.push(Et(n) + \"=\" + Et(In(t))));\n                  }),\n                  e.join(\"&\")\n                );\n              };\n            };\n          }\n          function Pn() {\n            this.$get = function() {\n              return function(t) {\n                if (!t) return \"\";\n                var e = [];\n                return (\n                  (function t(n, r, i) {\n                    W(n)\n                      ? C(n, function(e, n) {\n                          t(e, r + \"[\" + (U(e) ? n : \"\") + \"]\");\n                        })\n                      : U(n) && !z(n)\n                        ? S(n, function(e, n) {\n                            t(e, r + (i ? \"\" : \"[\") + n + (i ? \"\" : \"]\"));\n                          })\n                        : (K(n) && (n = n()), e.push(Et(r) + \"=\" + (null == n ? \"\" : Et(In(n)))));\n                  })(t, \"\", !0),\n                  e.join(\"&\")\n                );\n              };\n            };\n          }\n          function Vn(t, e) {\n            if (H(t)) {\n              var n = t.replace(Ln, \"\").trim();\n              if (n) {\n                var r = e(\"Content-Type\"),\n                  i = r && 0 === r.indexOf(On);\n                if (\n                  i ||\n                  (function(t) {\n                    var e = t.match(Nn);\n                    return e && Mn[e[0]].test(t);\n                  })(n)\n                )\n                  try {\n                    t = mt(n);\n                  } catch (e) {\n                    if (!i) return t;\n                    throw Dn(\n                      \"baddata\",\n                      'Data must be a valid JSON object. Received: \"{0}\". Parse error: \"{1}\"',\n                      t,\n                      e\n                    );\n                  }\n              }\n            }\n            return t;\n          }\n          function qn(t) {\n            var e,\n              n = qt();\n            function r(t, e) {\n              t && (n[t] = n[t] ? n[t] + \", \" + e : e);\n            }\n            return (\n              H(t)\n                ? C(t.split(\"\\n\"), function(t) {\n                    (e = t.indexOf(\":\")), r(h(et(t.substr(0, e))), et(t.substr(e + 1)));\n                  })\n                : U(t) &&\n                  C(t, function(t, e) {\n                    r(h(e), et(t));\n                  }),\n              n\n            );\n          }\n          function Un(t) {\n            var e;\n            return function(n) {\n              if ((e || (e = qn(t)), n)) {\n                var r = e[h(n)];\n                return void 0 === r && (r = null), r;\n              }\n              return e;\n            };\n          }\n          function Fn(t, e, n, r) {\n            return K(r)\n              ? r(t, e, n)\n              : (C(r, function(r) {\n                  t = r(t, e, n);\n                }),\n                t);\n          }\n          function Hn(t) {\n            return 200 <= t && t < 300;\n          }\n          function Bn() {\n            var t = (this.defaults = {\n                transformResponse: [Vn],\n                transformRequest: [\n                  function(t) {\n                    return !U(t) ||\n                      (function(t) {\n                        return \"[object File]\" === $.call(t);\n                      })(t) ||\n                      (function(t) {\n                        return \"[object Blob]\" === $.call(t);\n                      })(t) ||\n                      (function(t) {\n                        return \"[object FormData]\" === $.call(t);\n                      })(t)\n                      ? t\n                      : gt(t);\n                  }\n                ],\n                headers: {\n                  common: { Accept: \"application/json, text/plain, */*\" },\n                  post: Gt(jn),\n                  put: Gt(jn),\n                  patch: Gt(jn)\n                },\n                xsrfCookieName: \"XSRF-TOKEN\",\n                xsrfHeaderName: \"X-XSRF-TOKEN\",\n                paramSerializer: \"$httpParamSerializer\",\n                jsonpCallbackParam: \"callback\"\n              }),\n              e = !1;\n            this.useApplyAsync = function(t) {\n              return q(t) ? ((e = !!t), this) : e;\n            };\n            var n = (this.interceptors = []),\n              r = (this.xsrfWhitelistedOrigins = []);\n            this.$get = [\n              \"$browser\",\n              \"$httpBackend\",\n              \"$$cookieReader\",\n              \"$cacheFactory\",\n              \"$rootScope\",\n              \"$q\",\n              \"$injector\",\n              \"$sce\",\n              function(i, a, u, s, c, l, f, p) {\n                var v = s(\"$http\");\n                t.paramSerializer = H(t.paramSerializer)\n                  ? f.get(t.paramSerializer)\n                  : t.paramSerializer;\n                var g = [];\n                C(n, function(t) {\n                  g.unshift(H(t) ? f.get(t) : f.invoke(t));\n                });\n                var m = (function(t) {\n                  var e = [si].concat(t.map(ci));\n                  return function(t) {\n                    var n = ci(t);\n                    return e.some(li.bind(null, n));\n                  };\n                })(r);\n                function $(n) {\n                  if (!U(n))\n                    throw o(\"$http\")(\n                      \"badreq\",\n                      \"Http request configuration must be an object.  Received: {0}\",\n                      n\n                    );\n                  if (!H(p.valueOf(n.url)))\n                    throw o(\"$http\")(\n                      \"badreq\",\n                      \"Http request configuration url must be a string or a $sce trusted object.  Received: {0}\",\n                      n.url\n                    );\n                  var r = O(\n                    {\n                      method: \"get\",\n                      transformRequest: t.transformRequest,\n                      transformResponse: t.transformResponse,\n                      paramSerializer: t.paramSerializer,\n                      jsonpCallbackParam: t.jsonpCallbackParam\n                    },\n                    n\n                  );\n                  (r.headers = (function(e) {\n                    var n,\n                      r,\n                      i,\n                      o = t.headers,\n                      a = O({}, e.headers);\n                    o = O({}, o.common, o[h(e.method)]);\n                    t: for (n in o) {\n                      for (i in ((r = h(n)), a)) if (h(i) === r) continue t;\n                      a[n] = o[n];\n                    }\n                    return (function(t, e) {\n                      var n,\n                        r = {};\n                      return (\n                        C(t, function(t, i) {\n                          K(t) ? null != (n = t(e)) && (r[i] = n) : (r[i] = t);\n                        }),\n                        r\n                      );\n                    })(a, Gt(e));\n                  })(n)),\n                    (r.method = d(r.method)),\n                    (r.paramSerializer = H(r.paramSerializer)\n                      ? f.get(r.paramSerializer)\n                      : r.paramSerializer),\n                    i.$$incOutstandingRequestCount(\"$http\");\n                  var s = [],\n                    y = [],\n                    b = l.resolve(r);\n                  return (\n                    C(g, function(t) {\n                      (t.request || t.requestError) && s.unshift(t.request, t.requestError),\n                        (t.response || t.responseError) && y.push(t.response, t.responseError);\n                    }),\n                    (b = (b = w(\n                      (b = (b = w(b, s)).then(function(n) {\n                        var r = n.headers,\n                          i = Fn(n.data, Un(r), void 0, n.transformRequest);\n                        V(i) &&\n                          C(r, function(t, e) {\n                            \"content-type\" === h(e) && delete r[e];\n                          });\n                        V(n.withCredentials) &&\n                          !V(t.withCredentials) &&\n                          (n.withCredentials = t.withCredentials);\n                        return (function(n, r) {\n                          var i,\n                            o,\n                            s = l.defer(),\n                            f = s.promise,\n                            d = n.headers,\n                            g = \"jsonp\" === h(n.method),\n                            y = n.url;\n                          g ? (y = p.getTrustedResourceUrl(y)) : H(y) || (y = p.valueOf(y));\n                          (y = (function(t, e) {\n                            return (\n                              e.length > 0 && (t += (-1 === t.indexOf(\"?\") ? \"?\" : \"&\") + e), t\n                            );\n                          })(y, n.paramSerializer(n.params))),\n                            g &&\n                              (y = (function(t, e) {\n                                var n = t.split(\"?\");\n                                if (n.length > 2)\n                                  throw Dn(\n                                    \"badjsonp\",\n                                    'Illegal use more than one \"?\", in url, \"{1}\"',\n                                    t\n                                  );\n                                return (\n                                  C(Ct(n[1]), function(n, r) {\n                                    if (\"JSON_CALLBACK\" === n)\n                                      throw Dn(\n                                        \"badjsonp\",\n                                        'Illegal use of JSON_CALLBACK in url, \"{0}\"',\n                                        t\n                                      );\n                                    if (r === e)\n                                      throw Dn(\n                                        \"badjsonp\",\n                                        'Illegal use of callback param, \"{0}\", in url, \"{1}\"',\n                                        e,\n                                        t\n                                      );\n                                  }),\n                                  (t += (-1 === t.indexOf(\"?\") ? \"?\" : \"&\") + e + \"=JSON_CALLBACK\")\n                                );\n                              })(y, n.jsonpCallbackParam));\n                          $.pendingRequests.push(n),\n                            f.then(S, S),\n                            (!n.cache && !t.cache) ||\n                              !1 === n.cache ||\n                              (\"GET\" !== n.method && \"JSONP\" !== n.method) ||\n                              (i = U(n.cache) ? n.cache : U(t.cache) ? t.cache : v);\n                          i &&\n                            (q((o = i.get(y)))\n                              ? Q(o)\n                                ? o.then(_, _)\n                                : W(o)\n                                  ? x(o[1], o[0], Gt(o[2]), o[3], o[4])\n                                  : x(o, 200, {}, \"OK\", \"complete\")\n                              : i.put(y, f));\n                          if (V(o)) {\n                            var b = m(n.url) ? u()[n.xsrfCookieName || t.xsrfCookieName] : void 0;\n                            b && (d[n.xsrfHeaderName || t.xsrfHeaderName] = b),\n                              a(\n                                n.method,\n                                y,\n                                r,\n                                function(t, n, r, o, a) {\n                                  i && (Hn(t) ? i.put(y, [t, n, qn(r), o, a]) : i.remove(y));\n                                  function u() {\n                                    x(n, t, r, o, a);\n                                  }\n                                  e ? c.$applyAsync(u) : (u(), c.$$phase || c.$apply());\n                                },\n                                d,\n                                n.timeout,\n                                n.withCredentials,\n                                n.responseType,\n                                w(n.eventHandlers),\n                                w(n.uploadEventHandlers)\n                              );\n                          }\n                          return f;\n                          function w(t) {\n                            if (t) {\n                              var n = {};\n                              return (\n                                C(t, function(t, r) {\n                                  n[r] = function(n) {\n                                    function r() {\n                                      t(n);\n                                    }\n                                    e ? c.$applyAsync(r) : c.$$phase ? r() : c.$apply(r);\n                                  };\n                                }),\n                                n\n                              );\n                            }\n                          }\n                          function x(t, e, r, i, o) {\n                            (Hn((e = e >= -1 ? e : 0)) ? s.resolve : s.reject)({\n                              data: t,\n                              status: e,\n                              headers: Un(r),\n                              config: n,\n                              statusText: i,\n                              xhrStatus: o\n                            });\n                          }\n                          function _(t) {\n                            x(t.data, t.status, Gt(t.headers()), t.statusText, t.xhrStatus);\n                          }\n                          function S() {\n                            var t = $.pendingRequests.indexOf(n);\n                            -1 !== t && $.pendingRequests.splice(t, 1);\n                          }\n                        })(n, i).then(x, x);\n                      })),\n                      y\n                    )).finally(function() {\n                      i.$$completeOutstandingRequest(D, \"$http\");\n                    }))\n                  );\n                  function w(t, e) {\n                    for (var n = 0, r = e.length; n < r; ) {\n                      var i = e[n++],\n                        o = e[n++];\n                      t = t.then(i, o);\n                    }\n                    return (e.length = 0), t;\n                  }\n                  function x(t) {\n                    var e = O({}, t);\n                    return (\n                      (e.data = Fn(t.data, t.headers, t.status, r.transformResponse)),\n                      Hn(t.status) ? e : l.reject(e)\n                    );\n                  }\n                }\n                return (\n                  ($.pendingRequests = []),\n                  (function(t) {\n                    C(arguments, function(t) {\n                      $[t] = function(e, n) {\n                        return $(O({}, n || {}, { method: t, url: e }));\n                      };\n                    });\n                  })(\"get\", \"delete\", \"head\", \"jsonp\"),\n                  (function(t) {\n                    C(arguments, function(t) {\n                      $[t] = function(e, n, r) {\n                        return $(O({}, r || {}, { method: t, url: e, data: n }));\n                      };\n                    });\n                  })(\"post\", \"put\", \"patch\"),\n                  ($.defaults = t),\n                  $\n                );\n              }\n            ];\n          }\n          function zn() {\n            this.$get = function() {\n              return function() {\n                return new e.XMLHttpRequest();\n              };\n            };\n          }\n          function Wn() {\n            this.$get = [\n              \"$browser\",\n              \"$jsonpCallbacks\",\n              \"$document\",\n              \"$xhrFactory\",\n              function(t, e, n, r) {\n                return (function(t, e, n, r, i) {\n                  return function(o, a, u, s, c, l, f, p, d, v) {\n                    if (((a = a || t.url()), \"jsonp\" === h(o)))\n                      var g = r.createCallback(a),\n                        m = (function(t, e, n) {\n                          t = t.replace(\"JSON_CALLBACK\", e);\n                          var o = i.createElement(\"script\"),\n                            a = null;\n                          return (\n                            (o.type = \"text/javascript\"),\n                            (o.src = t),\n                            (o.async = !0),\n                            (a = function(t) {\n                              o.removeEventListener(\"load\", a),\n                                o.removeEventListener(\"error\", a),\n                                i.body.removeChild(o),\n                                (o = null);\n                              var u = -1,\n                                s = \"unknown\";\n                              t &&\n                                (\"load\" !== t.type || r.wasCalled(e) || (t = { type: \"error\" }),\n                                (s = t.type),\n                                (u = \"error\" === t.type ? 404 : 200)),\n                                n && n(u, s);\n                            }),\n                            o.addEventListener(\"load\", a),\n                            o.addEventListener(\"error\", a),\n                            i.body.appendChild(o),\n                            a\n                          );\n                        })(a, g, function(t, e) {\n                          var n = 200 === t && r.getResponse(g);\n                          x(s, t, n, \"\", e, \"complete\"), r.removeCallback(g);\n                        });\n                    else {\n                      var $ = e(o, a),\n                        y = !1;\n                      $.open(o, a, !0),\n                        C(c, function(t, e) {\n                          q(t) && $.setRequestHeader(e, t);\n                        }),\n                        ($.onload = function() {\n                          var t = $.statusText || \"\",\n                            e = \"response\" in $ ? $.response : $.responseText,\n                            n = 1223 === $.status ? 204 : $.status;\n                          0 === n && (n = e ? 200 : \"file\" === ci(a).protocol ? 404 : 0),\n                            x(s, n, e, $.getAllResponseHeaders(), t, \"complete\");\n                        });\n                      if (\n                        (($.onerror = function() {\n                          x(s, -1, null, null, \"\", \"error\");\n                        }),\n                        ($.ontimeout = function() {\n                          x(s, -1, null, null, \"\", \"timeout\");\n                        }),\n                        ($.onabort = function() {\n                          x(s, -1, null, null, \"\", y ? \"timeout\" : \"abort\");\n                        }),\n                        C(d, function(t, e) {\n                          $.addEventListener(e, t);\n                        }),\n                        C(v, function(t, e) {\n                          $.upload.addEventListener(e, t);\n                        }),\n                        f && ($.withCredentials = !0),\n                        p)\n                      )\n                        try {\n                          $.responseType = p;\n                        } catch (t) {\n                          if (\"json\" !== p) throw t;\n                        }\n                      $.send(V(u) ? null : u);\n                    }\n                    if (l > 0)\n                      var b = n(function() {\n                        w(\"timeout\");\n                      }, l);\n                    else\n                      Q(l) &&\n                        l.then(function() {\n                          w(q(l.$$timeoutId) ? \"timeout\" : \"abort\");\n                        });\n                    function w(t) {\n                      (y = \"timeout\" === t), m && m(), $ && $.abort();\n                    }\n                    function x(t, e, r, i, o, a) {\n                      q(b) && n.cancel(b), (m = $ = null), t(e, r, i, o, a);\n                    }\n                  };\n                })(t, r, t.defer, e, n[0]);\n              }\n            ];\n          }\n          var Gn = (w.$interpolateMinErr = o(\"$interpolate\"));\n          function Kn() {\n            var t = \"{{\",\n              e = \"}}\";\n            (this.startSymbol = function(e) {\n              return e ? ((t = e), this) : t;\n            }),\n              (this.endSymbol = function(t) {\n                return t ? ((e = t), this) : e;\n              }),\n              (this.$get = [\n                \"$parse\",\n                \"$exceptionHandler\",\n                \"$sce\",\n                function(n, r, i) {\n                  var o = t.length,\n                    a = e.length,\n                    u = new RegExp(t.replace(/./g, c), \"g\"),\n                    s = new RegExp(e.replace(/./g, c), \"g\");\n                  function c(t) {\n                    return \"\\\\\\\\\\\\\" + t;\n                  }\n                  function l(n) {\n                    return n.replace(u, t).replace(s, e);\n                  }\n                  function f(t, e, n, r) {\n                    var i = t.$watch(\n                      function(t) {\n                        return i(), r(t);\n                      },\n                      e,\n                      n\n                    );\n                    return i;\n                  }\n                  function p(u, s, c, p) {\n                    var h = c === i.URL || c === i.MEDIA_URL;\n                    if (!u.length || -1 === u.indexOf(t)) {\n                      if (s && !h) return;\n                      var d = l(u);\n                      h && (d = i.getTrusted(c, d));\n                      var v = R(d);\n                      return (v.exp = u), (v.expressions = []), (v.$$watchDelegate = f), v;\n                    }\n                    p = !!p;\n                    for (var g, m, $, y, b, w = 0, x = [], _ = u.length, C = [], S = []; w < _; ) {\n                      if (-1 === (g = u.indexOf(t, w)) || -1 === (m = u.indexOf(e, g + o))) {\n                        w !== _ && C.push(l(u.substring(w)));\n                        break;\n                      }\n                      w !== g && C.push(l(u.substring(w, g))),\n                        (y = u.substring(g + o, m)),\n                        x.push(y),\n                        (w = m + a),\n                        S.push(C.length),\n                        C.push(\"\");\n                    }\n                    b = 1 === C.length && 1 === S.length;\n                    var E =\n                      h && b\n                        ? void 0\n                        : function(t) {\n                            try {\n                              return (\n                                (t = c && !h ? i.getTrusted(c, t) : i.valueOf(t)),\n                                p && !q(t) ? t : Ut(t)\n                              );\n                            } catch (t) {\n                              r(Gn.interr(u, t));\n                            }\n                          };\n                    if (\n                      (($ = x.map(function(t) {\n                        return n(t, E);\n                      })),\n                      !s || x.length)\n                    ) {\n                      var k = function(t) {\n                        for (var e = 0, n = x.length; e < n; e++) {\n                          if (p && V(t[e])) return;\n                          C[S[e]] = t[e];\n                        }\n                        return h\n                          ? i.getTrusted(c, b ? C[0] : C.join(\"\"))\n                          : (c && C.length > 1 && Gn.throwNoconcat(u), C.join(\"\"));\n                      };\n                      return O(\n                        function(t) {\n                          var e = 0,\n                            n = x.length,\n                            i = new Array(n);\n                          try {\n                            for (; e < n; e++) i[e] = $[e](t);\n                            return k(i);\n                          } catch (t) {\n                            r(Gn.interr(u, t));\n                          }\n                        },\n                        {\n                          exp: u,\n                          expressions: x,\n                          $$watchDelegate: function(t, e) {\n                            var n;\n                            return t.$watchGroup($, function(r, i) {\n                              var o = k(r);\n                              e.call(this, o, r !== i ? n : o, t), (n = o);\n                            });\n                          }\n                        }\n                      );\n                    }\n                  }\n                  return (\n                    (p.startSymbol = function() {\n                      return t;\n                    }),\n                    (p.endSymbol = function() {\n                      return e;\n                    }),\n                    p\n                  );\n                }\n              ]);\n          }\n          (Gn.throwNoconcat = function(t) {\n            throw Gn(\n              \"noconcat\",\n              \"Error while interpolating: {0}\\nStrict Contextual Escaping disallows interpolations that concatenate multiple expressions when a trusted value is required.  See http://docs.angularjs.org/api/ng.$sce\",\n              t\n            );\n          }),\n            (Gn.interr = function(t, e) {\n              return Gn(\"interr\", \"Can't interpolate: {0}\\n{1}\", t, e.toString());\n            });\n          var Jn = o(\"$interval\");\n          function Yn() {\n            this.$get = [\n              \"$$intervalFactory\",\n              \"$window\",\n              function(t, e) {\n                var n = {},\n                  r = function(t) {\n                    e.clearInterval(t), delete n[t];\n                  },\n                  i = t(function(t, r, i) {\n                    var o = e.setInterval(t, r);\n                    return (n[o] = i), o;\n                  }, r);\n                return (\n                  (i.cancel = function(t) {\n                    if (!t) return !1;\n                    if (!t.hasOwnProperty(\"$$intervalId\"))\n                      throw Jn(\n                        \"badprom\",\n                        \"`$interval.cancel()` called with a promise that was not generated by `$interval()`.\"\n                      );\n                    if (!n.hasOwnProperty(t.$$intervalId)) return !1;\n                    var e = t.$$intervalId,\n                      i = n[e];\n                    return Fr(i.promise), i.reject(\"canceled\"), r(e), !0;\n                  }),\n                  i\n                );\n              }\n            ];\n          }\n          function Zn() {\n            this.$get = [\n              \"$browser\",\n              \"$q\",\n              \"$$q\",\n              \"$rootScope\",\n              function(t, e, n, r) {\n                return function(i, o) {\n                  return function(a, u, s, c) {\n                    var l = arguments.length > 4,\n                      f = l ? ht(arguments, 4) : [],\n                      p = 0,\n                      h = q(c) && !c,\n                      d = (h ? n : e).defer(),\n                      v = d.promise;\n                    function g() {\n                      l ? a.apply(null, f) : a(p);\n                    }\n                    return (\n                      (s = q(s) ? s : 0),\n                      (v.$$intervalId = i(\n                        function() {\n                          h ? t.defer(g) : r.$evalAsync(g),\n                            d.notify(p++),\n                            s > 0 && p >= s && (d.resolve(p), o(v.$$intervalId)),\n                            h || r.$apply();\n                        },\n                        u,\n                        d,\n                        h\n                      )),\n                      v\n                    );\n                  };\n                };\n              }\n            ];\n          }\n          var Xn = function() {\n              this.$get = function() {\n                var t = w.callbacks,\n                  e = {};\n                return {\n                  createCallback: function(n) {\n                    var r = \"_\" + (t.$$counter++).toString(36),\n                      i = \"angular.callbacks.\" + r,\n                      o = (function(t) {\n                        var e = function(t) {\n                          (e.data = t), (e.called = !0);\n                        };\n                        return (e.id = t), e;\n                      })(r);\n                    return (e[i] = t[r] = o), i;\n                  },\n                  wasCalled: function(t) {\n                    return e[t].called;\n                  },\n                  getResponse: function(t) {\n                    return e[t].data;\n                  },\n                  removeCallback: function(n) {\n                    var r = e[n];\n                    delete t[r.id], delete e[n];\n                  }\n                };\n              };\n            },\n            Qn = /^([^?#]*)(\\?([^#]*))?(#(.*))?$/,\n            tr = { http: 80, https: 443, ftp: 21 },\n            er = o(\"$location\");\n          function nr(t, e, n) {\n            var r = (function(t) {\n                var e = [];\n                return (\n                  C(t, function(t, n) {\n                    W(t)\n                      ? C(t, function(t) {\n                          e.push(Et(n, !0) + (!0 === t ? \"\" : \"=\" + Et(t, !0)));\n                        })\n                      : e.push(Et(n, !0) + (!0 === t ? \"\" : \"=\" + Et(t, !0)));\n                  }),\n                  e.length ? e.join(\"&\") : \"\"\n                );\n              })(e),\n              i = n ? \"#\" + St(n) : \"\";\n            return (\n              (function(t) {\n                for (var e = t.split(\"/\"), n = e.length; n--; )\n                  e[n] = St(e[n].replace(/%2F/g, \"/\"));\n                return e.join(\"/\");\n              })(t) +\n              (r ? \"?\" + r : \"\") +\n              i\n            );\n          }\n          function rr(t, e) {\n            var n = ci(t);\n            (e.$$protocol = n.protocol),\n              (e.$$host = n.hostname),\n              (e.$$port = N(n.port) || tr[n.protocol] || null);\n          }\n          var ir = /^\\s*[\\\\/]{2,}/;\n          function or(t, e, n) {\n            if (ir.test(t)) throw er(\"badpath\", 'Invalid url \"{0}\".', t);\n            var r = \"/\" !== t.charAt(0);\n            r && (t = \"/\" + t);\n            var i = ci(t),\n              o = r && \"/\" === i.pathname.charAt(0) ? i.pathname.substring(1) : i.pathname;\n            (e.$$path = (function(t, e) {\n              for (var n = t.split(\"/\"), r = n.length; r--; )\n                (n[r] = decodeURIComponent(n[r])), e && (n[r] = n[r].replace(/\\//g, \"%2F\"));\n              return n.join(\"/\");\n            })(o, n)),\n              (e.$$search = Ct(i.search)),\n              (e.$$hash = decodeURIComponent(i.hash)),\n              e.$$path && \"/\" !== e.$$path.charAt(0) && (e.$$path = \"/\" + e.$$path);\n          }\n          function ar(t, e) {\n            return t.slice(0, e.length) === e;\n          }\n          function ur(t, e) {\n            if (ar(e, t)) return e.substr(t.length);\n          }\n          function sr(t) {\n            var e = t.indexOf(\"#\");\n            return -1 === e ? t : t.substr(0, e);\n          }\n          function cr(t, e, n) {\n            (this.$$html5 = !0),\n              (n = n || \"\"),\n              rr(t, this),\n              (this.$$parse = function(t) {\n                var n = ur(e, t);\n                if (!H(n))\n                  throw er(\"ipthprfx\", 'Invalid url \"{0}\", missing path prefix \"{1}\".', t, e);\n                or(n, this, !0), this.$$path || (this.$$path = \"/\"), this.$$compose();\n              }),\n              (this.$$normalizeUrl = function(t) {\n                return e + t.substr(1);\n              }),\n              (this.$$parseLinkUrl = function(r, i) {\n                return i && \"#\" === i[0]\n                  ? (this.hash(i.slice(1)), !0)\n                  : (q((o = ur(t, r)))\n                      ? ((a = o), (u = n && q((o = ur(n, o))) ? e + (ur(\"/\", o) || o) : t + a))\n                      : q((o = ur(e, r)))\n                        ? (u = e + o)\n                        : e === r + \"/\" && (u = e),\n                    u && this.$$parse(u),\n                    !!u);\n                var o, a, u;\n              });\n          }\n          function lr(t, e, n) {\n            rr(t, this),\n              (this.$$parse = function(r) {\n                var i,\n                  o = ur(t, r) || ur(e, r);\n                V(o) || \"#\" !== o.charAt(0)\n                  ? this.$$html5\n                    ? (i = o)\n                    : ((i = \"\"), V(o) && ((t = r), this.replace()))\n                  : V((i = ur(n, o))) && (i = o),\n                  or(i, this, !1),\n                  (this.$$path = (function(t, e, n) {\n                    var r,\n                      i = /^\\/[A-Z]:(\\/.*)/;\n                    ar(e, n) && (e = e.replace(n, \"\"));\n                    if (i.exec(e)) return t;\n                    return (r = i.exec(t)) ? r[1] : t;\n                  })(this.$$path, i, t)),\n                  this.$$compose();\n              }),\n              (this.$$normalizeUrl = function(e) {\n                return t + (e ? n + e : \"\");\n              }),\n              (this.$$parseLinkUrl = function(e, n) {\n                return sr(t) === sr(e) && (this.$$parse(e), !0);\n              });\n          }\n          function fr(t, e, n) {\n            (this.$$html5 = !0),\n              lr.apply(this, arguments),\n              (this.$$parseLinkUrl = function(r, i) {\n                return i && \"#\" === i[0]\n                  ? (this.hash(i.slice(1)), !0)\n                  : (t === sr(r)\n                      ? (o = r)\n                      : (a = ur(e, r))\n                        ? (o = t + n + a)\n                        : e === r + \"/\" && (o = e),\n                    o && this.$$parse(o),\n                    !!o);\n                var o, a;\n              }),\n              (this.$$normalizeUrl = function(e) {\n                return t + n + e;\n              });\n          }\n          var pr = {\n            $$absUrl: \"\",\n            $$html5: !1,\n            $$replace: !1,\n            $$compose: function() {\n              (this.$$url = nr(this.$$path, this.$$search, this.$$hash)),\n                (this.$$absUrl = this.$$normalizeUrl(this.$$url)),\n                (this.$$urlUpdatedByLocation = !0);\n            },\n            absUrl: hr(\"$$absUrl\"),\n            url: function(t) {\n              if (V(t)) return this.$$url;\n              var e = Qn.exec(t);\n              return (\n                (e[1] || \"\" === t) && this.path(decodeURIComponent(e[1])),\n                (e[2] || e[1] || \"\" === t) && this.search(e[3] || \"\"),\n                this.hash(e[5] || \"\"),\n                this\n              );\n            },\n            protocol: hr(\"$$protocol\"),\n            host: hr(\"$$host\"),\n            port: hr(\"$$port\"),\n            path: dr(\"$$path\", function(t) {\n              return \"/\" === (t = null !== t ? t.toString() : \"\").charAt(0) ? t : \"/\" + t;\n            }),\n            search: function(t, e) {\n              switch (arguments.length) {\n                case 0:\n                  return this.$$search;\n                case 1:\n                  if (H(t) || B(t)) (t = t.toString()), (this.$$search = Ct(t));\n                  else {\n                    if (!U(t))\n                      throw er(\n                        \"isrcharg\",\n                        \"The first argument of the `$location#search()` call must be a string or an object.\"\n                      );\n                    C((t = ut(t, {})), function(e, n) {\n                      null == e && delete t[n];\n                    }),\n                      (this.$$search = t);\n                  }\n                  break;\n                default:\n                  V(e) || null === e ? delete this.$$search[t] : (this.$$search[t] = e);\n              }\n              return this.$$compose(), this;\n            },\n            hash: dr(\"$$hash\", function(t) {\n              return null !== t ? t.toString() : \"\";\n            }),\n            replace: function() {\n              return (this.$$replace = !0), this;\n            }\n          };\n          function hr(t) {\n            return function() {\n              return this[t];\n            };\n          }\n          function dr(t, e) {\n            return function(n) {\n              return V(n) ? this[t] : ((this[t] = e(n)), this.$$compose(), this);\n            };\n          }\n          function vr() {\n            var t = \"!\",\n              e = { enabled: !1, requireBase: !0, rewriteLinks: !0 };\n            (this.hashPrefix = function(e) {\n              return q(e) ? ((t = e), this) : t;\n            }),\n              (this.html5Mode = function(t) {\n                return X(t)\n                  ? ((e.enabled = t), this)\n                  : U(t)\n                    ? (X(t.enabled) && (e.enabled = t.enabled),\n                      X(t.requireBase) && (e.requireBase = t.requireBase),\n                      (X(t.rewriteLinks) || H(t.rewriteLinks)) && (e.rewriteLinks = t.rewriteLinks),\n                      this)\n                    : e;\n              }),\n              (this.$get = [\n                \"$rootScope\",\n                \"$browser\",\n                \"$sniffer\",\n                \"$rootElement\",\n                \"$window\",\n                function(n, r, i, o, a) {\n                  var s,\n                    c,\n                    l,\n                    f = r.baseHref(),\n                    p = r.url();\n                  if (e.enabled) {\n                    if (!f && e.requireBase)\n                      throw er(\n                        \"nobase\",\n                        \"$location in HTML5 mode requires a <base> tag to be present!\"\n                      );\n                    (l =\n                      (function(t) {\n                        return t.substring(0, t.indexOf(\"/\", t.indexOf(\"//\") + 2));\n                      })(p) + (f || \"/\")),\n                      (c = i.history ? cr : fr);\n                  } else (l = sr(p)), (c = lr);\n                  var h = (function(t) {\n                    return t.substr(0, sr(t).lastIndexOf(\"/\") + 1);\n                  })(l);\n                  (s = new c(l, h, \"#\" + t)).$$parseLinkUrl(p, p), (s.$$state = r.state());\n                  var d = /^\\s*(javascript|mailto):/i;\n                  function v(t, e, n) {\n                    var i = s.url(),\n                      o = s.$$state;\n                    try {\n                      r.url(t, e, n), (s.$$state = r.state());\n                    } catch (t) {\n                      throw (s.url(i), (s.$$state = o), t);\n                    }\n                  }\n                  o.on(\"click\", function(t) {\n                    var i = e.rewriteLinks;\n                    if (\n                      i &&\n                      !t.ctrlKey &&\n                      !t.metaKey &&\n                      !t.shiftKey &&\n                      2 !== t.which &&\n                      2 !== t.button\n                    ) {\n                      for (var a = u(t.target); \"a\" !== it(a[0]); )\n                        if (a[0] === o[0] || !(a = a.parent())[0]) return;\n                      if (!H(i) || !V(a.attr(i))) {\n                        var c = a.prop(\"href\"),\n                          l = a.attr(\"href\") || a.attr(\"xlink:href\");\n                        U(c) &&\n                          \"[object SVGAnimatedString]\" === c.toString() &&\n                          (c = ci(c.animVal).href),\n                          d.test(c) ||\n                            !c ||\n                            a.attr(\"target\") ||\n                            t.isDefaultPrevented() ||\n                            (s.$$parseLinkUrl(c, l) &&\n                              (t.preventDefault(), s.absUrl() !== r.url() && n.$apply()));\n                      }\n                    }\n                  }),\n                    s.absUrl() !== p && r.url(s.absUrl(), !0);\n                  var g = !0;\n                  return (\n                    r.onUrlChange(function(t, e) {\n                      ar(t, h)\n                        ? (n.$evalAsync(function() {\n                            var r,\n                              i = s.absUrl(),\n                              o = s.$$state;\n                            s.$$parse(t),\n                              (s.$$state = e),\n                              (r = n.$broadcast(\"$locationChangeStart\", t, i, e, o)\n                                .defaultPrevented),\n                              s.absUrl() === t &&\n                                (r\n                                  ? (s.$$parse(i), (s.$$state = o), v(i, !1, o))\n                                  : ((g = !1), m(i, o)));\n                          }),\n                          n.$$phase || n.$digest())\n                        : (a.location.href = t);\n                    }),\n                    n.$watch(function() {\n                      if (g || s.$$urlUpdatedByLocation) {\n                        s.$$urlUpdatedByLocation = !1;\n                        var t = r.url(),\n                          e = s.absUrl(),\n                          o = r.state(),\n                          a = s.$$replace,\n                          u =\n                            !(function(t, e) {\n                              return t === e || ci(t).href === ci(e).href;\n                            })(t, e) ||\n                            (s.$$html5 && i.history && o !== s.$$state);\n                        (g || u) &&\n                          ((g = !1),\n                          n.$evalAsync(function() {\n                            var e = s.absUrl(),\n                              r = n.$broadcast(\"$locationChangeStart\", e, t, s.$$state, o)\n                                .defaultPrevented;\n                            s.absUrl() === e &&\n                              (r\n                                ? (s.$$parse(t), (s.$$state = o))\n                                : (u && v(e, a, o === s.$$state ? null : s.$$state), m(t, o)));\n                          }));\n                      }\n                      s.$$replace = !1;\n                    }),\n                    s\n                  );\n                  function m(t, e) {\n                    n.$broadcast(\"$locationChangeSuccess\", s.absUrl(), t, s.$$state, e);\n                  }\n                }\n              ]);\n          }\n          function gr() {\n            var t = !0,\n              e = this;\n            (this.debugEnabled = function(e) {\n              return q(e) ? ((t = e), this) : t;\n            }),\n              (this.$get = [\n                \"$window\",\n                function(n) {\n                  var r = a || /\\bEdge\\//.test(n.navigator && n.navigator.userAgent);\n                  return {\n                    log: i(\"log\"),\n                    info: i(\"info\"),\n                    warn: i(\"warn\"),\n                    error: i(\"error\"),\n                    debug: (function() {\n                      var n = i(\"debug\");\n                      return function() {\n                        t && n.apply(e, arguments);\n                      };\n                    })()\n                  };\n                  function i(t) {\n                    var e = n.console || {},\n                      i = e[t] || e.log || D;\n                    return function() {\n                      var t = [];\n                      return (\n                        C(arguments, function(e) {\n                          t.push(\n                            (function(t) {\n                              return (\n                                G(t) &&\n                                  (t.stack && r\n                                    ? (t =\n                                        t.message && -1 === t.stack.indexOf(t.message)\n                                          ? \"Error: \" + t.message + \"\\n\" + t.stack\n                                          : t.stack)\n                                    : t.sourceURL &&\n                                      (t = t.message + \"\\n\" + t.sourceURL + \":\" + t.line)),\n                                t\n                              );\n                            })(e)\n                          );\n                        }),\n                        Function.prototype.apply.call(i, e, t)\n                      );\n                    };\n                  }\n                }\n              ]);\n          }\n          C([fr, lr, cr], function(t) {\n            (t.prototype = Object.create(pr)),\n              (t.prototype.state = function(e) {\n                if (!arguments.length) return this.$$state;\n                if (t !== cr || !this.$$html5)\n                  throw er(\n                    \"nostate\",\n                    \"History API state support is available only in HTML5 mode and only in browsers supporting HTML5 History API\"\n                  );\n                return (this.$$state = V(e) ? null : e), (this.$$urlUpdatedByLocation = !0), this;\n              });\n          });\n          var mr = o(\"$parse\"),\n            $r = {}.constructor.prototype.valueOf;\n          function yr(t) {\n            return t + \"\";\n          }\n          var br = qt();\n          C(\"+ - * / % === !== == != < > <= >= && || ! = |\".split(\" \"), function(t) {\n            br[t] = !0;\n          });\n          var wr = { n: \"\\n\", f: \"\\f\", r: \"\\r\", t: \"\\t\", v: \"\\v\", \"'\": \"'\", '\"': '\"' },\n            xr = function(t) {\n              this.options = t;\n            };\n          xr.prototype = {\n            constructor: xr,\n            lex: function(t) {\n              for (\n                this.text = t, this.index = 0, this.tokens = [];\n                this.index < this.text.length;\n\n              ) {\n                var e = this.text.charAt(this.index);\n                if ('\"' === e || \"'\" === e) this.readString(e);\n                else if (this.isNumber(e) || (\".\" === e && this.isNumber(this.peek())))\n                  this.readNumber();\n                else if (this.isIdentifierStart(this.peekMultichar())) this.readIdent();\n                else if (this.is(e, \"(){}[].,;:?\"))\n                  this.tokens.push({ index: this.index, text: e }), this.index++;\n                else if (this.isWhitespace(e)) this.index++;\n                else {\n                  var n = e + this.peek(),\n                    r = n + this.peek(2),\n                    i = br[e],\n                    o = br[n],\n                    a = br[r];\n                  if (i || o || a) {\n                    var u = a ? r : o ? n : e;\n                    this.tokens.push({ index: this.index, text: u, operator: !0 }),\n                      (this.index += u.length);\n                  } else this.throwError(\"Unexpected next character \", this.index, this.index + 1);\n                }\n              }\n              return this.tokens;\n            },\n            is: function(t, e) {\n              return -1 !== e.indexOf(t);\n            },\n            peek: function(t) {\n              var e = t || 1;\n              return this.index + e < this.text.length && this.text.charAt(this.index + e);\n            },\n            isNumber: function(t) {\n              return \"0\" <= t && t <= \"9\" && \"string\" == typeof t;\n            },\n            isWhitespace: function(t) {\n              return \" \" === t || \"\\r\" === t || \"\\t\" === t || \"\\n\" === t || \"\\v\" === t || \" \" === t;\n            },\n            isIdentifierStart: function(t) {\n              return this.options.isIdentifierStart\n                ? this.options.isIdentifierStart(t, this.codePointAt(t))\n                : this.isValidIdentifierStart(t);\n            },\n            isValidIdentifierStart: function(t) {\n              return (\"a\" <= t && t <= \"z\") || (\"A\" <= t && t <= \"Z\") || \"_\" === t || \"$\" === t;\n            },\n            isIdentifierContinue: function(t) {\n              return this.options.isIdentifierContinue\n                ? this.options.isIdentifierContinue(t, this.codePointAt(t))\n                : this.isValidIdentifierContinue(t);\n            },\n            isValidIdentifierContinue: function(t, e) {\n              return this.isValidIdentifierStart(t, e) || this.isNumber(t);\n            },\n            codePointAt: function(t) {\n              return 1 === t.length\n                ? t.charCodeAt(0)\n                : (t.charCodeAt(0) << 10) + t.charCodeAt(1) - 56613888;\n            },\n            peekMultichar: function() {\n              var t = this.text.charAt(this.index),\n                e = this.peek();\n              if (!e) return t;\n              var n = t.charCodeAt(0),\n                r = e.charCodeAt(0);\n              return n >= 55296 && n <= 56319 && r >= 56320 && r <= 57343 ? t + e : t;\n            },\n            isExpOperator: function(t) {\n              return \"-\" === t || \"+\" === t || this.isNumber(t);\n            },\n            throwError: function(t, e, n) {\n              n = n || this.index;\n              var r = q(e)\n                ? \"s \" + e + \"-\" + this.index + \" [\" + this.text.substring(e, n) + \"]\"\n                : \" \" + n;\n              throw mr(\n                \"lexerr\",\n                \"Lexer Error: {0} at column{1} in expression [{2}].\",\n                t,\n                r,\n                this.text\n              );\n            },\n            readNumber: function() {\n              for (var t = \"\", e = this.index; this.index < this.text.length; ) {\n                var n = h(this.text.charAt(this.index));\n                if (\".\" === n || this.isNumber(n)) t += n;\n                else {\n                  var r = this.peek();\n                  if (\"e\" === n && this.isExpOperator(r)) t += n;\n                  else if (\n                    this.isExpOperator(n) &&\n                    r &&\n                    this.isNumber(r) &&\n                    \"e\" === t.charAt(t.length - 1)\n                  )\n                    t += n;\n                  else {\n                    if (\n                      !this.isExpOperator(n) ||\n                      (r && this.isNumber(r)) ||\n                      \"e\" !== t.charAt(t.length - 1)\n                    )\n                      break;\n                    this.throwError(\"Invalid exponent\");\n                  }\n                }\n                this.index++;\n              }\n              this.tokens.push({ index: e, text: t, constant: !0, value: Number(t) });\n            },\n            readIdent: function() {\n              var t = this.index;\n              for (this.index += this.peekMultichar().length; this.index < this.text.length; ) {\n                var e = this.peekMultichar();\n                if (!this.isIdentifierContinue(e)) break;\n                this.index += e.length;\n              }\n              this.tokens.push({ index: t, text: this.text.slice(t, this.index), identifier: !0 });\n            },\n            readString: function(t) {\n              var e = this.index;\n              this.index++;\n              for (var n = \"\", r = t, i = !1; this.index < this.text.length; ) {\n                var o = this.text.charAt(this.index);\n                if (((r += o), i)) {\n                  if (\"u\" === o) {\n                    var a = this.text.substring(this.index + 1, this.index + 5);\n                    a.match(/[\\da-f]{4}/i) ||\n                      this.throwError(\"Invalid unicode escape [\\\\u\" + a + \"]\"),\n                      (this.index += 4),\n                      (n += String.fromCharCode(parseInt(a, 16)));\n                  } else {\n                    n += wr[o] || o;\n                  }\n                  i = !1;\n                } else if (\"\\\\\" === o) i = !0;\n                else {\n                  if (o === t)\n                    return (\n                      this.index++,\n                      void this.tokens.push({ index: e, text: r, constant: !0, value: n })\n                    );\n                  n += o;\n                }\n                this.index++;\n              }\n              this.throwError(\"Unterminated quote\", e);\n            }\n          };\n          var _r = function(t, e) {\n            (this.lexer = t), (this.options = e);\n          };\n          function Cr(t, e) {\n            return void 0 !== t ? t : e;\n          }\n          function Sr(t, e) {\n            return void 0 === t ? e : void 0 === e ? t : t + e;\n          }\n          (_r.Program = \"Program\"),\n            (_r.ExpressionStatement = \"ExpressionStatement\"),\n            (_r.AssignmentExpression = \"AssignmentExpression\"),\n            (_r.ConditionalExpression = \"ConditionalExpression\"),\n            (_r.LogicalExpression = \"LogicalExpression\"),\n            (_r.BinaryExpression = \"BinaryExpression\"),\n            (_r.UnaryExpression = \"UnaryExpression\"),\n            (_r.CallExpression = \"CallExpression\"),\n            (_r.MemberExpression = \"MemberExpression\"),\n            (_r.Identifier = \"Identifier\"),\n            (_r.Literal = \"Literal\"),\n            (_r.ArrayExpression = \"ArrayExpression\"),\n            (_r.Property = \"Property\"),\n            (_r.ObjectExpression = \"ObjectExpression\"),\n            (_r.ThisExpression = \"ThisExpression\"),\n            (_r.LocalsExpression = \"LocalsExpression\"),\n            (_r.NGValueParameter = \"NGValueParameter\"),\n            (_r.prototype = {\n              ast: function(t) {\n                (this.text = t), (this.tokens = this.lexer.lex(t));\n                var e = this.program();\n                return (\n                  0 !== this.tokens.length &&\n                    this.throwError(\"is an unexpected token\", this.tokens[0]),\n                  e\n                );\n              },\n              program: function() {\n                for (var t = []; ; )\n                  if (\n                    (this.tokens.length > 0 &&\n                      !this.peek(\"}\", \")\", \";\", \"]\") &&\n                      t.push(this.expressionStatement()),\n                    !this.expect(\";\"))\n                  )\n                    return { type: _r.Program, body: t };\n              },\n              expressionStatement: function() {\n                return { type: _r.ExpressionStatement, expression: this.filterChain() };\n              },\n              filterChain: function() {\n                for (var t = this.expression(); this.expect(\"|\"); ) t = this.filter(t);\n                return t;\n              },\n              expression: function() {\n                return this.assignment();\n              },\n              assignment: function() {\n                var t = this.ternary();\n                if (this.expect(\"=\")) {\n                  if (!Or(t)) throw mr(\"lval\", \"Trying to assign a value to a non l-value\");\n                  t = {\n                    type: _r.AssignmentExpression,\n                    left: t,\n                    right: this.assignment(),\n                    operator: \"=\"\n                  };\n                }\n                return t;\n              },\n              ternary: function() {\n                var t,\n                  e,\n                  n = this.logicalOR();\n                return this.expect(\"?\") && ((t = this.expression()), this.consume(\":\"))\n                  ? ((e = this.expression()),\n                    { type: _r.ConditionalExpression, test: n, alternate: t, consequent: e })\n                  : n;\n              },\n              logicalOR: function() {\n                for (var t = this.logicalAND(); this.expect(\"||\"); )\n                  t = {\n                    type: _r.LogicalExpression,\n                    operator: \"||\",\n                    left: t,\n                    right: this.logicalAND()\n                  };\n                return t;\n              },\n              logicalAND: function() {\n                for (var t = this.equality(); this.expect(\"&&\"); )\n                  t = {\n                    type: _r.LogicalExpression,\n                    operator: \"&&\",\n                    left: t,\n                    right: this.equality()\n                  };\n                return t;\n              },\n              equality: function() {\n                for (var t, e = this.relational(); (t = this.expect(\"==\", \"!=\", \"===\", \"!==\")); )\n                  e = {\n                    type: _r.BinaryExpression,\n                    operator: t.text,\n                    left: e,\n                    right: this.relational()\n                  };\n                return e;\n              },\n              relational: function() {\n                for (var t, e = this.additive(); (t = this.expect(\"<\", \">\", \"<=\", \">=\")); )\n                  e = {\n                    type: _r.BinaryExpression,\n                    operator: t.text,\n                    left: e,\n                    right: this.additive()\n                  };\n                return e;\n              },\n              additive: function() {\n                for (var t, e = this.multiplicative(); (t = this.expect(\"+\", \"-\")); )\n                  e = {\n                    type: _r.BinaryExpression,\n                    operator: t.text,\n                    left: e,\n                    right: this.multiplicative()\n                  };\n                return e;\n              },\n              multiplicative: function() {\n                for (var t, e = this.unary(); (t = this.expect(\"*\", \"/\", \"%\")); )\n                  e = { type: _r.BinaryExpression, operator: t.text, left: e, right: this.unary() };\n                return e;\n              },\n              unary: function() {\n                var t;\n                return (t = this.expect(\"+\", \"-\", \"!\"))\n                  ? {\n                      type: _r.UnaryExpression,\n                      operator: t.text,\n                      prefix: !0,\n                      argument: this.unary()\n                    }\n                  : this.primary();\n              },\n              primary: function() {\n                var t, e;\n                for (\n                  this.expect(\"(\")\n                    ? ((t = this.filterChain()), this.consume(\")\"))\n                    : this.expect(\"[\")\n                      ? (t = this.arrayDeclaration())\n                      : this.expect(\"{\")\n                        ? (t = this.object())\n                        : this.selfReferential.hasOwnProperty(this.peek().text)\n                          ? (t = ut(this.selfReferential[this.consume().text]))\n                          : this.options.literals.hasOwnProperty(this.peek().text)\n                            ? (t = {\n                                type: _r.Literal,\n                                value: this.options.literals[this.consume().text]\n                              })\n                            : this.peek().identifier\n                              ? (t = this.identifier())\n                              : this.peek().constant\n                                ? (t = this.constant())\n                                : this.throwError(\"not a primary expression\", this.peek());\n                  (e = this.expect(\"(\", \"[\", \".\"));\n\n                )\n                  \"(\" === e.text\n                    ? ((t = {\n                        type: _r.CallExpression,\n                        callee: t,\n                        arguments: this.parseArguments()\n                      }),\n                      this.consume(\")\"))\n                    : \"[\" === e.text\n                      ? ((t = {\n                          type: _r.MemberExpression,\n                          object: t,\n                          property: this.expression(),\n                          computed: !0\n                        }),\n                        this.consume(\"]\"))\n                      : \".\" === e.text\n                        ? (t = {\n                            type: _r.MemberExpression,\n                            object: t,\n                            property: this.identifier(),\n                            computed: !1\n                          })\n                        : this.throwError(\"IMPOSSIBLE\");\n                return t;\n              },\n              filter: function(t) {\n                for (\n                  var e = [t],\n                    n = {\n                      type: _r.CallExpression,\n                      callee: this.identifier(),\n                      arguments: e,\n                      filter: !0\n                    };\n                  this.expect(\":\");\n\n                )\n                  e.push(this.expression());\n                return n;\n              },\n              parseArguments: function() {\n                var t = [];\n                if (\")\" !== this.peekToken().text)\n                  do {\n                    t.push(this.filterChain());\n                  } while (this.expect(\",\"));\n                return t;\n              },\n              identifier: function() {\n                var t = this.consume();\n                return (\n                  t.identifier || this.throwError(\"is not a valid identifier\", t),\n                  { type: _r.Identifier, name: t.text }\n                );\n              },\n              constant: function() {\n                return { type: _r.Literal, value: this.consume().value };\n              },\n              arrayDeclaration: function() {\n                var t = [];\n                if (\"]\" !== this.peekToken().text)\n                  do {\n                    if (this.peek(\"]\")) break;\n                    t.push(this.expression());\n                  } while (this.expect(\",\"));\n                return this.consume(\"]\"), { type: _r.ArrayExpression, elements: t };\n              },\n              object: function() {\n                var t,\n                  e = [];\n                if (\"}\" !== this.peekToken().text)\n                  do {\n                    if (this.peek(\"}\")) break;\n                    (t = { type: _r.Property, kind: \"init\" }),\n                      this.peek().constant\n                        ? ((t.key = this.constant()),\n                          (t.computed = !1),\n                          this.consume(\":\"),\n                          (t.value = this.expression()))\n                        : this.peek().identifier\n                          ? ((t.key = this.identifier()),\n                            (t.computed = !1),\n                            this.peek(\":\")\n                              ? (this.consume(\":\"), (t.value = this.expression()))\n                              : (t.value = t.key))\n                          : this.peek(\"[\")\n                            ? (this.consume(\"[\"),\n                              (t.key = this.expression()),\n                              this.consume(\"]\"),\n                              (t.computed = !0),\n                              this.consume(\":\"),\n                              (t.value = this.expression()))\n                            : this.throwError(\"invalid key\", this.peek()),\n                      e.push(t);\n                  } while (this.expect(\",\"));\n                return this.consume(\"}\"), { type: _r.ObjectExpression, properties: e };\n              },\n              throwError: function(t, e) {\n                throw mr(\n                  \"syntax\",\n                  \"Syntax Error: Token '{0}' {1} at column {2} of the expression [{3}] starting at [{4}].\",\n                  e.text,\n                  t,\n                  e.index + 1,\n                  this.text,\n                  this.text.substring(e.index)\n                );\n              },\n              consume: function(t) {\n                if (0 === this.tokens.length)\n                  throw mr(\"ueoe\", \"Unexpected end of expression: {0}\", this.text);\n                var e = this.expect(t);\n                return e || this.throwError(\"is unexpected, expecting [\" + t + \"]\", this.peek()), e;\n              },\n              peekToken: function() {\n                if (0 === this.tokens.length)\n                  throw mr(\"ueoe\", \"Unexpected end of expression: {0}\", this.text);\n                return this.tokens[0];\n              },\n              peek: function(t, e, n, r) {\n                return this.peekAhead(0, t, e, n, r);\n              },\n              peekAhead: function(t, e, n, r, i) {\n                if (this.tokens.length > t) {\n                  var o = this.tokens[t],\n                    a = o.text;\n                  if (a === e || a === n || a === r || a === i || (!e && !n && !r && !i)) return o;\n                }\n                return !1;\n              },\n              expect: function(t, e, n, r) {\n                var i = this.peek(t, e, n, r);\n                return !!i && (this.tokens.shift(), i);\n              },\n              selfReferential: {\n                this: { type: _r.ThisExpression },\n                $locals: { type: _r.LocalsExpression }\n              }\n            });\n          var Er = 1,\n            kr = 2;\n          function Ar(t, e, n) {\n            var r,\n              i,\n              o,\n              a = (t.isPure = (function(t, e) {\n                switch (t.type) {\n                  case _r.MemberExpression:\n                    if (t.computed) return !1;\n                    break;\n                  case _r.UnaryExpression:\n                    return Er;\n                  case _r.BinaryExpression:\n                    return \"+\" !== t.operator && Er;\n                  case _r.CallExpression:\n                    return !1;\n                }\n                return void 0 === e ? kr : e;\n              })(t, n));\n            switch (t.type) {\n              case _r.Program:\n                (r = !0),\n                  C(t.body, function(t) {\n                    Ar(t.expression, e, a), (r = r && t.expression.constant);\n                  }),\n                  (t.constant = r);\n                break;\n              case _r.Literal:\n                (t.constant = !0), (t.toWatch = []);\n                break;\n              case _r.UnaryExpression:\n                Ar(t.argument, e, a),\n                  (t.constant = t.argument.constant),\n                  (t.toWatch = t.argument.toWatch);\n                break;\n              case _r.BinaryExpression:\n                Ar(t.left, e, a),\n                  Ar(t.right, e, a),\n                  (t.constant = t.left.constant && t.right.constant),\n                  (t.toWatch = t.left.toWatch.concat(t.right.toWatch));\n                break;\n              case _r.LogicalExpression:\n                Ar(t.left, e, a),\n                  Ar(t.right, e, a),\n                  (t.constant = t.left.constant && t.right.constant),\n                  (t.toWatch = t.constant ? [] : [t]);\n                break;\n              case _r.ConditionalExpression:\n                Ar(t.test, e, a),\n                  Ar(t.alternate, e, a),\n                  Ar(t.consequent, e, a),\n                  (t.constant = t.test.constant && t.alternate.constant && t.consequent.constant),\n                  (t.toWatch = t.constant ? [] : [t]);\n                break;\n              case _r.Identifier:\n                (t.constant = !1), (t.toWatch = [t]);\n                break;\n              case _r.MemberExpression:\n                Ar(t.object, e, a),\n                  t.computed && Ar(t.property, e, a),\n                  (t.constant = t.object.constant && (!t.computed || t.property.constant)),\n                  (t.toWatch = t.constant ? [] : [t]);\n                break;\n              case _r.CallExpression:\n                (o =\n                  !!t.filter &&\n                  (function(t, e) {\n                    return !t(e).$stateful;\n                  })(e, t.callee.name)),\n                  (r = o),\n                  (i = []),\n                  C(t.arguments, function(t) {\n                    Ar(t, e, a), (r = r && t.constant), i.push.apply(i, t.toWatch);\n                  }),\n                  (t.constant = r),\n                  (t.toWatch = o ? i : [t]);\n                break;\n              case _r.AssignmentExpression:\n                Ar(t.left, e, a),\n                  Ar(t.right, e, a),\n                  (t.constant = t.left.constant && t.right.constant),\n                  (t.toWatch = [t]);\n                break;\n              case _r.ArrayExpression:\n                (r = !0),\n                  (i = []),\n                  C(t.elements, function(t) {\n                    Ar(t, e, a), (r = r && t.constant), i.push.apply(i, t.toWatch);\n                  }),\n                  (t.constant = r),\n                  (t.toWatch = i);\n                break;\n              case _r.ObjectExpression:\n                (r = !0),\n                  (i = []),\n                  C(t.properties, function(t) {\n                    Ar(t.value, e, a),\n                      (r = r && t.value.constant),\n                      i.push.apply(i, t.value.toWatch),\n                      t.computed &&\n                        (Ar(t.key, e, !1),\n                        (r = r && t.key.constant),\n                        i.push.apply(i, t.key.toWatch));\n                  }),\n                  (t.constant = r),\n                  (t.toWatch = i);\n                break;\n              case _r.ThisExpression:\n              case _r.LocalsExpression:\n                (t.constant = !1), (t.toWatch = []);\n            }\n          }\n          function Tr(t) {\n            if (1 === t.length) {\n              var e = t[0].expression,\n                n = e.toWatch;\n              return 1 !== n.length ? n : n[0] !== e ? n : void 0;\n            }\n          }\n          function Or(t) {\n            return t.type === _r.Identifier || t.type === _r.MemberExpression;\n          }\n          function jr(t) {\n            if (1 === t.body.length && Or(t.body[0].expression))\n              return {\n                type: _r.AssignmentExpression,\n                left: t.body[0].expression,\n                right: { type: _r.NGValueParameter },\n                operator: \"=\"\n              };\n          }\n          function Nr(t) {\n            this.$filter = t;\n          }\n          function Mr(t) {\n            this.$filter = t;\n          }\n          function Lr(t, e, n) {\n            (this.ast = new _r(t, n)), (this.astCompiler = n.csp ? new Mr(e) : new Nr(e));\n          }\n          function Dr(t) {\n            return K(t.valueOf) ? t.valueOf() : $r.call(t);\n          }\n          function Ir() {\n            var t,\n              e,\n              n = qt(),\n              r = { true: !0, false: !1, null: null, undefined: void 0 };\n            (this.addLiteral = function(t, e) {\n              r[t] = e;\n            }),\n              (this.setIdentifierFns = function(n, r) {\n                return (t = n), (e = r), this;\n              }),\n              (this.$get = [\n                \"$filter\",\n                function(i) {\n                  var o = {\n                    csp: lt().noUnsafeEval,\n                    literals: ut(r),\n                    isIdentifierStart: K(t) && t,\n                    isIdentifierContinue: K(e) && e\n                  };\n                  return (\n                    (a.$$getAst = function(t) {\n                      return new Lr(new xr(o), i, o).getAst(t).ast;\n                    }),\n                    a\n                  );\n                  function a(t, e) {\n                    var r, a;\n                    switch (typeof t) {\n                      case \"string\":\n                        if (((t = t.trim()), !(r = n[(a = t)])))\n                          (r = new Lr(new xr(o), i, o).parse(t)), (n[a] = p(r));\n                        return h(r, e);\n                      case \"function\":\n                        return h(t, e);\n                      default:\n                        return h(D, e);\n                    }\n                  }\n                  function u(t, e, n) {\n                    return null == t || null == e\n                      ? t === e\n                      : !(\"object\" == typeof t && \"object\" == typeof (t = Dr(t)) && !n) &&\n                          (t === e || (t != t && e != e));\n                  }\n                  function s(t, e, n, r, i) {\n                    var o,\n                      a = r.inputs;\n                    if (1 === a.length) {\n                      var s = u;\n                      return (\n                        (a = a[0]),\n                        t.$watch(\n                          function(t) {\n                            var e = a(t);\n                            return (\n                              u(e, s, a.isPure) ||\n                                ((o = r(t, void 0, void 0, [e])), (s = e && Dr(e))),\n                              o\n                            );\n                          },\n                          e,\n                          n,\n                          i\n                        )\n                      );\n                    }\n                    for (var c = [], l = [], f = 0, p = a.length; f < p; f++)\n                      (c[f] = u), (l[f] = null);\n                    return t.$watch(\n                      function(t) {\n                        for (var e = !1, n = 0, i = a.length; n < i; n++) {\n                          var s = a[n](t);\n                          (e || (e = !u(s, c[n], a[n].isPure))) &&\n                            ((l[n] = s), (c[n] = s && Dr(s)));\n                        }\n                        return e && (o = r(t, void 0, void 0, l)), o;\n                      },\n                      e,\n                      n,\n                      i\n                    );\n                  }\n                  function c(t, e, n, r, i) {\n                    var o,\n                      a,\n                      u = r.literal ? l : q,\n                      s = r.$$intercepted || r,\n                      c = r.$$interceptor || I,\n                      f = r.inputs && !s.inputs;\n                    return (\n                      (d.literal = r.literal),\n                      (d.constant = r.constant),\n                      (d.inputs = r.inputs),\n                      p(d),\n                      (o = t.$watch(d, e, n, i))\n                    );\n                    function h() {\n                      u(a) && o();\n                    }\n                    function d(t, e, n, r) {\n                      return (a = f && r ? r[0] : s(t, e, n, r)), u(a) && t.$$postDigest(h), c(a);\n                    }\n                  }\n                  function l(t) {\n                    var e = !0;\n                    return (\n                      C(t, function(t) {\n                        q(t) || (e = !1);\n                      }),\n                      e\n                    );\n                  }\n                  function f(t, e, n, r) {\n                    var i = t.$watch(\n                      function(t) {\n                        return i(), r(t);\n                      },\n                      e,\n                      n\n                    );\n                    return i;\n                  }\n                  function p(t) {\n                    return (\n                      t.constant\n                        ? (t.$$watchDelegate = f)\n                        : t.oneTime\n                          ? (t.$$watchDelegate = c)\n                          : t.inputs && (t.$$watchDelegate = s),\n                      t\n                    );\n                  }\n                  function h(t, e) {\n                    if (!e) return t;\n                    t.$$interceptor &&\n                      ((e = (function(t, e) {\n                        function n(n) {\n                          return e(t(n));\n                        }\n                        return (\n                          (n.$stateful = t.$stateful || e.$stateful),\n                          (n.$$pure = t.$$pure && e.$$pure),\n                          n\n                        );\n                      })(t.$$interceptor, e)),\n                      (t = t.$$intercepted));\n                    var n = !1,\n                      r = function(r, i, o, a) {\n                        var u = n && a ? a[0] : t(r, i, o, a);\n                        return e(u);\n                      };\n                    return (\n                      (r.$$intercepted = t),\n                      (r.$$interceptor = e),\n                      (r.literal = t.literal),\n                      (r.oneTime = t.oneTime),\n                      (r.constant = t.constant),\n                      e.$stateful ||\n                        ((n = !t.inputs),\n                        (r.inputs = t.inputs ? t.inputs : [t]),\n                        e.$$pure ||\n                          (r.inputs = r.inputs.map(function(t) {\n                            return t.isPure === kr\n                              ? function(e) {\n                                  return t(e);\n                                }\n                              : t;\n                          }))),\n                      p(r)\n                    );\n                  }\n                }\n              ]);\n          }\n          function Rr() {\n            var t = !0;\n            (this.$get = [\n              \"$rootScope\",\n              \"$exceptionHandler\",\n              function(e, n) {\n                return Vr(\n                  function(t) {\n                    e.$evalAsync(t);\n                  },\n                  n,\n                  t\n                );\n              }\n            ]),\n              (this.errorOnUnhandledRejections = function(e) {\n                return q(e) ? ((t = e), this) : t;\n              });\n          }\n          function Pr() {\n            var t = !0;\n            (this.$get = [\n              \"$browser\",\n              \"$exceptionHandler\",\n              function(e, n) {\n                return Vr(\n                  function(t) {\n                    e.defer(t);\n                  },\n                  n,\n                  t\n                );\n              }\n            ]),\n              (this.errorOnUnhandledRejections = function(e) {\n                return q(e) ? ((t = e), this) : t;\n              });\n          }\n          function Vr(t, e, n) {\n            var r = o(\"$q\", TypeError),\n              i = 0,\n              a = [];\n            function u() {\n              return new function() {\n                var t = (this.promise = new s());\n                (this.resolve = function(e) {\n                  f(t, e);\n                }),\n                  (this.reject = function(e) {\n                    p(t, e);\n                  }),\n                  (this.notify = function(e) {\n                    d(t, e);\n                  });\n              }();\n            }\n            function s() {\n              this.$$state = { status: 0 };\n            }\n            function c() {\n              for (; !i && a.length; ) {\n                var t = a.shift();\n                if (!qr(t)) {\n                  Ur(t);\n                  var n = \"Possibly unhandled rejection: \" + Kt(t.value);\n                  G(t.value) ? e(t.value, n) : e(n);\n                }\n              }\n            }\n            function l(r) {\n              !n ||\n                r.pending ||\n                2 !== r.status ||\n                qr(r) ||\n                (0 === i && 0 === a.length && t(c), a.push(r)),\n                !r.processScheduled &&\n                  r.pending &&\n                  ((r.processScheduled = !0),\n                  ++i,\n                  t(function() {\n                    !(function(r) {\n                      var o, a, u;\n                      (u = r.pending), (r.processScheduled = !1), (r.pending = void 0);\n                      try {\n                        for (var s = 0, l = u.length; s < l; ++s) {\n                          Ur(r), (a = u[s][0]), (o = u[s][r.status]);\n                          try {\n                            K(o)\n                              ? f(a, o(r.value))\n                              : 1 === r.status\n                                ? f(a, r.value)\n                                : p(a, r.value);\n                          } catch (t) {\n                            p(a, t), t && !0 === t.$$passToExceptionHandler && e(t);\n                          }\n                        }\n                      } finally {\n                        --i, n && 0 === i && t(c);\n                      }\n                    })(r);\n                  }));\n            }\n            function f(t, e) {\n              t.$$state.status ||\n                (e === t\n                  ? h(\n                      t,\n                      r(\n                        \"qcycle\",\n                        \"Expected promise to be resolved with value other than itself '{0}'\",\n                        e\n                      )\n                    )\n                  : (function t(e, n) {\n                      var r;\n                      var i = !1;\n                      try {\n                        (U(n) || K(n)) && (r = n.then),\n                          K(r)\n                            ? ((e.$$state.status = -1),\n                              r.call(\n                                n,\n                                function o(t) {\n                                  if (i) return;\n                                  (i = !0),\n                                    (function t(e, n) {\n                                      var r;\n                                      var i = !1;\n                                      try {\n                                        (U(n) || K(n)) && (r = n.then),\n                                          K(r)\n                                            ? ((e.$$state.status = -1),\n                                              r.call(n, o, a, function(t) {\n                                                d(e, t);\n                                              }))\n                                            : ((e.$$state.value = n),\n                                              (e.$$state.status = 1),\n                                              l(e.$$state));\n                                      } catch (t) {\n                                        a(t);\n                                      }\n                                      function o(n) {\n                                        i || ((i = !0), t(e, n));\n                                      }\n                                      function a(t) {\n                                        i || ((i = !0), h(e, t));\n                                      }\n                                    })(e, t);\n                                },\n                                a,\n                                function(t) {\n                                  d(e, t);\n                                }\n                              ))\n                            : ((e.$$state.value = n), (e.$$state.status = 1), l(e.$$state));\n                      } catch (t) {\n                        a(t);\n                      }\n                      function o(n) {\n                        i || ((i = !0), t(e, n));\n                      }\n                      function a(t) {\n                        i || ((i = !0), h(e, t));\n                      }\n                    })(t, e));\n            }\n            function p(t, e) {\n              t.$$state.status || h(t, e);\n            }\n            function h(t, e) {\n              (t.$$state.value = e), (t.$$state.status = 2), l(t.$$state);\n            }\n            function d(n, r) {\n              var i = n.$$state.pending;\n              n.$$state.status <= 0 &&\n                i &&\n                i.length &&\n                t(function() {\n                  for (var t, n, o = 0, a = i.length; o < a; o++) {\n                    (n = i[o][0]), (t = i[o][3]);\n                    try {\n                      d(n, K(t) ? t(r) : r);\n                    } catch (t) {\n                      e(t);\n                    }\n                  }\n                });\n            }\n            function v(t) {\n              var e = new s();\n              return p(e, t), e;\n            }\n            function g(t, e, n) {\n              var r = null;\n              try {\n                K(n) && (r = n());\n              } catch (t) {\n                return v(t);\n              }\n              return Q(r)\n                ? r.then(function() {\n                    return e(t);\n                  }, v)\n                : e(t);\n            }\n            function m(t, e, n, r) {\n              var i = new s();\n              return f(i, t), i.then(e, n, r);\n            }\n            O(s.prototype, {\n              then: function(t, e, n) {\n                if (V(t) && V(e) && V(n)) return this;\n                var r = new s();\n                return (\n                  (this.$$state.pending = this.$$state.pending || []),\n                  this.$$state.pending.push([r, t, e, n]),\n                  this.$$state.status > 0 && l(this.$$state),\n                  r\n                );\n              },\n              catch: function(t) {\n                return this.then(null, t);\n              },\n              finally: function(t, e) {\n                return this.then(\n                  function(e) {\n                    return g(e, $, t);\n                  },\n                  function(e) {\n                    return g(e, v, t);\n                  },\n                  e\n                );\n              }\n            });\n            var $ = m;\n            function y(t) {\n              if (!K(t)) throw r(\"norslvr\", \"Expected resolverFn, got '{0}'\", t);\n              var e = new s();\n              return (\n                t(\n                  function(t) {\n                    f(e, t);\n                  },\n                  function(t) {\n                    p(e, t);\n                  }\n                ),\n                e\n              );\n            }\n            return (\n              (y.prototype = s.prototype),\n              (y.defer = u),\n              (y.reject = v),\n              (y.when = m),\n              (y.resolve = $),\n              (y.all = function(t) {\n                var e = new s(),\n                  n = 0,\n                  r = W(t) ? [] : {};\n                return (\n                  C(t, function(t, i) {\n                    n++,\n                      m(t).then(\n                        function(t) {\n                          (r[i] = t), --n || f(e, r);\n                        },\n                        function(t) {\n                          p(e, t);\n                        }\n                      );\n                  }),\n                  0 === n && f(e, r),\n                  e\n                );\n              }),\n              (y.race = function(t) {\n                var e = u();\n                return (\n                  C(t, function(t) {\n                    m(t).then(e.resolve, e.reject);\n                  }),\n                  e.promise\n                );\n              }),\n              y\n            );\n          }\n          function qr(t) {\n            return !!t.pur;\n          }\n          function Ur(t) {\n            t.pur = !0;\n          }\n          function Fr(t) {\n            Ur(t.$$state);\n          }\n          function Hr() {\n            this.$get = [\n              \"$window\",\n              \"$timeout\",\n              function(t, e) {\n                var n = t.requestAnimationFrame || t.webkitRequestAnimationFrame,\n                  r =\n                    t.cancelAnimationFrame ||\n                    t.webkitCancelAnimationFrame ||\n                    t.webkitCancelRequestAnimationFrame,\n                  i = !!n,\n                  o = i\n                    ? function(t) {\n                        var e = n(t);\n                        return function() {\n                          r(e);\n                        };\n                      }\n                    : function(t) {\n                        var n = e(t, 16.66, !1);\n                        return function() {\n                          e.cancel(n);\n                        };\n                      };\n                return (o.supported = i), o;\n              }\n            ];\n          }\n          function Br() {\n            var t = 10,\n              e = o(\"$rootScope\"),\n              n = null,\n              r = null;\n            (this.digestTtl = function(e) {\n              return arguments.length && (t = e), t;\n            }),\n              (this.$get = [\n                \"$exceptionHandler\",\n                \"$parse\",\n                \"$browser\",\n                function(i, o, u) {\n                  function s(t) {\n                    t.currentScope.$$destroyed = !0;\n                  }\n                  function c() {\n                    (this.$id = k()),\n                      (this.$$phase = this.$parent = this.$$watchers = this.$$nextSibling = this.$$prevSibling = this.$$childHead = this.$$childTail = null),\n                      (this.$root = this),\n                      (this.$$destroyed = !1),\n                      (this.$$suspended = !1),\n                      (this.$$listeners = {}),\n                      (this.$$listenerCount = {}),\n                      (this.$$watchersCount = 0),\n                      (this.$$isolateBindings = null);\n                  }\n                  c.prototype = {\n                    constructor: c,\n                    $new: function(t, e) {\n                      var n;\n                      return (\n                        (e = e || this),\n                        t\n                          ? ((n = new c()).$root = this.$root)\n                          : (this.$$ChildScope ||\n                              (this.$$ChildScope = (function(t) {\n                                function e() {\n                                  (this.$$watchers = this.$$nextSibling = this.$$childHead = this.$$childTail = null),\n                                    (this.$$listeners = {}),\n                                    (this.$$listenerCount = {}),\n                                    (this.$$watchersCount = 0),\n                                    (this.$id = k()),\n                                    (this.$$ChildScope = null),\n                                    (this.$$suspended = !1);\n                                }\n                                return (e.prototype = t), e;\n                              })(this)),\n                            (n = new this.$$ChildScope())),\n                        (n.$parent = e),\n                        (n.$$prevSibling = e.$$childTail),\n                        e.$$childHead\n                          ? ((e.$$childTail.$$nextSibling = n), (e.$$childTail = n))\n                          : (e.$$childHead = e.$$childTail = n),\n                        (t || e !== this) && n.$on(\"$destroy\", s),\n                        n\n                      );\n                    },\n                    $watch: function(t, e, r, i) {\n                      var a = o(t),\n                        u = K(e) ? e : D;\n                      if (a.$$watchDelegate) return a.$$watchDelegate(this, u, r, a, t);\n                      var s = this,\n                        c = s.$$watchers,\n                        l = { fn: u, last: b, get: a, exp: i || t, eq: !!r };\n                      return (\n                        (n = null),\n                        c || ((c = s.$$watchers = []).$$digestWatchIndex = -1),\n                        c.unshift(l),\n                        c.$$digestWatchIndex++,\n                        $(this, 1),\n                        function() {\n                          var t = at(c, l);\n                          t >= 0 && ($(s, -1), t < c.$$digestWatchIndex && c.$$digestWatchIndex--),\n                            (n = null);\n                        }\n                      );\n                    },\n                    $watchGroup: function(t, e) {\n                      var n = new Array(t.length),\n                        r = new Array(t.length),\n                        i = [],\n                        o = this,\n                        a = !1,\n                        u = !0;\n                      if (!t.length) {\n                        var s = !0;\n                        return (\n                          o.$evalAsync(function() {\n                            s && e(r, r, o);\n                          }),\n                          function() {\n                            s = !1;\n                          }\n                        );\n                      }\n                      if (1 === t.length)\n                        return this.$watch(t[0], function(t, i, o) {\n                          (r[0] = t), (n[0] = i), e(r, t === i ? r : n, o);\n                        });\n                      function c() {\n                        a = !1;\n                        try {\n                          u ? ((u = !1), e(r, r, o)) : e(r, n, o);\n                        } finally {\n                          for (var i = 0; i < t.length; i++) n[i] = r[i];\n                        }\n                      }\n                      return (\n                        C(t, function(t, e) {\n                          var n = o.$watch(t, function(t) {\n                            (r[e] = t), a || ((a = !0), o.$evalAsync(c));\n                          });\n                          i.push(n);\n                        }),\n                        function() {\n                          for (; i.length; ) i.shift()();\n                        }\n                      );\n                    },\n                    $watchCollection: function(t, e) {\n                      (v.$$pure = o(t).literal), (v.$stateful = !v.$$pure);\n                      var n,\n                        r,\n                        i,\n                        a = this,\n                        u = e.length > 1,\n                        s = 0,\n                        c = o(t, v),\n                        l = [],\n                        f = {},\n                        h = !0,\n                        d = 0;\n                      function v(t) {\n                        var e, i, o, a;\n                        if (!V((n = t))) {\n                          if (U(n))\n                            if (_(n)) {\n                              r !== l && ((d = (r = l).length = 0), s++),\n                                (e = n.length),\n                                d !== e && (s++, (r.length = d = e));\n                              for (var u = 0; u < e; u++)\n                                (a = r[u]),\n                                  (o = n[u]),\n                                  (a != a && o != o) || a === o || (s++, (r[u] = o));\n                            } else {\n                              for (i in (r !== f && ((r = f = {}), (d = 0), s++), (e = 0), n))\n                                p.call(n, i) &&\n                                  (e++,\n                                  (o = n[i]),\n                                  (a = r[i]),\n                                  i in r\n                                    ? (a != a && o != o) || a === o || (s++, (r[i] = o))\n                                    : (d++, (r[i] = o), s++));\n                              if (d > e) for (i in (s++, r)) p.call(n, i) || (d--, delete r[i]);\n                            }\n                          else r !== n && ((r = n), s++);\n                          return s;\n                        }\n                      }\n                      return this.$watch(c, function() {\n                        if ((h ? ((h = !1), e(n, n, a)) : e(n, i, a), u))\n                          if (U(n))\n                            if (_(n)) {\n                              i = new Array(n.length);\n                              for (var t = 0; t < n.length; t++) i[t] = n[t];\n                            } else for (var r in ((i = {}), n)) p.call(n, r) && (i[r] = n[r]);\n                          else i = n;\n                      });\n                    },\n                    $digest: function() {\n                      var o,\n                        a,\n                        s,\n                        c,\n                        p,\n                        d,\n                        $,\n                        y,\n                        x,\n                        _ = t,\n                        C = f.length ? l : this,\n                        S = [];\n                      g(\"$digest\"),\n                        u.$$checkUrlChange(),\n                        this === l && null !== r && (u.defer.cancel(r), w()),\n                        (n = null);\n                      do {\n                        (p = !1), ($ = C);\n                        for (var E = 0; E < f.length; E++) {\n                          try {\n                            (0, (x = f[E]).fn)(x.scope, x.locals);\n                          } catch (t) {\n                            i(t);\n                          }\n                          n = null;\n                        }\n                        f.length = 0;\n                        t: do {\n                          if ((c = !$.$$suspended && $.$$watchers))\n                            for (c.$$digestWatchIndex = c.length; c.$$digestWatchIndex--; )\n                              try {\n                                if ((o = c[c.$$digestWatchIndex]))\n                                  if (\n                                    (a = (0, o.get)($)) === (s = o.last) ||\n                                    (o.eq ? ct(a, s) : M(a) && M(s))\n                                  ) {\n                                    if (o === n) {\n                                      p = !1;\n                                      break t;\n                                    }\n                                  } else\n                                    (p = !0),\n                                      (n = o),\n                                      (o.last = o.eq ? ut(a, null) : a),\n                                      (0, o.fn)(a, s === b ? a : s, $),\n                                      _ < 5 &&\n                                        (S[(y = 4 - _)] || (S[y] = []),\n                                        S[y].push({\n                                          msg: K(o.exp)\n                                            ? \"fn: \" + (o.exp.name || o.exp.toString())\n                                            : o.exp,\n                                          newVal: a,\n                                          oldVal: s\n                                        }));\n                              } catch (t) {\n                                i(t);\n                              }\n                          if (\n                            !(d =\n                              (!$.$$suspended && $.$$watchersCount && $.$$childHead) ||\n                              ($ !== C && $.$$nextSibling))\n                          )\n                            for (; $ !== C && !(d = $.$$nextSibling); ) $ = $.$parent;\n                        } while (($ = d));\n                        if ((p || f.length) && !_--)\n                          throw (m(),\n                          e(\n                            \"infdig\",\n                            \"{0} $digest() iterations reached. Aborting!\\nWatchers fired in the last 5 iterations: {1}\",\n                            t,\n                            S\n                          ));\n                      } while (p || f.length);\n                      for (m(); v < h.length; )\n                        try {\n                          h[v++]();\n                        } catch (t) {\n                          i(t);\n                        }\n                      (h.length = v = 0), u.$$checkUrlChange();\n                    },\n                    $suspend: function() {\n                      this.$$suspended = !0;\n                    },\n                    $isSuspended: function() {\n                      return this.$$suspended;\n                    },\n                    $resume: function() {\n                      this.$$suspended = !1;\n                    },\n                    $destroy: function() {\n                      if (!this.$$destroyed) {\n                        var t = this.$parent;\n                        for (var e in (this.$broadcast(\"$destroy\"),\n                        (this.$$destroyed = !0),\n                        this === l && u.$$applicationDestroyed(),\n                        $(this, -this.$$watchersCount),\n                        this.$$listenerCount))\n                          y(this, this.$$listenerCount[e], e);\n                        t && t.$$childHead === this && (t.$$childHead = this.$$nextSibling),\n                          t && t.$$childTail === this && (t.$$childTail = this.$$prevSibling),\n                          this.$$prevSibling &&\n                            (this.$$prevSibling.$$nextSibling = this.$$nextSibling),\n                          this.$$nextSibling &&\n                            (this.$$nextSibling.$$prevSibling = this.$$prevSibling),\n                          (this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = D),\n                          (this.$on = this.$watch = this.$watchGroup = function() {\n                            return D;\n                          }),\n                          (this.$$listeners = {}),\n                          (this.$$nextSibling = null),\n                          (function t(e) {\n                            9 === a &&\n                              (e.$$childHead && t(e.$$childHead),\n                              e.$$nextSibling && t(e.$$nextSibling)),\n                              (e.$parent = e.$$nextSibling = e.$$prevSibling = e.$$childHead = e.$$childTail = e.$root = e.$$watchers = null);\n                          })(this);\n                      }\n                    },\n                    $eval: function(t, e) {\n                      return o(t)(this, e);\n                    },\n                    $evalAsync: function(t, e) {\n                      l.$$phase ||\n                        f.length ||\n                        u.defer(\n                          function() {\n                            f.length && l.$digest();\n                          },\n                          null,\n                          \"$evalAsync\"\n                        ),\n                        f.push({ scope: this, fn: o(t), locals: e });\n                    },\n                    $$postDigest: function(t) {\n                      h.push(t);\n                    },\n                    $apply: function(t) {\n                      try {\n                        g(\"$apply\");\n                        try {\n                          return this.$eval(t);\n                        } finally {\n                          m();\n                        }\n                      } catch (t) {\n                        i(t);\n                      } finally {\n                        try {\n                          l.$digest();\n                        } catch (t) {\n                          throw (i(t), t);\n                        }\n                      }\n                    },\n                    $applyAsync: function(t) {\n                      var e = this;\n                      t &&\n                        d.push(function() {\n                          e.$eval(t);\n                        }),\n                        (t = o(t)),\n                        null === r &&\n                          (r = u.defer(\n                            function() {\n                              l.$apply(w);\n                            },\n                            null,\n                            \"$applyAsync\"\n                          ));\n                    },\n                    $on: function(t, e) {\n                      var n = this.$$listeners[t];\n                      n || (this.$$listeners[t] = n = []), n.push(e);\n                      var r = this;\n                      do {\n                        r.$$listenerCount[t] || (r.$$listenerCount[t] = 0), r.$$listenerCount[t]++;\n                      } while ((r = r.$parent));\n                      var i = this;\n                      return function() {\n                        var r = n.indexOf(e);\n                        -1 !== r && (delete n[r], y(i, 1, t));\n                      };\n                    },\n                    $emit: function(t, e) {\n                      var n,\n                        r,\n                        o,\n                        a = [],\n                        u = this,\n                        s = !1,\n                        c = {\n                          name: t,\n                          targetScope: u,\n                          stopPropagation: function() {\n                            s = !0;\n                          },\n                          preventDefault: function() {\n                            c.defaultPrevented = !0;\n                          },\n                          defaultPrevented: !1\n                        },\n                        l = pt([c], arguments, 1);\n                      do {\n                        for (\n                          n = u.$$listeners[t] || a, c.currentScope = u, r = 0, o = n.length;\n                          r < o;\n                          r++\n                        )\n                          if (n[r])\n                            try {\n                              n[r].apply(null, l);\n                            } catch (t) {\n                              i(t);\n                            }\n                          else n.splice(r, 1), r--, o--;\n                        if (s) break;\n                        u = u.$parent;\n                      } while (u);\n                      return (c.currentScope = null), c;\n                    },\n                    $broadcast: function(t, e) {\n                      var n = this,\n                        r = this,\n                        o = {\n                          name: t,\n                          targetScope: this,\n                          preventDefault: function() {\n                            o.defaultPrevented = !0;\n                          },\n                          defaultPrevented: !1\n                        };\n                      if (!this.$$listenerCount[t]) return o;\n                      for (var a, u, s, c = pt([o], arguments, 1); (n = r); ) {\n                        for (\n                          o.currentScope = n, u = 0, s = (a = n.$$listeners[t] || []).length;\n                          u < s;\n                          u++\n                        )\n                          if (a[u])\n                            try {\n                              a[u].apply(null, c);\n                            } catch (t) {\n                              i(t);\n                            }\n                          else a.splice(u, 1), u--, s--;\n                        if (\n                          !(r =\n                            (n.$$listenerCount[t] && n.$$childHead) ||\n                            (n !== this && n.$$nextSibling))\n                        )\n                          for (; n !== this && !(r = n.$$nextSibling); ) n = n.$parent;\n                      }\n                      return (o.currentScope = null), o;\n                    }\n                  };\n                  var l = new c(),\n                    f = (l.$$asyncQueue = []),\n                    h = (l.$$postDigestQueue = []),\n                    d = (l.$$applyAsyncQueue = []),\n                    v = 0;\n                  return l;\n                  function g(t) {\n                    if (l.$$phase) throw e(\"inprog\", \"{0} already in progress\", l.$$phase);\n                    l.$$phase = t;\n                  }\n                  function m() {\n                    l.$$phase = null;\n                  }\n                  function $(t, e) {\n                    do {\n                      t.$$watchersCount += e;\n                    } while ((t = t.$parent));\n                  }\n                  function y(t, e, n) {\n                    do {\n                      (t.$$listenerCount[n] -= e),\n                        0 === t.$$listenerCount[n] && delete t.$$listenerCount[n];\n                    } while ((t = t.$parent));\n                  }\n                  function b() {}\n                  function w() {\n                    for (; d.length; )\n                      try {\n                        d.shift()();\n                      } catch (t) {\n                        i(t);\n                      }\n                    r = null;\n                  }\n                }\n              ]);\n          }\n          function zr() {\n            var t = /^\\s*(https?|s?ftp|mailto|tel|file):/,\n              e = /^\\s*((https?|ftp|file|blob):|data:image\\/)/;\n            (this.aHrefSanitizationWhitelist = function(e) {\n              return q(e) ? ((t = e), this) : t;\n            }),\n              (this.imgSrcSanitizationWhitelist = function(t) {\n                return q(t) ? ((e = t), this) : e;\n              }),\n              (this.$get = function() {\n                return function(n, r) {\n                  var i = r ? e : t,\n                    o = ci(n && n.trim()).href;\n                  return \"\" === o || o.match(i) ? n : \"unsafe:\" + o;\n                };\n              });\n          }\n          (Nr.prototype = {\n            compile: function(t) {\n              var e = this;\n              (this.state = {\n                nextId: 0,\n                filters: {},\n                fn: { vars: [], body: [], own: {} },\n                assign: { vars: [], body: [], own: {} },\n                inputs: []\n              }),\n                Ar(t, e.$filter);\n              var n,\n                r = \"\";\n              if (((this.stage = \"assign\"), (n = jr(t)))) {\n                this.state.computing = \"assign\";\n                var i = this.nextId();\n                this.recurse(n, i),\n                  this.return_(i),\n                  (r = \"fn.assign=\" + this.generateFunction(\"assign\", \"s,v,l\"));\n              }\n              var o = Tr(t.body);\n              (e.stage = \"inputs\"),\n                C(o, function(t, n) {\n                  var r = \"fn\" + n;\n                  (e.state[r] = { vars: [], body: [], own: {} }), (e.state.computing = r);\n                  var i = e.nextId();\n                  e.recurse(t, i),\n                    e.return_(i),\n                    e.state.inputs.push({ name: r, isPure: t.isPure }),\n                    (t.watchId = n);\n                }),\n                (this.state.computing = \"fn\"),\n                (this.stage = \"main\"),\n                this.recurse(t);\n              var a =\n                  '\"' +\n                  this.USE +\n                  \" \" +\n                  this.STRICT +\n                  '\";\\n' +\n                  this.filterPrefix() +\n                  \"var fn=\" +\n                  this.generateFunction(\"fn\", \"s,l,a,i\") +\n                  r +\n                  this.watchFns() +\n                  \"return fn;\",\n                u = new Function(\"$filter\", \"getStringValue\", \"ifDefined\", \"plus\", a)(\n                  this.$filter,\n                  yr,\n                  Cr,\n                  Sr\n                );\n              return (this.state = this.stage = void 0), u;\n            },\n            USE: \"use\",\n            STRICT: \"strict\",\n            watchFns: function() {\n              var t = [],\n                e = this.state.inputs,\n                n = this;\n              return (\n                C(e, function(e) {\n                  t.push(\"var \" + e.name + \"=\" + n.generateFunction(e.name, \"s\")),\n                    e.isPure && t.push(e.name, \".isPure=\" + JSON.stringify(e.isPure) + \";\");\n                }),\n                e.length &&\n                  t.push(\n                    \"fn.inputs=[\" +\n                      e\n                        .map(function(t) {\n                          return t.name;\n                        })\n                        .join(\",\") +\n                      \"];\"\n                  ),\n                t.join(\"\")\n              );\n            },\n            generateFunction: function(t, e) {\n              return \"function(\" + e + \"){\" + this.varsPrefix(t) + this.body(t) + \"};\";\n            },\n            filterPrefix: function() {\n              var t = [],\n                e = this;\n              return (\n                C(this.state.filters, function(n, r) {\n                  t.push(n + \"=$filter(\" + e.escape(r) + \")\");\n                }),\n                t.length ? \"var \" + t.join(\",\") + \";\" : \"\"\n              );\n            },\n            varsPrefix: function(t) {\n              return this.state[t].vars.length ? \"var \" + this.state[t].vars.join(\",\") + \";\" : \"\";\n            },\n            body: function(t) {\n              return this.state[t].body.join(\"\");\n            },\n            recurse: function(t, e, n, r, i, o) {\n              var a,\n                u,\n                s,\n                c,\n                l,\n                f = this;\n              if (((r = r || D), !o && q(t.watchId)))\n                return (\n                  (e = e || this.nextId()),\n                  void this.if_(\n                    \"i\",\n                    this.lazyAssign(e, this.computedMember(\"i\", t.watchId)),\n                    this.lazyRecurse(t, e, n, r, i, !0)\n                  )\n                );\n              switch (t.type) {\n                case _r.Program:\n                  C(t.body, function(e, n) {\n                    f.recurse(e.expression, void 0, void 0, function(t) {\n                      u = t;\n                    }),\n                      n !== t.body.length - 1 ? f.current().body.push(u, \";\") : f.return_(u);\n                  });\n                  break;\n                case _r.Literal:\n                  (c = this.escape(t.value)), this.assign(e, c), r(e || c);\n                  break;\n                case _r.UnaryExpression:\n                  this.recurse(t.argument, void 0, void 0, function(t) {\n                    u = t;\n                  }),\n                    (c = t.operator + \"(\" + this.ifDefined(u, 0) + \")\"),\n                    this.assign(e, c),\n                    r(c);\n                  break;\n                case _r.BinaryExpression:\n                  this.recurse(t.left, void 0, void 0, function(t) {\n                    a = t;\n                  }),\n                    this.recurse(t.right, void 0, void 0, function(t) {\n                      u = t;\n                    }),\n                    (c =\n                      \"+\" === t.operator\n                        ? this.plus(a, u)\n                        : \"-\" === t.operator\n                          ? this.ifDefined(a, 0) + t.operator + this.ifDefined(u, 0)\n                          : \"(\" + a + \")\" + t.operator + \"(\" + u + \")\"),\n                    this.assign(e, c),\n                    r(c);\n                  break;\n                case _r.LogicalExpression:\n                  (e = e || this.nextId()),\n                    f.recurse(t.left, e),\n                    f.if_(\"&&\" === t.operator ? e : f.not(e), f.lazyRecurse(t.right, e)),\n                    r(e);\n                  break;\n                case _r.ConditionalExpression:\n                  (e = e || this.nextId()),\n                    f.recurse(t.test, e),\n                    f.if_(e, f.lazyRecurse(t.alternate, e), f.lazyRecurse(t.consequent, e)),\n                    r(e);\n                  break;\n                case _r.Identifier:\n                  (e = e || this.nextId()),\n                    n &&\n                      ((n.context =\n                        \"inputs\" === f.stage\n                          ? \"s\"\n                          : this.assign(\n                              this.nextId(),\n                              this.getHasOwnProperty(\"l\", t.name) + \"?l:s\"\n                            )),\n                      (n.computed = !1),\n                      (n.name = t.name)),\n                    f.if_(\n                      \"inputs\" === f.stage || f.not(f.getHasOwnProperty(\"l\", t.name)),\n                      function() {\n                        f.if_(\"inputs\" === f.stage || \"s\", function() {\n                          i &&\n                            1 !== i &&\n                            f.if_(\n                              f.isNull(f.nonComputedMember(\"s\", t.name)),\n                              f.lazyAssign(f.nonComputedMember(\"s\", t.name), \"{}\")\n                            ),\n                            f.assign(e, f.nonComputedMember(\"s\", t.name));\n                        });\n                      },\n                      e && f.lazyAssign(e, f.nonComputedMember(\"l\", t.name))\n                    ),\n                    r(e);\n                  break;\n                case _r.MemberExpression:\n                  (a = (n && (n.context = this.nextId())) || this.nextId()),\n                    (e = e || this.nextId()),\n                    f.recurse(\n                      t.object,\n                      a,\n                      void 0,\n                      function() {\n                        f.if_(\n                          f.notNull(a),\n                          function() {\n                            t.computed\n                              ? ((u = f.nextId()),\n                                f.recurse(t.property, u),\n                                f.getStringValue(u),\n                                i &&\n                                  1 !== i &&\n                                  f.if_(\n                                    f.not(f.computedMember(a, u)),\n                                    f.lazyAssign(f.computedMember(a, u), \"{}\")\n                                  ),\n                                (c = f.computedMember(a, u)),\n                                f.assign(e, c),\n                                n && ((n.computed = !0), (n.name = u)))\n                              : (i &&\n                                  1 !== i &&\n                                  f.if_(\n                                    f.isNull(f.nonComputedMember(a, t.property.name)),\n                                    f.lazyAssign(f.nonComputedMember(a, t.property.name), \"{}\")\n                                  ),\n                                (c = f.nonComputedMember(a, t.property.name)),\n                                f.assign(e, c),\n                                n && ((n.computed = !1), (n.name = t.property.name)));\n                          },\n                          function() {\n                            f.assign(e, \"undefined\");\n                          }\n                        ),\n                          r(e);\n                      },\n                      !!i\n                    );\n                  break;\n                case _r.CallExpression:\n                  (e = e || this.nextId()),\n                    t.filter\n                      ? ((u = f.filter(t.callee.name)),\n                        (s = []),\n                        C(t.arguments, function(t) {\n                          var e = f.nextId();\n                          f.recurse(t, e), s.push(e);\n                        }),\n                        (c = u + \"(\" + s.join(\",\") + \")\"),\n                        f.assign(e, c),\n                        r(e))\n                      : ((u = f.nextId()),\n                        (a = {}),\n                        (s = []),\n                        f.recurse(t.callee, u, a, function() {\n                          f.if_(\n                            f.notNull(u),\n                            function() {\n                              C(t.arguments, function(e) {\n                                f.recurse(e, t.constant ? void 0 : f.nextId(), void 0, function(t) {\n                                  s.push(t);\n                                });\n                              }),\n                                (c = a.name\n                                  ? f.member(a.context, a.name, a.computed) +\n                                    \"(\" +\n                                    s.join(\",\") +\n                                    \")\"\n                                  : u + \"(\" + s.join(\",\") + \")\"),\n                                f.assign(e, c);\n                            },\n                            function() {\n                              f.assign(e, \"undefined\");\n                            }\n                          ),\n                            r(e);\n                        }));\n                  break;\n                case _r.AssignmentExpression:\n                  (u = this.nextId()),\n                    (a = {}),\n                    this.recurse(\n                      t.left,\n                      void 0,\n                      a,\n                      function() {\n                        f.if_(f.notNull(a.context), function() {\n                          f.recurse(t.right, u),\n                            (c = f.member(a.context, a.name, a.computed) + t.operator + u),\n                            f.assign(e, c),\n                            r(e || c);\n                        });\n                      },\n                      1\n                    );\n                  break;\n                case _r.ArrayExpression:\n                  (s = []),\n                    C(t.elements, function(e) {\n                      f.recurse(e, t.constant ? void 0 : f.nextId(), void 0, function(t) {\n                        s.push(t);\n                      });\n                    }),\n                    (c = \"[\" + s.join(\",\") + \"]\"),\n                    this.assign(e, c),\n                    r(e || c);\n                  break;\n                case _r.ObjectExpression:\n                  (s = []),\n                    (l = !1),\n                    C(t.properties, function(t) {\n                      t.computed && (l = !0);\n                    }),\n                    l\n                      ? ((e = e || this.nextId()),\n                        this.assign(e, \"{}\"),\n                        C(t.properties, function(t) {\n                          t.computed\n                            ? ((a = f.nextId()), f.recurse(t.key, a))\n                            : (a = t.key.type === _r.Identifier ? t.key.name : \"\" + t.key.value),\n                            (u = f.nextId()),\n                            f.recurse(t.value, u),\n                            f.assign(f.member(e, a, t.computed), u);\n                        }))\n                      : (C(t.properties, function(e) {\n                          f.recurse(e.value, t.constant ? void 0 : f.nextId(), void 0, function(t) {\n                            s.push(\n                              f.escape(\n                                e.key.type === _r.Identifier ? e.key.name : \"\" + e.key.value\n                              ) +\n                                \":\" +\n                                t\n                            );\n                          });\n                        }),\n                        (c = \"{\" + s.join(\",\") + \"}\"),\n                        this.assign(e, c)),\n                    r(e || c);\n                  break;\n                case _r.ThisExpression:\n                  this.assign(e, \"s\"), r(e || \"s\");\n                  break;\n                case _r.LocalsExpression:\n                  this.assign(e, \"l\"), r(e || \"l\");\n                  break;\n                case _r.NGValueParameter:\n                  this.assign(e, \"v\"), r(e || \"v\");\n              }\n            },\n            getHasOwnProperty: function(t, e) {\n              var n = t + \".\" + e,\n                r = this.current().own;\n              return (\n                r.hasOwnProperty(n) ||\n                  (r[n] = this.nextId(!1, t + \"&&(\" + this.escape(e) + \" in \" + t + \")\")),\n                r[n]\n              );\n            },\n            assign: function(t, e) {\n              if (t) return this.current().body.push(t, \"=\", e, \";\"), t;\n            },\n            filter: function(t) {\n              return (\n                this.state.filters.hasOwnProperty(t) || (this.state.filters[t] = this.nextId(!0)),\n                this.state.filters[t]\n              );\n            },\n            ifDefined: function(t, e) {\n              return \"ifDefined(\" + t + \",\" + this.escape(e) + \")\";\n            },\n            plus: function(t, e) {\n              return \"plus(\" + t + \",\" + e + \")\";\n            },\n            return_: function(t) {\n              this.current().body.push(\"return \", t, \";\");\n            },\n            if_: function(t, e, n) {\n              if (!0 === t) e();\n              else {\n                var r = this.current().body;\n                r.push(\"if(\", t, \"){\"), e(), r.push(\"}\"), n && (r.push(\"else{\"), n(), r.push(\"}\"));\n              }\n            },\n            not: function(t) {\n              return \"!(\" + t + \")\";\n            },\n            isNull: function(t) {\n              return t + \"==null\";\n            },\n            notNull: function(t) {\n              return t + \"!=null\";\n            },\n            nonComputedMember: function(t, e) {\n              return /^[$_a-zA-Z][$_a-zA-Z0-9]*$/.test(e)\n                ? t + \".\" + e\n                : t + '[\"' + e.replace(/[^$_a-zA-Z0-9]/g, this.stringEscapeFn) + '\"]';\n            },\n            computedMember: function(t, e) {\n              return t + \"[\" + e + \"]\";\n            },\n            member: function(t, e, n) {\n              return n ? this.computedMember(t, e) : this.nonComputedMember(t, e);\n            },\n            getStringValue: function(t) {\n              this.assign(t, \"getStringValue(\" + t + \")\");\n            },\n            lazyRecurse: function(t, e, n, r, i, o) {\n              var a = this;\n              return function() {\n                a.recurse(t, e, n, r, i, o);\n              };\n            },\n            lazyAssign: function(t, e) {\n              var n = this;\n              return function() {\n                n.assign(t, e);\n              };\n            },\n            stringEscapeRegex: /[^ a-zA-Z0-9]/g,\n            stringEscapeFn: function(t) {\n              return \"\\\\u\" + (\"0000\" + t.charCodeAt(0).toString(16)).slice(-4);\n            },\n            escape: function(t) {\n              if (H(t)) return \"'\" + t.replace(this.stringEscapeRegex, this.stringEscapeFn) + \"'\";\n              if (B(t)) return t.toString();\n              if (!0 === t) return \"true\";\n              if (!1 === t) return \"false\";\n              if (null === t) return \"null\";\n              if (void 0 === t) return \"undefined\";\n              throw mr(\"esc\", \"IMPOSSIBLE\");\n            },\n            nextId: function(t, e) {\n              var n = \"v\" + this.state.nextId++;\n              return t || this.current().vars.push(n + (e ? \"=\" + e : \"\")), n;\n            },\n            current: function() {\n              return this.state[this.state.computing];\n            }\n          }),\n            (Mr.prototype = {\n              compile: function(t) {\n                var e,\n                  n,\n                  r = this;\n                Ar(t, r.$filter), (e = jr(t)) && (n = this.recurse(e));\n                var i,\n                  o = Tr(t.body);\n                o &&\n                  ((i = []),\n                  C(o, function(t, e) {\n                    var n = r.recurse(t);\n                    (n.isPure = t.isPure), (t.input = n), i.push(n), (t.watchId = e);\n                  }));\n                var a = [];\n                C(t.body, function(t) {\n                  a.push(r.recurse(t.expression));\n                });\n                var u =\n                  0 === t.body.length\n                    ? D\n                    : 1 === t.body.length\n                      ? a[0]\n                      : function(t, e) {\n                          var n;\n                          return (\n                            C(a, function(r) {\n                              n = r(t, e);\n                            }),\n                            n\n                          );\n                        };\n                return (\n                  n &&\n                    (u.assign = function(t, e, r) {\n                      return n(t, r, e);\n                    }),\n                  i && (u.inputs = i),\n                  u\n                );\n              },\n              recurse: function(t, e, n) {\n                var r,\n                  i,\n                  o,\n                  a = this;\n                if (t.input) return this.inputs(t.input, t.watchId);\n                switch (t.type) {\n                  case _r.Literal:\n                    return this.value(t.value, e);\n                  case _r.UnaryExpression:\n                    return (i = this.recurse(t.argument)), this[\"unary\" + t.operator](i, e);\n                  case _r.BinaryExpression:\n                  case _r.LogicalExpression:\n                    return (\n                      (r = this.recurse(t.left)),\n                      (i = this.recurse(t.right)),\n                      this[\"binary\" + t.operator](r, i, e)\n                    );\n                  case _r.ConditionalExpression:\n                    return this[\"ternary?:\"](\n                      this.recurse(t.test),\n                      this.recurse(t.alternate),\n                      this.recurse(t.consequent),\n                      e\n                    );\n                  case _r.Identifier:\n                    return a.identifier(t.name, e, n);\n                  case _r.MemberExpression:\n                    return (\n                      (r = this.recurse(t.object, !1, !!n)),\n                      t.computed || (i = t.property.name),\n                      t.computed && (i = this.recurse(t.property)),\n                      t.computed\n                        ? this.computedMember(r, i, e, n)\n                        : this.nonComputedMember(r, i, e, n)\n                    );\n                  case _r.CallExpression:\n                    return (\n                      (o = []),\n                      C(t.arguments, function(t) {\n                        o.push(a.recurse(t));\n                      }),\n                      t.filter && (i = this.$filter(t.callee.name)),\n                      t.filter || (i = this.recurse(t.callee, !0)),\n                      t.filter\n                        ? function(t, n, r, a) {\n                            for (var u = [], s = 0; s < o.length; ++s) u.push(o[s](t, n, r, a));\n                            var c = i.apply(void 0, u, a);\n                            return e ? { context: void 0, name: void 0, value: c } : c;\n                          }\n                        : function(t, n, r, a) {\n                            var u,\n                              s = i(t, n, r, a);\n                            if (null != s.value) {\n                              for (var c = [], l = 0; l < o.length; ++l) c.push(o[l](t, n, r, a));\n                              u = s.value.apply(s.context, c);\n                            }\n                            return e ? { value: u } : u;\n                          }\n                    );\n                  case _r.AssignmentExpression:\n                    return (\n                      (r = this.recurse(t.left, !0, 1)),\n                      (i = this.recurse(t.right)),\n                      function(t, n, o, a) {\n                        var u = r(t, n, o, a),\n                          s = i(t, n, o, a);\n                        return (u.context[u.name] = s), e ? { value: s } : s;\n                      }\n                    );\n                  case _r.ArrayExpression:\n                    return (\n                      (o = []),\n                      C(t.elements, function(t) {\n                        o.push(a.recurse(t));\n                      }),\n                      function(t, n, r, i) {\n                        for (var a = [], u = 0; u < o.length; ++u) a.push(o[u](t, n, r, i));\n                        return e ? { value: a } : a;\n                      }\n                    );\n                  case _r.ObjectExpression:\n                    return (\n                      (o = []),\n                      C(t.properties, function(t) {\n                        t.computed\n                          ? o.push({\n                              key: a.recurse(t.key),\n                              computed: !0,\n                              value: a.recurse(t.value)\n                            })\n                          : o.push({\n                              key: t.key.type === _r.Identifier ? t.key.name : \"\" + t.key.value,\n                              computed: !1,\n                              value: a.recurse(t.value)\n                            });\n                      }),\n                      function(t, n, r, i) {\n                        for (var a = {}, u = 0; u < o.length; ++u)\n                          o[u].computed\n                            ? (a[o[u].key(t, n, r, i)] = o[u].value(t, n, r, i))\n                            : (a[o[u].key] = o[u].value(t, n, r, i));\n                        return e ? { value: a } : a;\n                      }\n                    );\n                  case _r.ThisExpression:\n                    return function(t) {\n                      return e ? { value: t } : t;\n                    };\n                  case _r.LocalsExpression:\n                    return function(t, n) {\n                      return e ? { value: n } : n;\n                    };\n                  case _r.NGValueParameter:\n                    return function(t, n, r) {\n                      return e ? { value: r } : r;\n                    };\n                }\n              },\n              \"unary+\": function(t, e) {\n                return function(n, r, i, o) {\n                  var a = t(n, r, i, o);\n                  return (a = q(a) ? +a : 0), e ? { value: a } : a;\n                };\n              },\n              \"unary-\": function(t, e) {\n                return function(n, r, i, o) {\n                  var a = t(n, r, i, o);\n                  return (a = q(a) ? -a : -0), e ? { value: a } : a;\n                };\n              },\n              \"unary!\": function(t, e) {\n                return function(n, r, i, o) {\n                  var a = !t(n, r, i, o);\n                  return e ? { value: a } : a;\n                };\n              },\n              \"binary+\": function(t, e, n) {\n                return function(r, i, o, a) {\n                  var u = Sr(t(r, i, o, a), e(r, i, o, a));\n                  return n ? { value: u } : u;\n                };\n              },\n              \"binary-\": function(t, e, n) {\n                return function(r, i, o, a) {\n                  var u = t(r, i, o, a),\n                    s = e(r, i, o, a),\n                    c = (q(u) ? u : 0) - (q(s) ? s : 0);\n                  return n ? { value: c } : c;\n                };\n              },\n              \"binary*\": function(t, e, n) {\n                return function(r, i, o, a) {\n                  var u = t(r, i, o, a) * e(r, i, o, a);\n                  return n ? { value: u } : u;\n                };\n              },\n              \"binary/\": function(t, e, n) {\n                return function(r, i, o, a) {\n                  var u = t(r, i, o, a) / e(r, i, o, a);\n                  return n ? { value: u } : u;\n                };\n              },\n              \"binary%\": function(t, e, n) {\n                return function(r, i, o, a) {\n                  var u = t(r, i, o, a) % e(r, i, o, a);\n                  return n ? { value: u } : u;\n                };\n              },\n              \"binary===\": function(t, e, n) {\n                return function(r, i, o, a) {\n                  var u = t(r, i, o, a) === e(r, i, o, a);\n                  return n ? { value: u } : u;\n                };\n              },\n              \"binary!==\": function(t, e, n) {\n                return function(r, i, o, a) {\n                  var u = t(r, i, o, a) !== e(r, i, o, a);\n                  return n ? { value: u } : u;\n                };\n              },\n              \"binary==\": function(t, e, n) {\n                return function(r, i, o, a) {\n                  var u = t(r, i, o, a) == e(r, i, o, a);\n                  return n ? { value: u } : u;\n                };\n              },\n              \"binary!=\": function(t, e, n) {\n                return function(r, i, o, a) {\n                  var u = t(r, i, o, a) != e(r, i, o, a);\n                  return n ? { value: u } : u;\n                };\n              },\n              \"binary<\": function(t, e, n) {\n                return function(r, i, o, a) {\n                  var u = t(r, i, o, a) < e(r, i, o, a);\n                  return n ? { value: u } : u;\n                };\n              },\n              \"binary>\": function(t, e, n) {\n                return function(r, i, o, a) {\n                  var u = t(r, i, o, a) > e(r, i, o, a);\n                  return n ? { value: u } : u;\n                };\n              },\n              \"binary<=\": function(t, e, n) {\n                return function(r, i, o, a) {\n                  var u = t(r, i, o, a) <= e(r, i, o, a);\n                  return n ? { value: u } : u;\n                };\n              },\n              \"binary>=\": function(t, e, n) {\n                return function(r, i, o, a) {\n                  var u = t(r, i, o, a) >= e(r, i, o, a);\n                  return n ? { value: u } : u;\n                };\n              },\n              \"binary&&\": function(t, e, n) {\n                return function(r, i, o, a) {\n                  var u = t(r, i, o, a) && e(r, i, o, a);\n                  return n ? { value: u } : u;\n                };\n              },\n              \"binary||\": function(t, e, n) {\n                return function(r, i, o, a) {\n                  var u = t(r, i, o, a) || e(r, i, o, a);\n                  return n ? { value: u } : u;\n                };\n              },\n              \"ternary?:\": function(t, e, n, r) {\n                return function(i, o, a, u) {\n                  var s = t(i, o, a, u) ? e(i, o, a, u) : n(i, o, a, u);\n                  return r ? { value: s } : s;\n                };\n              },\n              value: function(t, e) {\n                return function() {\n                  return e ? { context: void 0, name: void 0, value: t } : t;\n                };\n              },\n              identifier: function(t, e, n) {\n                return function(r, i, o, a) {\n                  var u = i && t in i ? i : r;\n                  n && 1 !== n && u && null == u[t] && (u[t] = {});\n                  var s = u ? u[t] : void 0;\n                  return e ? { context: u, name: t, value: s } : s;\n                };\n              },\n              computedMember: function(t, e, n, r) {\n                return function(i, o, a, u) {\n                  var s,\n                    c,\n                    l = t(i, o, a, u);\n                  return (\n                    null != l &&\n                      ((s = yr((s = e(i, o, a, u)))),\n                      r && 1 !== r && l && !l[s] && (l[s] = {}),\n                      (c = l[s])),\n                    n ? { context: l, name: s, value: c } : c\n                  );\n                };\n              },\n              nonComputedMember: function(t, e, n, r) {\n                return function(i, o, a, u) {\n                  var s = t(i, o, a, u);\n                  r && 1 !== r && s && null == s[e] && (s[e] = {});\n                  var c = null != s ? s[e] : void 0;\n                  return n ? { context: s, name: e, value: c } : c;\n                };\n              },\n              inputs: function(t, e) {\n                return function(n, r, i, o) {\n                  return o ? o[e] : t(n, r, i);\n                };\n              }\n            }),\n            (Lr.prototype = {\n              constructor: Lr,\n              parse: function(t) {\n                var e = this.getAst(t),\n                  n = this.astCompiler.compile(e.ast);\n                return (\n                  (n.literal = (function(t) {\n                    return (\n                      0 === t.body.length ||\n                      (1 === t.body.length &&\n                        (t.body[0].expression.type === _r.Literal ||\n                          t.body[0].expression.type === _r.ArrayExpression ||\n                          t.body[0].expression.type === _r.ObjectExpression))\n                    );\n                  })(e.ast)),\n                  (n.constant = (function(t) {\n                    return t.constant;\n                  })(e.ast)),\n                  (n.oneTime = e.oneTime),\n                  n\n                );\n              },\n              getAst: function(t) {\n                var e = !1;\n                return (\n                  \":\" === (t = t.trim()).charAt(0) &&\n                    \":\" === t.charAt(1) &&\n                    ((e = !0), (t = t.substring(2))),\n                  { ast: this.ast.ast(t), oneTime: e }\n                );\n              }\n            });\n          var Wr = o(\"$sce\"),\n            Gr = {\n              HTML: \"html\",\n              CSS: \"css\",\n              MEDIA_URL: \"mediaUrl\",\n              URL: \"url\",\n              RESOURCE_URL: \"resourceUrl\",\n              JS: \"js\"\n            },\n            Kr = /_([a-z])/g;\n          function Jr(t) {\n            return t.replace(Kr, ne);\n          }\n          function Yr(t) {\n            var e = [];\n            return (\n              q(t) &&\n                C(t, function(t) {\n                  e.push(\n                    (function(t) {\n                      if (\"self\" === t) return t;\n                      if (H(t)) {\n                        if (t.indexOf(\"***\") > -1)\n                          throw Wr(\n                            \"iwcard\",\n                            \"Illegal sequence *** in string matcher.  String: {0}\",\n                            t\n                          );\n                        return (\n                          (t = nt(t)\n                            .replace(/\\\\\\*\\\\\\*/g, \".*\")\n                            .replace(/\\\\\\*/g, \"[^:/.?&;]*\")),\n                          new RegExp(\"^\" + t + \"$\")\n                        );\n                      }\n                      if (J(t)) return new RegExp(\"^\" + t.source + \"$\");\n                      throw Wr(\n                        \"imatcher\",\n                        'Matchers may only be \"self\", string patterns or RegExp objects'\n                      );\n                    })(t)\n                  );\n                }),\n              e\n            );\n          }\n          function Zr() {\n            this.SCE_CONTEXTS = Gr;\n            var t = [\"self\"],\n              n = [];\n            (this.resourceUrlWhitelist = function(e) {\n              return arguments.length && (t = Yr(e)), t;\n            }),\n              (this.resourceUrlBlacklist = function(t) {\n                return arguments.length && (n = Yr(t)), n;\n              }),\n              (this.$get = [\n                \"$injector\",\n                \"$$sanitizeUri\",\n                function(r, i) {\n                  var o = function(t) {\n                    throw Wr(\"unsafe\", \"Attempting to use an unsafe value in a safe context.\");\n                  };\n                  function a(t, n) {\n                    return \"self\" === t\n                      ? (function(t) {\n                          return li(t, si);\n                        })(n) ||\n                          (function(t) {\n                            return li(\n                              t,\n                              (function() {\n                                if (e.document.baseURI) return e.document.baseURI;\n                                ai ||\n                                  (((ai = e.document.createElement(\"a\")).href = \".\"),\n                                  (ai = ai.cloneNode(!1)));\n                                return ai.href;\n                              })()\n                            );\n                          })(n)\n                      : !!t.exec(n.href);\n                  }\n                  function u(t) {\n                    var e = function(t) {\n                      this.$$unwrapTrustedValue = function() {\n                        return t;\n                      };\n                    };\n                    return (\n                      t && (e.prototype = new t()),\n                      (e.prototype.valueOf = function() {\n                        return this.$$unwrapTrustedValue();\n                      }),\n                      (e.prototype.toString = function() {\n                        return this.$$unwrapTrustedValue().toString();\n                      }),\n                      e\n                    );\n                  }\n                  r.has(\"$sanitize\") && (o = r.get(\"$sanitize\"));\n                  var s = u(),\n                    c = {};\n                  return (\n                    (c[Gr.HTML] = u(s)),\n                    (c[Gr.CSS] = u(s)),\n                    (c[Gr.MEDIA_URL] = u(s)),\n                    (c[Gr.URL] = u(c[Gr.MEDIA_URL])),\n                    (c[Gr.JS] = u(s)),\n                    (c[Gr.RESOURCE_URL] = u(c[Gr.URL])),\n                    {\n                      trustAs: function(t, e) {\n                        var n = c.hasOwnProperty(t) ? c[t] : null;\n                        if (!n)\n                          throw Wr(\n                            \"icontext\",\n                            \"Attempted to trust a value in invalid context. Context: {0}; Value: {1}\",\n                            t,\n                            e\n                          );\n                        if (null === e || V(e) || \"\" === e) return e;\n                        if (\"string\" != typeof e)\n                          throw Wr(\n                            \"itype\",\n                            \"Attempted to trust a non-string value in a content requiring a string: Context: {0}\",\n                            t\n                          );\n                        return new n(e);\n                      },\n                      getTrusted: function(e, r) {\n                        if (null === r || V(r) || \"\" === r) return r;\n                        var u = c.hasOwnProperty(e) ? c[e] : null;\n                        if (u && r instanceof u) return r.$$unwrapTrustedValue();\n                        if (\n                          (K(r.$$unwrapTrustedValue) && (r = r.$$unwrapTrustedValue()),\n                          e === Gr.MEDIA_URL || e === Gr.URL)\n                        )\n                          return i(r, e === Gr.MEDIA_URL);\n                        if (e === Gr.RESOURCE_URL) {\n                          if (\n                            (function(e) {\n                              var r,\n                                i,\n                                o = ci(e.toString()),\n                                u = !1;\n                              for (r = 0, i = t.length; r < i; r++)\n                                if (a(t[r], o)) {\n                                  u = !0;\n                                  break;\n                                }\n                              if (u)\n                                for (r = 0, i = n.length; r < i; r++)\n                                  if (a(n[r], o)) {\n                                    u = !1;\n                                    break;\n                                  }\n                              return u;\n                            })(r)\n                          )\n                            return r;\n                          throw Wr(\n                            \"insecurl\",\n                            \"Blocked loading resource from url not allowed by $sceDelegate policy.  URL: {0}\",\n                            r.toString()\n                          );\n                        }\n                        if (e === Gr.HTML) return o(r);\n                        throw Wr(\"unsafe\", \"Attempting to use an unsafe value in a safe context.\");\n                      },\n                      valueOf: function(t) {\n                        return t instanceof s ? t.$$unwrapTrustedValue() : t;\n                      }\n                    }\n                  );\n                }\n              ]);\n          }\n          function Xr() {\n            var t = !0;\n            (this.enabled = function(e) {\n              return arguments.length && (t = !!e), t;\n            }),\n              (this.$get = [\n                \"$parse\",\n                \"$sceDelegate\",\n                function(e, n) {\n                  if (t && a < 8)\n                    throw Wr(\n                      \"iequirks\",\n                      \"Strict Contextual Escaping does not support Internet Explorer version < 11 in quirks mode.  You can fix this by adding the text <!doctype html> to the top of your HTML document.  See http://docs.angularjs.org/api/ng.$sce for more information.\"\n                    );\n                  var r = Gt(Gr);\n                  (r.isEnabled = function() {\n                    return t;\n                  }),\n                    (r.trustAs = n.trustAs),\n                    (r.getTrusted = n.getTrusted),\n                    (r.valueOf = n.valueOf),\n                    t ||\n                      ((r.trustAs = r.getTrusted = function(t, e) {\n                        return e;\n                      }),\n                      (r.valueOf = I)),\n                    (r.parseAs = function(t, n) {\n                      var i = e(n);\n                      return i.literal && i.constant\n                        ? i\n                        : e(n, function(e) {\n                            return r.getTrusted(t, e);\n                          });\n                    });\n                  var i = r.parseAs,\n                    o = r.getTrusted,\n                    u = r.trustAs;\n                  return (\n                    C(Gr, function(t, e) {\n                      var n = h(e);\n                      (r[Jr(\"parse_as_\" + n)] = function(e) {\n                        return i(t, e);\n                      }),\n                        (r[Jr(\"get_trusted_\" + n)] = function(e) {\n                          return o(t, e);\n                        }),\n                        (r[Jr(\"trust_as_\" + n)] = function(e) {\n                          return u(t, e);\n                        });\n                    }),\n                    r\n                  );\n                }\n              ]);\n          }\n          function Qr() {\n            this.$get = [\n              \"$window\",\n              \"$document\",\n              function(t, e) {\n                var n = {},\n                  r =\n                    !(\n                      !(t.nw && t.nw.process) &&\n                      t.chrome &&\n                      ((t.chrome.app && t.chrome.app.runtime) ||\n                        (!t.chrome.app && t.chrome.runtime && t.chrome.runtime.id))\n                    ) &&\n                    t.history &&\n                    t.history.pushState,\n                  i = N((/android (\\d+)/.exec(h((t.navigator || {}).userAgent)) || [])[1]),\n                  o = /Boxee/i.test((t.navigator || {}).userAgent),\n                  u = e[0] || {},\n                  s = u.body && u.body.style,\n                  c = !1,\n                  l = !1;\n                return (\n                  s &&\n                    ((c = !!(\"transition\" in s || \"webkitTransition\" in s)),\n                    (l = !!(\"animation\" in s || \"webkitAnimation\" in s))),\n                  {\n                    history: !(!r || i < 4 || o),\n                    hasEvent: function(t) {\n                      if (\"input\" === t && a) return !1;\n                      if (V(n[t])) {\n                        var e = u.createElement(\"div\");\n                        n[t] = \"on\" + t in e;\n                      }\n                      return n[t];\n                    },\n                    csp: lt(),\n                    transitions: c,\n                    animations: l,\n                    android: i\n                  }\n                );\n              }\n            ];\n          }\n          function ti() {\n            this.$get = R(function(t) {\n              return new function(t) {\n                var e = {},\n                  n = [],\n                  r = (this.ALL_TASKS_TYPE = \"$$all$$\"),\n                  i = (this.DEFAULT_TASK_TYPE = \"$$default$$\");\n                function o() {\n                  var t = n.pop();\n                  return t && t.cb;\n                }\n                function a(t) {\n                  for (var e = n.length - 1; e >= 0; --e) {\n                    var r = n[e];\n                    if (r.type === t) return n.splice(e, 1), r.cb;\n                  }\n                }\n                (this.completeTask = function(n, u) {\n                  u = u || i;\n                  try {\n                    n();\n                  } finally {\n                    !(function(t) {\n                      e[(t = t || i)] && (e[t]--, e[r]--);\n                    })(u);\n                    var s = e[u],\n                      c = e[r];\n                    if (!c || !s)\n                      for (var l, f = c ? a : o; (l = f(u)); )\n                        try {\n                          l();\n                        } catch (e) {\n                          t.error(e);\n                        }\n                  }\n                }),\n                  (this.incTaskCount = function(t) {\n                    (e[(t = t || i)] = (e[t] || 0) + 1), (e[r] = (e[r] || 0) + 1);\n                  }),\n                  (this.notifyWhenNoPendingTasks = function(t, i) {\n                    e[(i = i || r)] ? n.push({ type: i, cb: t }) : t();\n                  });\n              }(t);\n            });\n          }\n          var ei = o(\"$templateRequest\");\n          function ni() {\n            var t;\n            (this.httpOptions = function(e) {\n              return e ? ((t = e), this) : t;\n            }),\n              (this.$get = [\n                \"$exceptionHandler\",\n                \"$templateCache\",\n                \"$http\",\n                \"$q\",\n                \"$sce\",\n                function(e, n, r, i, o) {\n                  function a(u, s) {\n                    a.totalPendingRequests++,\n                      (H(u) && !V(n.get(u))) || (u = o.getTrustedResourceUrl(u));\n                    var c = r.defaults && r.defaults.transformResponse;\n                    return (\n                      W(c)\n                        ? (c = c.filter(function(t) {\n                            return t !== Vn;\n                          }))\n                        : c === Vn && (c = null),\n                      r\n                        .get(u, O({ cache: n, transformResponse: c }, t))\n                        .finally(function() {\n                          a.totalPendingRequests--;\n                        })\n                        .then(\n                          function(t) {\n                            return n.put(u, t.data);\n                          },\n                          function(t) {\n                            s ||\n                              ((t = ei(\n                                \"tpload\",\n                                \"Failed to load template: {0} (HTTP status: {1} {2})\",\n                                u,\n                                t.status,\n                                t.statusText\n                              )),\n                              e(t));\n                            return i.reject(t);\n                          }\n                        )\n                    );\n                  }\n                  return (a.totalPendingRequests = 0), a;\n                }\n              ]);\n          }\n          function ri() {\n            this.$get = [\n              \"$rootScope\",\n              \"$browser\",\n              \"$location\",\n              function(t, e, n) {\n                var r = {\n                  findBindings: function(t, e, n) {\n                    var r = [];\n                    return (\n                      C(t.getElementsByClassName(\"ng-binding\"), function(t) {\n                        var i = w.element(t).data(\"$binding\");\n                        i &&\n                          C(i, function(i) {\n                            n\n                              ? new RegExp(\"(^|\\\\s)\" + nt(e) + \"(\\\\s|\\\\||$)\").test(i) && r.push(t)\n                              : -1 !== i.indexOf(e) && r.push(t);\n                          });\n                      }),\n                      r\n                    );\n                  },\n                  findModels: function(t, e, n) {\n                    for (var r = [\"ng-\", \"data-ng-\", \"ng\\\\:\"], i = 0; i < r.length; ++i) {\n                      var o = \"[\" + r[i] + \"model\" + (n ? \"=\" : \"*=\") + '\"' + e + '\"]',\n                        a = t.querySelectorAll(o);\n                      if (a.length) return a;\n                    }\n                  },\n                  getLocation: function() {\n                    return n.url();\n                  },\n                  setLocation: function(e) {\n                    e !== n.url() && (n.url(e), t.$digest());\n                  },\n                  whenStable: function(t) {\n                    e.notifyWhenNoOutstandingRequests(t);\n                  }\n                };\n                return r;\n              }\n            ];\n          }\n          var ii = o(\"$timeout\");\n          function oi() {\n            this.$get = [\n              \"$rootScope\",\n              \"$browser\",\n              \"$q\",\n              \"$$q\",\n              \"$exceptionHandler\",\n              function(t, e, n, r, i) {\n                var o = {};\n                function a(a, u, s) {\n                  K(a) || ((s = u), (u = a), (a = D));\n                  var c,\n                    l = ht(arguments, 3),\n                    f = q(s) && !s,\n                    p = (f ? r : n).defer(),\n                    h = p.promise;\n                  return (\n                    (c = e.defer(\n                      function() {\n                        try {\n                          p.resolve(a.apply(null, l));\n                        } catch (t) {\n                          p.reject(t), i(t);\n                        } finally {\n                          delete o[h.$$timeoutId];\n                        }\n                        f || t.$apply();\n                      },\n                      u,\n                      \"$timeout\"\n                    )),\n                    (h.$$timeoutId = c),\n                    (o[c] = p),\n                    h\n                  );\n                }\n                return (\n                  (a.cancel = function(t) {\n                    if (!t) return !1;\n                    if (!t.hasOwnProperty(\"$$timeoutId\"))\n                      throw ii(\n                        \"badprom\",\n                        \"`$timeout.cancel()` called with a promise that was not generated by `$timeout()`.\"\n                      );\n                    if (!o.hasOwnProperty(t.$$timeoutId)) return !1;\n                    var n = t.$$timeoutId,\n                      r = o[n];\n                    return Fr(r.promise), r.reject(\"canceled\"), delete o[n], e.defer.cancel(n);\n                  }),\n                  a\n                );\n              }\n            ];\n          }\n          var ai,\n            ui = e.document.createElement(\"a\"),\n            si = ci(e.location.href);\n          function ci(t) {\n            if (!H(t)) return t;\n            var e = t;\n            return (\n              a && (ui.setAttribute(\"href\", e), (e = ui.href)),\n              ui.setAttribute(\"href\", e),\n              {\n                href: ui.href,\n                protocol: ui.protocol ? ui.protocol.replace(/:$/, \"\") : \"\",\n                host: ui.host,\n                search: ui.search ? ui.search.replace(/^\\?/, \"\") : \"\",\n                hash: ui.hash ? ui.hash.replace(/^#/, \"\") : \"\",\n                hostname: ui.hostname,\n                port: ui.port,\n                pathname: \"/\" === ui.pathname.charAt(0) ? ui.pathname : \"/\" + ui.pathname\n              }\n            );\n          }\n          function li(t, e) {\n            return (t = ci(t)), (e = ci(e)), t.protocol === e.protocol && t.host === e.host;\n          }\n          function fi() {\n            this.$get = R(e);\n          }\n          function pi(t) {\n            var e = t[0] || {},\n              n = {},\n              r = \"\";\n            function i(t) {\n              try {\n                return decodeURIComponent(t);\n              } catch (e) {\n                return t;\n              }\n            }\n            return function() {\n              var t,\n                o,\n                a,\n                u,\n                s,\n                c = (function(t) {\n                  try {\n                    return t.cookie || \"\";\n                  } catch (t) {\n                    return \"\";\n                  }\n                })(e);\n              if (c !== r)\n                for (t = (r = c).split(\"; \"), n = {}, a = 0; a < t.length; a++)\n                  (u = (o = t[a]).indexOf(\"=\")) > 0 &&\n                    ((s = i(o.substring(0, u))), V(n[s]) && (n[s] = i(o.substring(u + 1))));\n              return n;\n            };\n          }\n          function hi() {\n            this.$get = pi;\n          }\n          function di(t) {\n            var e = \"Filter\";\n            function n(r, i) {\n              if (U(r)) {\n                var o = {};\n                return (\n                  C(r, function(t, e) {\n                    o[e] = n(e, t);\n                  }),\n                  o\n                );\n              }\n              return t.factory(r + e, i);\n            }\n            (this.register = n),\n              (this.$get = [\n                \"$injector\",\n                function(t) {\n                  return function(n) {\n                    return t.get(n + e);\n                  };\n                }\n              ]),\n              n(\"currency\", wi),\n              n(\"date\", Mi),\n              n(\"filter\", vi),\n              n(\"json\", Li),\n              n(\"limitTo\", Ri),\n              n(\"lowercase\", Di),\n              n(\"number\", xi),\n              n(\"orderBy\", Vi),\n              n(\"uppercase\", Ii);\n          }\n          function vi() {\n            return function(t, e, n, r) {\n              if (!_(t)) {\n                if (null == t) return t;\n                throw o(\"filter\")(\"notarray\", \"Expected array but received: {0}\", t);\n              }\n              var i, a;\n              switch (((r = r || \"$\"), mi(e))) {\n                case \"function\":\n                  i = e;\n                  break;\n                case \"boolean\":\n                case \"null\":\n                case \"number\":\n                case \"string\":\n                  a = !0;\n                case \"object\":\n                  i = (function(t, e, n, r) {\n                    var i = U(t) && n in t;\n                    !0 === e\n                      ? (e = ct)\n                      : K(e) ||\n                        (e = function(t, e) {\n                          return (\n                            !V(t) &&\n                            (null === t || null === e\n                              ? t === e\n                              : !(U(e) || (U(t) && !P(t))) &&\n                                ((t = h(\"\" + t)), (e = h(\"\" + e)), -1 !== t.indexOf(e)))\n                          );\n                        });\n                    return function(o) {\n                      return i && !U(o) ? gi(o, t[n], e, n, !1) : gi(o, t, e, n, r);\n                    };\n                  })(e, n, r, a);\n                  break;\n                default:\n                  return t;\n              }\n              return Array.prototype.filter.call(t, i);\n            };\n          }\n          function gi(t, e, n, r, i, o) {\n            var a = mi(t),\n              u = mi(e);\n            if (\"string\" === u && \"!\" === e.charAt(0)) return !gi(t, e.substring(1), n, r, i);\n            if (W(t))\n              return t.some(function(t) {\n                return gi(t, e, n, r, i);\n              });\n            switch (a) {\n              case \"object\":\n                var s;\n                if (i) {\n                  for (s in t)\n                    if (s.charAt && \"$\" !== s.charAt(0) && gi(t[s], e, n, r, !0)) return !0;\n                  return !o && gi(t, e, n, r, !1);\n                }\n                if (\"object\" === u) {\n                  for (s in e) {\n                    var c = e[s];\n                    if (!K(c) && !V(c)) {\n                      var l = s === r;\n                      if (!gi(l ? t : t[s], c, n, r, l, l)) return !1;\n                    }\n                  }\n                  return !0;\n                }\n                return n(t, e);\n              case \"function\":\n                return !1;\n              default:\n                return n(t, e);\n            }\n          }\n          function mi(t) {\n            return null === t ? \"null\" : typeof t;\n          }\n          (pi.$inject = [\"$document\"]), (di.$inject = [\"$provide\"]);\n          var $i = 22,\n            yi = \".\",\n            bi = \"0\";\n          function wi(t) {\n            var e = t.NUMBER_FORMATS;\n            return function(t, n, r) {\n              V(n) && (n = e.CURRENCY_SYM), V(r) && (r = e.PATTERNS[1].maxFrac);\n              var i = n ? /\\u00A4/g : /\\s*\\u00A4\\s*/g;\n              return null == t\n                ? t\n                : _i(t, e.PATTERNS[1], e.GROUP_SEP, e.DECIMAL_SEP, r).replace(i, n);\n            };\n          }\n          function xi(t) {\n            var e = t.NUMBER_FORMATS;\n            return function(t, n) {\n              return null == t ? t : _i(t, e.PATTERNS[0], e.GROUP_SEP, e.DECIMAL_SEP, n);\n            };\n          }\n          function _i(t, e, n, r, i) {\n            if ((!H(t) && !B(t)) || isNaN(t)) return \"\";\n            var o,\n              a = !isFinite(t),\n              u = !1,\n              s = Math.abs(t) + \"\",\n              c = \"\";\n            if (a) c = \"∞\";\n            else {\n              (function(t, e, n, r) {\n                var i = t.d,\n                  o = i.length - t.i,\n                  a = (e = V(e) ? Math.min(Math.max(n, o), r) : +e) + t.i,\n                  u = i[a];\n                if (a > 0) {\n                  i.splice(Math.max(t.i, a));\n                  for (var s = a; s < i.length; s++) i[s] = 0;\n                } else {\n                  (o = Math.max(0, o)),\n                    (t.i = 1),\n                    (i.length = Math.max(1, (a = e + 1))),\n                    (i[0] = 0);\n                  for (var c = 1; c < a; c++) i[c] = 0;\n                }\n                if (u >= 5)\n                  if (a - 1 < 0) {\n                    for (var l = 0; l > a; l--) i.unshift(0), t.i++;\n                    i.unshift(1), t.i++;\n                  } else i[a - 1]++;\n                for (; o < Math.max(0, e); o++) i.push(0);\n                var f = i.reduceRight(function(t, e, n, r) {\n                  return (e += t), (r[n] = e % 10), Math.floor(e / 10);\n                }, 0);\n                f && (i.unshift(f), t.i++);\n              })(\n                (o = (function(t) {\n                  var e,\n                    n,\n                    r,\n                    i,\n                    o,\n                    a = 0;\n                  for (\n                    (n = t.indexOf(yi)) > -1 && (t = t.replace(yi, \"\")),\n                      (r = t.search(/e/i)) > 0\n                        ? (n < 0 && (n = r), (n += +t.slice(r + 1)), (t = t.substring(0, r)))\n                        : n < 0 && (n = t.length),\n                      r = 0;\n                    t.charAt(r) === bi;\n                    r++\n                  );\n                  if (r === (o = t.length)) (e = [0]), (n = 1);\n                  else {\n                    for (o--; t.charAt(o) === bi; ) o--;\n                    for (n -= r, e = [], i = 0; r <= o; r++, i++) e[i] = +t.charAt(r);\n                  }\n                  return (\n                    n > $i && ((e = e.splice(0, $i - 1)), (a = n - 1), (n = 1)),\n                    { d: e, e: a, i: n }\n                  );\n                })(s)),\n                i,\n                e.minFrac,\n                e.maxFrac\n              );\n              var l = o.d,\n                f = o.i,\n                p = o.e,\n                h = [];\n              for (\n                u = l.reduce(function(t, e) {\n                  return t && !e;\n                }, !0);\n                f < 0;\n\n              )\n                l.unshift(0), f++;\n              f > 0 ? (h = l.splice(f, l.length)) : ((h = l), (l = [0]));\n              var d = [];\n              for (\n                l.length >= e.lgSize && d.unshift(l.splice(-e.lgSize, l.length).join(\"\"));\n                l.length > e.gSize;\n\n              )\n                d.unshift(l.splice(-e.gSize, l.length).join(\"\"));\n              l.length && d.unshift(l.join(\"\")),\n                (c = d.join(n)),\n                h.length && (c += r + h.join(\"\")),\n                p && (c += \"e+\" + p);\n            }\n            return t < 0 && !u ? e.negPre + c + e.negSuf : e.posPre + c + e.posSuf;\n          }\n          function Ci(t, e, n, r) {\n            var i = \"\";\n            for (\n              (t < 0 || (r && t <= 0)) && (r ? (t = 1 - t) : ((t = -t), (i = \"-\"))), t = \"\" + t;\n              t.length < e;\n\n            )\n              t = bi + t;\n            return n && (t = t.substr(t.length - e)), i + t;\n          }\n          function Si(t, e, n, r, i) {\n            return (\n              (n = n || 0),\n              function(o) {\n                var a = o[\"get\" + t]();\n                return (\n                  (n > 0 || a > -n) && (a += n), 0 === a && -12 === n && (a = 12), Ci(a, e, r, i)\n                );\n              }\n            );\n          }\n          function Ei(t, e, n) {\n            return function(r, i) {\n              var o = r[\"get\" + t]();\n              return i[d((n ? \"STANDALONE\" : \"\") + (e ? \"SHORT\" : \"\") + t)][o];\n            };\n          }\n          function ki(t) {\n            var e = new Date(t, 0, 1).getDay();\n            return new Date(t, 0, (e <= 4 ? 5 : 12) - e);\n          }\n          function Ai(t) {\n            return function(e) {\n              var n = ki(e.getFullYear()),\n                r =\n                  +(function(t) {\n                    return new Date(t.getFullYear(), t.getMonth(), t.getDate() + (4 - t.getDay()));\n                  })(e) - +n;\n              return Ci(1 + Math.round(r / 6048e5), t);\n            };\n          }\n          function Ti(t, e) {\n            return t.getFullYear() <= 0 ? e.ERAS[0] : e.ERAS[1];\n          }\n          (wi.$inject = [\"$locale\"]), (xi.$inject = [\"$locale\"]);\n          var Oi = {\n              yyyy: Si(\"FullYear\", 4, 0, !1, !0),\n              yy: Si(\"FullYear\", 2, 0, !0, !0),\n              y: Si(\"FullYear\", 1, 0, !1, !0),\n              MMMM: Ei(\"Month\"),\n              MMM: Ei(\"Month\", !0),\n              MM: Si(\"Month\", 2, 1),\n              M: Si(\"Month\", 1, 1),\n              LLLL: Ei(\"Month\", !1, !0),\n              dd: Si(\"Date\", 2),\n              d: Si(\"Date\", 1),\n              HH: Si(\"Hours\", 2),\n              H: Si(\"Hours\", 1),\n              hh: Si(\"Hours\", 2, -12),\n              h: Si(\"Hours\", 1, -12),\n              mm: Si(\"Minutes\", 2),\n              m: Si(\"Minutes\", 1),\n              ss: Si(\"Seconds\", 2),\n              s: Si(\"Seconds\", 1),\n              sss: Si(\"Milliseconds\", 3),\n              EEEE: Ei(\"Day\"),\n              EEE: Ei(\"Day\", !0),\n              a: function(t, e) {\n                return t.getHours() < 12 ? e.AMPMS[0] : e.AMPMS[1];\n              },\n              Z: function(t, e, n) {\n                var r = -1 * n,\n                  i = r >= 0 ? \"+\" : \"\";\n                return (i +=\n                  Ci(Math[r > 0 ? \"floor\" : \"ceil\"](r / 60), 2) + Ci(Math.abs(r % 60), 2));\n              },\n              ww: Ai(2),\n              w: Ai(1),\n              G: Ti,\n              GG: Ti,\n              GGG: Ti,\n              GGGG: function(t, e) {\n                return t.getFullYear() <= 0 ? e.ERANAMES[0] : e.ERANAMES[1];\n              }\n            },\n            ji = /((?:[^yMLdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|m+|s+|a|Z|G+|w+))([\\s\\S]*)/,\n            Ni = /^-?\\d+$/;\n          function Mi(t) {\n            var e = /^(\\d{4})-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?)?$/;\n            return function(n, r, i) {\n              var o,\n                a,\n                u = \"\",\n                s = [];\n              if (\n                ((r = r || \"mediumDate\"),\n                (r = t.DATETIME_FORMATS[r] || r),\n                H(n) &&\n                  (n = Ni.test(n)\n                    ? N(n)\n                    : (function(t) {\n                        var n;\n                        if ((n = t.match(e))) {\n                          var r = new Date(0),\n                            i = 0,\n                            o = 0,\n                            a = n[8] ? r.setUTCFullYear : r.setFullYear,\n                            u = n[8] ? r.setUTCHours : r.setHours;\n                          n[9] && ((i = N(n[9] + n[10])), (o = N(n[9] + n[11]))),\n                            a.call(r, N(n[1]), N(n[2]) - 1, N(n[3]));\n                          var s = N(n[4] || 0) - i,\n                            c = N(n[5] || 0) - o,\n                            l = N(n[6] || 0),\n                            f = Math.round(1e3 * parseFloat(\"0.\" + (n[7] || 0)));\n                          return u.call(r, s, c, l, f), r;\n                        }\n                        return t;\n                      })(n)),\n                B(n) && (n = new Date(n)),\n                !z(n) || !isFinite(n.getTime()))\n              )\n                return n;\n              for (; r; )\n                (a = ji.exec(r)) ? (r = (s = pt(s, a, 1)).pop()) : (s.push(r), (r = null));\n              var c = n.getTimezoneOffset();\n              return (\n                i && ((c = yt(i, c)), (n = wt(n, i, !0))),\n                C(s, function(e) {\n                  (o = Oi[e]),\n                    (u += o\n                      ? o(n, t.DATETIME_FORMATS, c)\n                      : \"''\" === e\n                        ? \"'\"\n                        : e.replace(/(^'|'$)/g, \"\").replace(/''/g, \"'\"));\n                }),\n                u\n              );\n            };\n          }\n          function Li() {\n            return function(t, e) {\n              return V(e) && (e = 2), gt(t, e);\n            };\n          }\n          Mi.$inject = [\"$locale\"];\n          var Di = R(h),\n            Ii = R(d);\n          function Ri() {\n            return function(t, e, n) {\n              return (\n                (e = Math.abs(Number(e)) === 1 / 0 ? Number(e) : N(e)),\n                M(e)\n                  ? t\n                  : (B(t) && (t = t.toString()),\n                    _(t)\n                      ? ((n = (n = !n || isNaN(n) ? 0 : N(n)) < 0 ? Math.max(0, t.length + n) : n),\n                        e >= 0\n                          ? Pi(t, n, n + e)\n                          : 0 === n\n                            ? Pi(t, e, t.length)\n                            : Pi(t, Math.max(0, n + e), n))\n                      : t)\n              );\n            };\n          }\n          function Pi(t, e, n) {\n            return H(t) ? t.slice(e, n) : v.call(t, e, n);\n          }\n          function Vi(t) {\n            return function(r, i, a, u) {\n              if (null == r) return r;\n              if (!_(r)) throw o(\"orderBy\")(\"notarray\", \"Expected array but received: {0}\", r);\n              W(i) || (i = [i]), 0 === i.length && (i = [\"+\"]);\n              var s = (function(e) {\n                  return e.map(function(e) {\n                    var n = 1,\n                      r = I;\n                    if (K(e)) r = e;\n                    else if (\n                      H(e) &&\n                      ((\"+\" !== e.charAt(0) && \"-\" !== e.charAt(0)) ||\n                        ((n = \"-\" === e.charAt(0) ? -1 : 1), (e = e.substring(1))),\n                      \"\" !== e && (r = t(e)).constant)\n                    ) {\n                      var i = r();\n                      r = function(t) {\n                        return t[i];\n                      };\n                    }\n                    return { get: r, descending: n };\n                  });\n                })(i),\n                c = a ? -1 : 1,\n                l = K(u) ? u : n,\n                f = Array.prototype.map.call(r, function(t, n) {\n                  return {\n                    value: t,\n                    tieBreaker: { value: n, type: \"number\", index: n },\n                    predicateValues: s.map(function(r) {\n                      return (function(t, n) {\n                        var r = typeof t;\n                        null === t\n                          ? (r = \"null\")\n                          : \"object\" === r &&\n                            (t = (function(t) {\n                              if (K(t.valueOf) && e((t = t.valueOf()))) return t;\n                              if (P(t) && e((t = t.toString()))) return t;\n                              return t;\n                            })(t));\n                        return { value: t, type: r, index: n };\n                      })(r.get(t), n);\n                    })\n                  };\n                });\n              return (\n                f.sort(function(t, e) {\n                  for (var r = 0, i = s.length; r < i; r++) {\n                    var o = l(t.predicateValues[r], e.predicateValues[r]);\n                    if (o) return o * s[r].descending * c;\n                  }\n                  return (l(t.tieBreaker, e.tieBreaker) || n(t.tieBreaker, e.tieBreaker)) * c;\n                }),\n                (r = f.map(function(t) {\n                  return t.value;\n                }))\n              );\n            };\n            function e(t) {\n              switch (typeof t) {\n                case \"number\":\n                case \"boolean\":\n                case \"string\":\n                  return !0;\n                default:\n                  return !1;\n              }\n            }\n            function n(t, e) {\n              var n = 0,\n                r = t.type,\n                i = e.type;\n              if (r === i) {\n                var o = t.value,\n                  a = e.value;\n                \"string\" === r\n                  ? ((o = o.toLowerCase()), (a = a.toLowerCase()))\n                  : \"object\" === r && (U(o) && (o = t.index), U(a) && (a = e.index)),\n                  o !== a && (n = o < a ? -1 : 1);\n              } else\n                n =\n                  \"undefined\" === r\n                    ? 1\n                    : \"undefined\" === i\n                      ? -1\n                      : \"null\" === r\n                        ? 1\n                        : \"null\" === i\n                          ? -1\n                          : r < i\n                            ? -1\n                            : 1;\n              return n;\n            }\n          }\n          function qi(t) {\n            return K(t) && (t = { link: t }), (t.restrict = t.restrict || \"AC\"), R(t);\n          }\n          Vi.$inject = [\"$parse\"];\n          var Ui = R({\n              restrict: \"E\",\n              compile: function(t, e) {\n                if (!e.href && !e.xlinkHref)\n                  return function(t, e) {\n                    if (\"a\" === e[0].nodeName.toLowerCase()) {\n                      var n =\n                        \"[object SVGAnimatedString]\" === $.call(e.prop(\"href\"))\n                          ? \"xlink:href\"\n                          : \"href\";\n                      e.on(\"click\", function(t) {\n                        e.attr(n) || t.preventDefault();\n                      });\n                    }\n                  };\n              }\n            }),\n            Fi = {};\n          C(Ne, function(t, e) {\n            if (\"multiple\" !== t) {\n              var n = bn(\"ng-\" + e),\n                r = i;\n              \"checked\" === t &&\n                (r = function(t, e, r) {\n                  r.ngModel !== r[n] && i(t, 0, r);\n                }),\n                (Fi[n] = function() {\n                  return { restrict: \"A\", priority: 100, link: r };\n                });\n            }\n            function i(t, r, i) {\n              t.$watch(i[n], function(t) {\n                i.$set(e, !!t);\n              });\n            }\n          }),\n            C(Le, function(t, e) {\n              Fi[e] = function() {\n                return {\n                  priority: 100,\n                  link: function(t, n, r) {\n                    if (\"ngPattern\" === e && \"/\" === r.ngPattern.charAt(0)) {\n                      var i = r.ngPattern.match(l);\n                      if (i) return void r.$set(\"ngPattern\", new RegExp(i[1], i[2]));\n                    }\n                    t.$watch(r[e], function(t) {\n                      r.$set(e, t);\n                    });\n                  }\n                };\n              };\n            }),\n            C([\"src\", \"srcset\", \"href\"], function(t) {\n              var e = bn(\"ng-\" + t);\n              Fi[e] = function() {\n                return {\n                  priority: 99,\n                  link: function(n, r, i) {\n                    var o = t,\n                      u = t;\n                    \"href\" === t &&\n                      \"[object SVGAnimatedString]\" === $.call(r.prop(\"href\")) &&\n                      ((u = \"xlinkHref\"), (i.$attr[u] = \"xlink:href\"), (o = null)),\n                      i.$observe(e, function(e) {\n                        e\n                          ? (i.$set(u, e), a && o && r.prop(o, i[u]))\n                          : \"href\" === t && i.$set(u, null);\n                      });\n                  }\n                };\n              };\n            });\n          var Hi = {\n              $addControl: D,\n              $getControls: R([]),\n              $$renameControl: function(t, e) {\n                t.$name = e;\n              },\n              $removeControl: D,\n              $setValidity: D,\n              $setDirty: D,\n              $setPristine: D,\n              $setSubmitted: D,\n              $$setSubmitted: D\n            },\n            Bi = \"ng-pending\";\n          function zi(t, e, n, r, i) {\n            (this.$$controls = []),\n              (this.$error = {}),\n              (this.$$success = {}),\n              (this.$pending = void 0),\n              (this.$name = i(e.name || e.ngForm || \"\")(n)),\n              (this.$dirty = !1),\n              (this.$pristine = !0),\n              (this.$valid = !0),\n              (this.$invalid = !1),\n              (this.$submitted = !1),\n              (this.$$parentForm = Hi),\n              (this.$$element = t),\n              (this.$$animate = r),\n              Ji(this);\n          }\n          (zi.$inject = [\"$element\", \"$attrs\", \"$scope\", \"$animate\", \"$interpolate\"]),\n            (zi.prototype = {\n              $rollbackViewValue: function() {\n                C(this.$$controls, function(t) {\n                  t.$rollbackViewValue();\n                });\n              },\n              $commitViewValue: function() {\n                C(this.$$controls, function(t) {\n                  t.$commitViewValue();\n                });\n              },\n              $addControl: function(t) {\n                Pt(t.$name, \"input\"),\n                  this.$$controls.push(t),\n                  t.$name && (this[t.$name] = t),\n                  (t.$$parentForm = this);\n              },\n              $getControls: function() {\n                return Gt(this.$$controls);\n              },\n              $$renameControl: function(t, e) {\n                var n = t.$name;\n                this[n] === t && delete this[n], (this[e] = t), (t.$name = e);\n              },\n              $removeControl: function(t) {\n                t.$name && this[t.$name] === t && delete this[t.$name],\n                  C(\n                    this.$pending,\n                    function(e, n) {\n                      this.$setValidity(n, null, t);\n                    },\n                    this\n                  ),\n                  C(\n                    this.$error,\n                    function(e, n) {\n                      this.$setValidity(n, null, t);\n                    },\n                    this\n                  ),\n                  C(\n                    this.$$success,\n                    function(e, n) {\n                      this.$setValidity(n, null, t);\n                    },\n                    this\n                  ),\n                  at(this.$$controls, t),\n                  (t.$$parentForm = Hi);\n              },\n              $setDirty: function() {\n                this.$$animate.removeClass(this.$$element, zo),\n                  this.$$animate.addClass(this.$$element, Wo),\n                  (this.$dirty = !0),\n                  (this.$pristine = !1),\n                  this.$$parentForm.$setDirty();\n              },\n              $setPristine: function() {\n                this.$$animate.setClass(this.$$element, zo, Wo + \" ng-submitted\"),\n                  (this.$dirty = !1),\n                  (this.$pristine = !0),\n                  (this.$submitted = !1),\n                  C(this.$$controls, function(t) {\n                    t.$setPristine();\n                  });\n              },\n              $setUntouched: function() {\n                C(this.$$controls, function(t) {\n                  t.$setUntouched();\n                });\n              },\n              $setSubmitted: function() {\n                for (var t = this; t.$$parentForm && t.$$parentForm !== Hi; ) t = t.$$parentForm;\n                t.$$setSubmitted();\n              },\n              $$setSubmitted: function() {\n                this.$$animate.addClass(this.$$element, \"ng-submitted\"),\n                  (this.$submitted = !0),\n                  C(this.$$controls, function(t) {\n                    t.$$setSubmitted && t.$$setSubmitted();\n                  });\n              }\n            }),\n            Yi({\n              clazz: zi,\n              set: function(t, e, n) {\n                var r = t[e];\n                r ? -1 === r.indexOf(n) && r.push(n) : (t[e] = [n]);\n              },\n              unset: function(t, e, n) {\n                var r = t[e];\n                r && (at(r, n), 0 === r.length && delete t[e]);\n              }\n            });\n          var Wi = function(t) {\n              return [\n                \"$timeout\",\n                \"$parse\",\n                function(e, n) {\n                  return {\n                    name: \"form\",\n                    restrict: t ? \"EAC\" : \"E\",\n                    require: [\"form\", \"^^?form\"],\n                    controller: zi,\n                    compile: function(n, i) {\n                      n.addClass(zo).addClass(Ho);\n                      var o = i.name ? \"name\" : !(!t || !i.ngForm) && \"ngForm\";\n                      return {\n                        pre: function(t, n, i, a) {\n                          var u = a[0];\n                          if (!(\"action\" in i)) {\n                            var s = function(e) {\n                              t.$apply(function() {\n                                u.$commitViewValue(), u.$setSubmitted();\n                              }),\n                                e.preventDefault();\n                            };\n                            n[0].addEventListener(\"submit\", s),\n                              n.on(\"$destroy\", function() {\n                                e(\n                                  function() {\n                                    n[0].removeEventListener(\"submit\", s);\n                                  },\n                                  0,\n                                  !1\n                                );\n                              });\n                          }\n                          (a[1] || u.$$parentForm).$addControl(u);\n                          var c = o ? r(u.$name) : D;\n                          o &&\n                            (c(t, u),\n                            i.$observe(o, function(e) {\n                              u.$name !== e &&\n                                (c(t, void 0),\n                                u.$$parentForm.$$renameControl(u, e),\n                                (c = r(u.$name))(t, u));\n                            })),\n                            n.on(\"$destroy\", function() {\n                              u.$$parentForm.$removeControl(u), c(t, void 0), O(u, Hi);\n                            });\n                        }\n                      };\n                    }\n                  };\n                  function r(t) {\n                    return \"\" === t ? n('this[\"\"]').assign : n(t).assign || D;\n                  }\n                }\n              ];\n            },\n            Gi = Wi(),\n            Ki = Wi(!0);\n          function Ji(t) {\n            (t.$$classCache = {}),\n              (t.$$classCache[Bo] = !(t.$$classCache[Ho] = t.$$element.hasClass(Ho)));\n          }\n          function Yi(t) {\n            var e = t.clazz,\n              n = t.set,\n              r = t.unset;\n            function i(t, e, n) {\n              n && !t.$$classCache[e]\n                ? (t.$$animate.addClass(t.$$element, e), (t.$$classCache[e] = !0))\n                : !n &&\n                  t.$$classCache[e] &&\n                  (t.$$animate.removeClass(t.$$element, e), (t.$$classCache[e] = !1));\n            }\n            function o(t, e, n) {\n              (e = e ? \"-\" + Lt(e, \"-\") : \"\"), i(t, Ho + e, !0 === n), i(t, Bo + e, !1 === n);\n            }\n            e.prototype.$setValidity = function(t, e, a) {\n              var u;\n              V(e)\n                ? (function(t, e, r, i) {\n                    t[e] || (t[e] = {});\n                    n(t[e], r, i);\n                  })(this, \"$pending\", t, a)\n                : (function(t, e, n, i) {\n                    t[e] && r(t[e], n, i);\n                    Zi(t[e]) && (t[e] = void 0);\n                  })(this, \"$pending\", t, a),\n                X(e)\n                  ? e\n                    ? (r(this.$error, t, a), n(this.$$success, t, a))\n                    : (n(this.$error, t, a), r(this.$$success, t, a))\n                  : (r(this.$error, t, a), r(this.$$success, t, a)),\n                this.$pending\n                  ? (i(this, Bi, !0), (this.$valid = this.$invalid = void 0), o(this, \"\", null))\n                  : (i(this, Bi, !1),\n                    (this.$valid = Zi(this.$error)),\n                    (this.$invalid = !this.$valid),\n                    o(this, \"\", this.$valid)),\n                o(\n                  this,\n                  t,\n                  (u =\n                    this.$pending && this.$pending[t]\n                      ? void 0\n                      : !this.$error[t] && (!!this.$$success[t] || null))\n                ),\n                this.$$parentForm.$setValidity(t, u, this);\n            };\n          }\n          function Zi(t) {\n            if (t) for (var e in t) if (t.hasOwnProperty(e)) return !1;\n            return !0;\n          }\n          var Xi = /^\\d{4,}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+(?:[+-][0-2]\\d:[0-5]\\d|Z)$/,\n            Qi = /^[a-z][a-z\\d.+-]*:\\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\\s:/?#]+|\\[[a-f\\d:]+])(?::\\d+)?(?:\\/[^?#]*)?(?:\\?[^#]*)?(?:#.*)?$/i,\n            to = /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,\n            eo = /^\\s*(-|\\+)?(\\d+|(\\d*(\\.\\d*)))([eE][+-]?\\d+)?\\s*$/,\n            no = /^(\\d{4,})-(\\d{2})-(\\d{2})$/,\n            ro = /^(\\d{4,})-(\\d\\d)-(\\d\\d)T(\\d\\d):(\\d\\d)(?::(\\d\\d)(\\.\\d{1,3})?)?$/,\n            io = /^(\\d{4,})-W(\\d\\d)$/,\n            oo = /^(\\d{4,})-(\\d\\d)$/,\n            ao = /^(\\d\\d):(\\d\\d)(?::(\\d\\d)(\\.\\d{1,3})?)?$/,\n            uo = \"keydown wheel mousedown\",\n            so = qt();\n          C(\"date,datetime-local,month,time,week\".split(\",\"), function(t) {\n            so[t] = !0;\n          });\n          var co = {\n            text: function(t, e, n, r, i, o) {\n              fo(t, e, n, r, i, o), lo(r);\n            },\n            date: ho(\"date\", no, po(no, [\"yyyy\", \"MM\", \"dd\"]), \"yyyy-MM-dd\"),\n            \"datetime-local\": ho(\n              \"datetimelocal\",\n              ro,\n              po(ro, [\"yyyy\", \"MM\", \"dd\", \"HH\", \"mm\", \"ss\", \"sss\"]),\n              \"yyyy-MM-ddTHH:mm:ss.sss\"\n            ),\n            time: ho(\"time\", ao, po(ao, [\"HH\", \"mm\", \"ss\", \"sss\"]), \"HH:mm:ss.sss\"),\n            week: ho(\n              \"week\",\n              io,\n              function(t, e) {\n                if (z(t)) return t;\n                if (H(t)) {\n                  io.lastIndex = 0;\n                  var n = io.exec(t);\n                  if (n) {\n                    var r = +n[1],\n                      i = +n[2],\n                      o = 0,\n                      a = 0,\n                      u = 0,\n                      s = 0,\n                      c = ki(r),\n                      l = 7 * (i - 1);\n                    return (\n                      e &&\n                        ((o = e.getHours()),\n                        (a = e.getMinutes()),\n                        (u = e.getSeconds()),\n                        (s = e.getMilliseconds())),\n                      new Date(r, 0, c.getDate() + l, o, a, u, s)\n                    );\n                  }\n                }\n                return NaN;\n              },\n              \"yyyy-Www\"\n            ),\n            month: ho(\"month\", oo, po(oo, [\"yyyy\", \"MM\"]), \"yyyy-MM\"),\n            number: function(t, e, n, r, i, o) {\n              var a, u;\n              vo(t, e, n, r, \"number\"),\n                go(r),\n                fo(t, e, n, r, i, o),\n                (q(n.min) || n.ngMin) &&\n                  ((r.$validators.min = function(t, e) {\n                    return r.$isEmpty(e) || V(a) || e >= a;\n                  }),\n                  n.$observe(\"min\", function(t) {\n                    (a = mo(t)), r.$validate();\n                  }));\n              (q(n.max) || n.ngMax) &&\n                ((r.$validators.max = function(t, e) {\n                  return r.$isEmpty(e) || V(u) || e <= u;\n                }),\n                n.$observe(\"max\", function(t) {\n                  (u = mo(t)), r.$validate();\n                }));\n              if (q(n.step) || n.ngStep) {\n                var s;\n                (r.$validators.step = function(t, e) {\n                  return r.$isEmpty(e) || V(s) || bo(e, a || 0, s);\n                }),\n                  n.$observe(\"step\", function(t) {\n                    (s = mo(t)), r.$validate();\n                  });\n              }\n            },\n            url: function(t, e, n, r, i, o) {\n              fo(t, e, n, r, i, o),\n                lo(r),\n                (r.$validators.url = function(t, e) {\n                  var n = t || e;\n                  return r.$isEmpty(n) || Qi.test(n);\n                });\n            },\n            email: function(t, e, n, r, i, o) {\n              fo(t, e, n, r, i, o),\n                lo(r),\n                (r.$validators.email = function(t, e) {\n                  var n = t || e;\n                  return r.$isEmpty(n) || to.test(n);\n                });\n            },\n            radio: function(t, e, n, r) {\n              var i = !n.ngTrim || \"false\" !== et(n.ngTrim);\n              V(n.name) && e.attr(\"name\", k());\n              e.on(\"change\", function(t) {\n                var o;\n                e[0].checked && ((o = n.value), i && (o = et(o)), r.$setViewValue(o, t && t.type));\n              }),\n                (r.$render = function() {\n                  var t = n.value;\n                  i && (t = et(t)), (e[0].checked = t === r.$viewValue);\n                }),\n                n.$observe(\"value\", r.$render);\n            },\n            range: function(t, e, n, r, i, o) {\n              vo(t, e, n, r, \"range\"), go(r), fo(t, e, n, r, i, o);\n              var a = r.$$hasNativeValidators && \"range\" === e[0].type,\n                u = a ? 0 : void 0,\n                s = a ? 100 : void 0,\n                c = a ? 1 : void 0,\n                l = e[0].validity,\n                f = q(n.min),\n                p = q(n.max),\n                h = q(n.step),\n                d = r.$render;\n              (r.$render =\n                a && q(l.rangeUnderflow) && q(l.rangeOverflow)\n                  ? function() {\n                      d(), r.$setViewValue(e.val());\n                    }\n                  : d),\n                f &&\n                  ((r.$validators.min = a\n                    ? function() {\n                        return !0;\n                      }\n                    : function(t, e) {\n                        return r.$isEmpty(e) || V(u) || e >= u;\n                      }),\n                  v(\"min\", function(t) {\n                    if (((u = mo(t)), M(r.$modelValue))) return;\n                    if (a) {\n                      var n = e.val();\n                      u > n && ((n = u), e.val(n)), r.$setViewValue(n);\n                    } else r.$validate();\n                  }));\n              p &&\n                ((r.$validators.max = a\n                  ? function() {\n                      return !0;\n                    }\n                  : function(t, e) {\n                      return r.$isEmpty(e) || V(s) || e <= s;\n                    }),\n                v(\"max\", function(t) {\n                  if (((s = mo(t)), M(r.$modelValue))) return;\n                  if (a) {\n                    var n = e.val();\n                    s < n && (e.val(s), (n = s < u ? u : s)), r.$setViewValue(n);\n                  } else r.$validate();\n                }));\n              h &&\n                ((r.$validators.step = a\n                  ? function() {\n                      return !l.stepMismatch;\n                    }\n                  : function(t, e) {\n                      return r.$isEmpty(e) || V(c) || bo(e, u || 0, c);\n                    }),\n                v(\"step\", function(t) {\n                  if (((c = mo(t)), M(r.$modelValue))) return;\n                  a && r.$viewValue !== e.val() ? r.$setViewValue(e.val()) : r.$validate();\n                }));\n              function v(t, r) {\n                e.attr(t, n[t]), n.$observe(t, r);\n              }\n            },\n            checkbox: function(t, e, n, r, i, o, a, u) {\n              var s = wo(u, t, \"ngTrueValue\", n.ngTrueValue, !0),\n                c = wo(u, t, \"ngFalseValue\", n.ngFalseValue, !1);\n              e.on(\"change\", function(t) {\n                r.$setViewValue(e[0].checked, t && t.type);\n              }),\n                (r.$render = function() {\n                  e[0].checked = r.$viewValue;\n                }),\n                (r.$isEmpty = function(t) {\n                  return !1 === t;\n                }),\n                r.$formatters.push(function(t) {\n                  return ct(t, s);\n                }),\n                r.$parsers.push(function(t) {\n                  return t ? s : c;\n                });\n            },\n            hidden: D,\n            button: D,\n            submit: D,\n            reset: D,\n            file: D\n          };\n          function lo(t) {\n            t.$formatters.push(function(e) {\n              return t.$isEmpty(e) ? e : e.toString();\n            });\n          }\n          function fo(t, e, n, r, i, o) {\n            var a,\n              u = h(e[0].type);\n            if (!i.android) {\n              var s = !1;\n              e.on(\"compositionstart\", function() {\n                s = !0;\n              }),\n                e.on(\"compositionupdate\", function(t) {\n                  (V(t.data) || \"\" === t.data) && (s = !1);\n                }),\n                e.on(\"compositionend\", function() {\n                  (s = !1), c();\n                });\n            }\n            var c = function(t) {\n              if ((a && (o.defer.cancel(a), (a = null)), !s)) {\n                var i = e.val(),\n                  c = t && t.type;\n                \"password\" === u || (n.ngTrim && \"false\" === n.ngTrim) || (i = et(i)),\n                  (r.$viewValue !== i || (\"\" === i && r.$$hasNativeValidators)) &&\n                    r.$setViewValue(i, c);\n              }\n            };\n            if (i.hasEvent(\"input\")) e.on(\"input\", c);\n            else {\n              var l = function(t, e, n) {\n                a ||\n                  (a = o.defer(function() {\n                    (a = null), (e && e.value === n) || c(t);\n                  }));\n              };\n              e.on(\"keydown\", function(t) {\n                var e = t.keyCode;\n                91 === e || (15 < e && e < 19) || (37 <= e && e <= 40) || l(t, this, this.value);\n              }),\n                i.hasEvent(\"paste\") && e.on(\"paste cut drop\", l);\n            }\n            e.on(\"change\", c),\n              so[u] &&\n                r.$$hasNativeValidators &&\n                u === n.type &&\n                e.on(uo, function(t) {\n                  if (!a) {\n                    var e = this[f],\n                      n = e.badInput,\n                      r = e.typeMismatch;\n                    a = o.defer(function() {\n                      (a = null), (e.badInput === n && e.typeMismatch === r) || c(t);\n                    });\n                  }\n                }),\n              (r.$render = function() {\n                var t = r.$isEmpty(r.$viewValue) ? \"\" : r.$viewValue;\n                e.val() !== t && e.val(t);\n              });\n          }\n          function po(t, e) {\n            return function(n, r) {\n              var i, o;\n              if (z(n)) return n;\n              if (H(n)) {\n                if (\n                  ('\"' === n.charAt(0) &&\n                    '\"' === n.charAt(n.length - 1) &&\n                    (n = n.substring(1, n.length - 1)),\n                  Xi.test(n))\n                )\n                  return new Date(n);\n                if (((t.lastIndex = 0), (i = t.exec(n)))) {\n                  i.shift(),\n                    (o = r\n                      ? {\n                          yyyy: r.getFullYear(),\n                          MM: r.getMonth() + 1,\n                          dd: r.getDate(),\n                          HH: r.getHours(),\n                          mm: r.getMinutes(),\n                          ss: r.getSeconds(),\n                          sss: r.getMilliseconds() / 1e3\n                        }\n                      : { yyyy: 1970, MM: 1, dd: 1, HH: 0, mm: 0, ss: 0, sss: 0 }),\n                    C(i, function(t, n) {\n                      n < e.length && (o[e[n]] = +t);\n                    });\n                  var a = new Date(o.yyyy, o.MM - 1, o.dd, o.HH, o.mm, o.ss || 0, 1e3 * o.sss || 0);\n                  return o.yyyy < 100 && a.setFullYear(o.yyyy), a;\n                }\n              }\n              return NaN;\n            };\n          }\n          function ho(t, e, n, r) {\n            return function(i, o, a, u, s, c, l) {\n              vo(i, o, a, u, t), fo(0, o, a, u, s, c);\n              var f,\n                p,\n                h,\n                d,\n                v = \"time\" === t || \"datetimelocal\" === t;\n              (u.$parsers.push(function(n) {\n                return u.$isEmpty(n) ? null : e.test(n) ? $(n, f) : void (u.$$parserName = t);\n              }),\n              u.$formatters.push(function(t) {\n                if (t && !z(t)) throw Go(\"datefmt\", \"Expected `{0}` to be a date\", t);\n                if (g(t)) {\n                  f = t;\n                  var e = u.$options.getOption(\"timezone\");\n                  return (\n                    e && ((p = e), (f = wt(f, e, !0))),\n                    (function(t, e) {\n                      var n = r;\n                      v &&\n                        H(u.$options.getOption(\"timeSecondsFormat\")) &&\n                        (n = r\n                          .replace(\"ss.sss\", u.$options.getOption(\"timeSecondsFormat\"))\n                          .replace(/:$/, \"\"));\n                      var i = l(\"date\")(t, n, e);\n                      v &&\n                        u.$options.getOption(\"timeStripZeroSeconds\") &&\n                        (i = i.replace(/(?::00)?(?:\\.000)?$/, \"\"));\n                      return i;\n                    })(t, e)\n                  );\n                }\n                return (f = null), (p = null), \"\";\n              }),\n              q(a.min) || a.ngMin) &&\n                ((u.$validators.min = function(t) {\n                  return !g(t) || V(h) || n(t) >= h;\n                }),\n                a.$observe(\"min\", function(t) {\n                  (h = m(t)), u.$validate();\n                }));\n              (q(a.max) || a.ngMax) &&\n                ((u.$validators.max = function(t) {\n                  return !g(t) || V(d) || n(t) <= d;\n                }),\n                a.$observe(\"max\", function(t) {\n                  (d = m(t)), u.$validate();\n                }));\n              function g(t) {\n                return t && !(t.getTime && t.getTime() != t.getTime());\n              }\n              function m(t) {\n                return q(t) && !z(t) ? $(t) || void 0 : t;\n              }\n              function $(t, e) {\n                var r = u.$options.getOption(\"timezone\");\n                p && p !== r && (e = bt(e, yt(p)));\n                var i = n(t, e);\n                return !isNaN(i) && r && (i = wt(i, r)), i;\n              }\n            };\n          }\n          function vo(t, e, n, r, i) {\n            var o = e[0];\n            (r.$$hasNativeValidators = U(o.validity)) &&\n              r.$parsers.push(function(t) {\n                var n = e.prop(f) || {};\n                if (!n.badInput && !n.typeMismatch) return t;\n                r.$$parserName = i;\n              });\n          }\n          function go(t) {\n            t.$parsers.push(function(e) {\n              return t.$isEmpty(e)\n                ? null\n                : eo.test(e)\n                  ? parseFloat(e)\n                  : void (t.$$parserName = \"number\");\n            }),\n              t.$formatters.push(function(e) {\n                if (!t.$isEmpty(e)) {\n                  if (!B(e)) throw Go(\"numfmt\", \"Expected `{0}` to be a number\", e);\n                  e = e.toString();\n                }\n                return e;\n              });\n          }\n          function mo(t) {\n            return q(t) && !B(t) && (t = parseFloat(t)), M(t) ? void 0 : t;\n          }\n          function $o(t) {\n            return (0 | t) === t;\n          }\n          function yo(t) {\n            var e = t.toString(),\n              n = e.indexOf(\".\");\n            if (-1 === n) {\n              if (-1 < t && t < 1) {\n                var r = /e-(\\d+)$/.exec(e);\n                if (r) return Number(r[1]);\n              }\n              return 0;\n            }\n            return e.length - n - 1;\n          }\n          function bo(t, e, n) {\n            var r = Number(t),\n              i = !$o(r),\n              o = !$o(e),\n              a = !$o(n);\n            if (i || o || a) {\n              var u = i ? yo(r) : 0,\n                s = o ? yo(e) : 0,\n                c = a ? yo(n) : 0,\n                l = Math.max(u, s, c),\n                f = Math.pow(10, l);\n              (r *= f),\n                (e *= f),\n                (n *= f),\n                i && (r = Math.round(r)),\n                o && (e = Math.round(e)),\n                a && (n = Math.round(n));\n            }\n            return (r - e) % n == 0;\n          }\n          function wo(t, e, n, r, i) {\n            var o;\n            if (q(r)) {\n              if (!(o = t(r)).constant)\n                throw Go(\n                  \"constexpr\",\n                  \"Expected constant expression for `{0}`, but saw `{1}`.\",\n                  n,\n                  r\n                );\n              return o(e);\n            }\n            return i;\n          }\n          var xo = [\n              \"$browser\",\n              \"$sniffer\",\n              \"$filter\",\n              \"$parse\",\n              function(t, e, n, r) {\n                return {\n                  restrict: \"E\",\n                  require: [\"?ngModel\"],\n                  link: {\n                    pre: function(i, o, a, u) {\n                      u[0] && (co[h(a.type)] || co.text)(i, o, a, u[0], e, t, n, r);\n                    }\n                  }\n                };\n              }\n            ],\n            _o = /^(true|false|\\d+)$/,\n            Co = function() {\n              function t(t, e, n) {\n                var r = q(n) ? n : 9 === a ? \"\" : null;\n                t.prop(\"value\", r), e.$set(\"value\", n);\n              }\n              return {\n                restrict: \"A\",\n                priority: 100,\n                compile: function(e, n) {\n                  return _o.test(n.ngValue)\n                    ? function(e, n, r) {\n                        t(n, r, e.$eval(r.ngValue));\n                      }\n                    : function(e, n, r) {\n                        e.$watch(r.ngValue, function(e) {\n                          t(n, r, e);\n                        });\n                      };\n                }\n              };\n            },\n            So = [\n              \"$compile\",\n              function(t) {\n                return {\n                  restrict: \"AC\",\n                  compile: function(e) {\n                    return (\n                      t.$$addBindingClass(e),\n                      function(e, n, r) {\n                        t.$$addBindingInfo(n, r.ngBind),\n                          (n = n[0]),\n                          e.$watch(r.ngBind, function(t) {\n                            n.textContent = Ut(t);\n                          });\n                      }\n                    );\n                  }\n                };\n              }\n            ],\n            Eo = [\n              \"$interpolate\",\n              \"$compile\",\n              function(t, e) {\n                return {\n                  compile: function(n) {\n                    return (\n                      e.$$addBindingClass(n),\n                      function(n, r, i) {\n                        var o = t(r.attr(i.$attr.ngBindTemplate));\n                        e.$$addBindingInfo(r, o.expressions),\n                          (r = r[0]),\n                          i.$observe(\"ngBindTemplate\", function(t) {\n                            r.textContent = V(t) ? \"\" : t;\n                          });\n                      }\n                    );\n                  }\n                };\n              }\n            ],\n            ko = [\n              \"$sce\",\n              \"$parse\",\n              \"$compile\",\n              function(t, e, n) {\n                return {\n                  restrict: \"A\",\n                  compile: function(r, i) {\n                    var o = e(i.ngBindHtml),\n                      a = e(i.ngBindHtml, function(e) {\n                        return t.valueOf(e);\n                      });\n                    return (\n                      n.$$addBindingClass(r),\n                      function(e, r, i) {\n                        n.$$addBindingInfo(r, i.ngBindHtml),\n                          e.$watch(a, function() {\n                            var n = o(e);\n                            r.html(t.getTrustedHtml(n) || \"\");\n                          });\n                      }\n                    );\n                  }\n                };\n              }\n            ],\n            Ao = R({\n              restrict: \"A\",\n              require: \"ngModel\",\n              link: function(t, e, n, r) {\n                r.$viewChangeListeners.push(function() {\n                  t.$eval(n.ngChange);\n                });\n              }\n            });\n          function To(t, e) {\n            var n;\n            return (\n              (t = \"ngClass\" + t),\n              [\n                \"$parse\",\n                function(a) {\n                  return {\n                    restrict: \"AC\",\n                    link: function(u, s, c) {\n                      var l,\n                        f = s.data(\"$classCounts\"),\n                        p = !0;\n                      function h(t, e) {\n                        var n = [];\n                        return (\n                          C(t, function(t) {\n                            (e > 0 || f[t]) &&\n                              ((f[t] = (f[t] || 0) + e), f[t] === +(e > 0) && n.push(t));\n                          }),\n                          n.join(\" \")\n                        );\n                      }\n                      f || ((f = qt()), s.data(\"$classCounts\", f)),\n                        \"ngClass\" !== t &&\n                          (n ||\n                            (n = a(\"$index\", function(t) {\n                              return 1 & t;\n                            })),\n                          u.$watch(n, function(t) {\n                            t === e\n                              ? (function(t) {\n                                  (t = h(i(t), 1)), c.$addClass(t);\n                                })(l)\n                              : (function(t) {\n                                  (t = h(i(t), -1)), c.$removeClass(t);\n                                })(l);\n                            p = t;\n                          })),\n                        u.$watch(a(c[t], o), function(t) {\n                          p === e &&\n                            (function(t, e) {\n                              var n = i(t),\n                                o = i(e),\n                                a = r(n, o),\n                                u = r(o, n),\n                                s = h(a, -1),\n                                l = h(u, 1);\n                              c.$addClass(l), c.$removeClass(s);\n                            })(l, t);\n                          l = t;\n                        });\n                    }\n                  };\n                }\n              ]\n            );\n            function r(t, e) {\n              if (!t || !t.length) return [];\n              if (!e || !e.length) return t;\n              var n = [];\n              t: for (var r = 0; r < t.length; r++) {\n                for (var i = t[r], o = 0; o < e.length; o++) if (i === e[o]) continue t;\n                n.push(i);\n              }\n              return n;\n            }\n            function i(t) {\n              return t && t.split(\" \");\n            }\n            function o(t) {\n              var e = t;\n              return (\n                W(t)\n                  ? (e = t.map(o).join(\" \"))\n                  : U(t) &&\n                    (e = Object.keys(t)\n                      .filter(function(e) {\n                        return t[e];\n                      })\n                      .join(\" \")),\n                e\n              );\n            }\n          }\n          var Oo = To(\"\", !0),\n            jo = To(\"Odd\", 0),\n            No = To(\"Even\", 1),\n            Mo = qi({\n              compile: function(t, e) {\n                e.$set(\"ngCloak\", void 0), t.removeClass(\"ng-cloak\");\n              }\n            }),\n            Lo = [\n              function() {\n                return { restrict: \"A\", scope: !0, controller: \"@\", priority: 500 };\n              }\n            ],\n            Do = {},\n            Io = { blur: !0, focus: !0 };\n          function Ro(t, e, n, r, i, o) {\n            return {\n              restrict: \"A\",\n              compile: function(a, u) {\n                var s = t(u[r]);\n                return function(t, r) {\n                  r.on(i, function(r) {\n                    var i = function() {\n                      s(t, { $event: r });\n                    };\n                    if (e.$$phase)\n                      if (o) t.$evalAsync(i);\n                      else\n                        try {\n                          i();\n                        } catch (t) {\n                          n(t);\n                        }\n                    else t.$apply(i);\n                  });\n                };\n              }\n            };\n          }\n          C(\n            \"click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste\".split(\n              \" \"\n            ),\n            function(t) {\n              var e = bn(\"ng-\" + t);\n              Do[e] = [\n                \"$parse\",\n                \"$rootScope\",\n                \"$exceptionHandler\",\n                function(n, r, i) {\n                  return Ro(n, r, i, e, t, Io[t]);\n                }\n              ];\n            }\n          );\n          var Po = [\n              \"$animate\",\n              \"$compile\",\n              function(t, e) {\n                return {\n                  multiElement: !0,\n                  transclude: \"element\",\n                  priority: 600,\n                  terminal: !0,\n                  restrict: \"A\",\n                  $$tlb: !0,\n                  link: function(n, r, i, o, a) {\n                    var u, s, c;\n                    n.$watch(i.ngIf, function(n) {\n                      n\n                        ? s ||\n                          a(function(n, o) {\n                            (s = o),\n                              (n[n.length++] = e.$$createComment(\"end ngIf\", i.ngIf)),\n                              (u = { clone: n }),\n                              t.enter(n, r.parent(), r);\n                          })\n                        : (c && (c.remove(), (c = null)),\n                          s && (s.$destroy(), (s = null)),\n                          u &&\n                            ((c = Vt(u.clone)),\n                            t.leave(c).done(function(t) {\n                              !1 !== t && (c = null);\n                            }),\n                            (u = null)));\n                    });\n                  }\n                };\n              }\n            ],\n            Vo = [\n              \"$templateRequest\",\n              \"$anchorScroll\",\n              \"$animate\",\n              function(t, e, n) {\n                return {\n                  restrict: \"ECA\",\n                  priority: 400,\n                  terminal: !0,\n                  transclude: \"element\",\n                  controller: w.noop,\n                  compile: function(r, i) {\n                    var o = i.ngInclude || i.src,\n                      a = i.onload || \"\",\n                      u = i.autoscroll;\n                    return function(r, i, s, c, l) {\n                      var f,\n                        p,\n                        h,\n                        d = 0,\n                        v = function() {\n                          p && (p.remove(), (p = null)),\n                            f && (f.$destroy(), (f = null)),\n                            h &&\n                              (n.leave(h).done(function(t) {\n                                !1 !== t && (p = null);\n                              }),\n                              (p = h),\n                              (h = null));\n                        };\n                      r.$watch(o, function(o) {\n                        var s = function(t) {\n                            !1 === t || !q(u) || (u && !r.$eval(u)) || e();\n                          },\n                          p = ++d;\n                        o\n                          ? (t(o, !0).then(\n                              function(t) {\n                                if (!r.$$destroyed && p === d) {\n                                  var e = r.$new();\n                                  c.template = t;\n                                  var u = l(e, function(t) {\n                                    v(), n.enter(t, null, i).done(s);\n                                  });\n                                  (h = u), (f = e).$emit(\"$includeContentLoaded\", o), r.$eval(a);\n                                }\n                              },\n                              function() {\n                                r.$$destroyed ||\n                                  (p === d && (v(), r.$emit(\"$includeContentError\", o)));\n                              }\n                            ),\n                            r.$emit(\"$includeContentRequested\", o))\n                          : (v(), (c.template = null));\n                      });\n                    };\n                  }\n                };\n              }\n            ],\n            qo = [\n              \"$compile\",\n              function(t) {\n                return {\n                  restrict: \"ECA\",\n                  priority: -400,\n                  require: \"ngInclude\",\n                  link: function(n, r, i, o) {\n                    if ($.call(r[0]).match(/SVG/))\n                      return (\n                        r.empty(),\n                        void t(fe(o.template, e.document).childNodes)(\n                          n,\n                          function(t) {\n                            r.append(t);\n                          },\n                          { futureParentElement: r }\n                        )\n                      );\n                    r.html(o.template), t(r.contents())(n);\n                  }\n                };\n              }\n            ],\n            Uo = qi({\n              priority: 450,\n              compile: function() {\n                return {\n                  pre: function(t, e, n) {\n                    t.$eval(n.ngInit);\n                  }\n                };\n              }\n            }),\n            Fo = function() {\n              return {\n                restrict: \"A\",\n                priority: 100,\n                require: \"ngModel\",\n                link: function(t, e, n, r) {\n                  var i = n.ngList || \", \",\n                    o = \"false\" !== n.ngTrim,\n                    a = o ? et(i) : i;\n                  r.$parsers.push(function(t) {\n                    if (!V(t)) {\n                      var e = [];\n                      return (\n                        t &&\n                          C(t.split(a), function(t) {\n                            t && e.push(o ? et(t) : t);\n                          }),\n                        e\n                      );\n                    }\n                  }),\n                    r.$formatters.push(function(t) {\n                      if (W(t)) return t.join(i);\n                    }),\n                    (r.$isEmpty = function(t) {\n                      return !t || !t.length;\n                    });\n                }\n              };\n            },\n            Ho = \"ng-valid\",\n            Bo = \"ng-invalid\",\n            zo = \"ng-pristine\",\n            Wo = \"ng-dirty\",\n            Go = o(\"ngModel\");\n          function Ko(t, e, n, r, i, o, a, u, s) {\n            (this.$viewValue = Number.NaN),\n              (this.$modelValue = Number.NaN),\n              (this.$$rawModelValue = void 0),\n              (this.$validators = {}),\n              (this.$asyncValidators = {}),\n              (this.$parsers = []),\n              (this.$formatters = []),\n              (this.$viewChangeListeners = []),\n              (this.$untouched = !0),\n              (this.$touched = !1),\n              (this.$pristine = !0),\n              (this.$dirty = !1),\n              (this.$valid = !0),\n              (this.$invalid = !1),\n              (this.$error = {}),\n              (this.$$success = {}),\n              (this.$pending = void 0),\n              (this.$name = s(n.name || \"\", !1)(t)),\n              (this.$$parentForm = Hi),\n              (this.$options = Jo),\n              (this.$$updateEvents = \"\"),\n              (this.$$updateEventHandler = this.$$updateEventHandler.bind(this)),\n              (this.$$parsedNgModel = i(n.ngModel)),\n              (this.$$parsedNgModelAssign = this.$$parsedNgModel.assign),\n              (this.$$ngModelGet = this.$$parsedNgModel),\n              (this.$$ngModelSet = this.$$parsedNgModelAssign),\n              (this.$$pendingDebounce = null),\n              (this.$$parserValid = void 0),\n              (this.$$parserName = \"parse\"),\n              (this.$$currentValidationRunId = 0),\n              (this.$$scope = t),\n              (this.$$rootScope = t.$root),\n              (this.$$attr = n),\n              (this.$$element = r),\n              (this.$$animate = o),\n              (this.$$timeout = a),\n              (this.$$parse = i),\n              (this.$$q = u),\n              (this.$$exceptionHandler = e),\n              Ji(this),\n              (function(t) {\n                t.$$scope.$watch(function(e) {\n                  var n = t.$$ngModelGet(e);\n                  return (\n                    n === t.$modelValue ||\n                      (t.$modelValue != t.$modelValue && n != n) ||\n                      t.$$setModelValue(n),\n                    n\n                  );\n                });\n              })(this);\n          }\n          (Ko.$inject = [\n            \"$scope\",\n            \"$exceptionHandler\",\n            \"$attrs\",\n            \"$element\",\n            \"$parse\",\n            \"$animate\",\n            \"$timeout\",\n            \"$q\",\n            \"$interpolate\"\n          ]),\n            (Ko.prototype = {\n              $$initGetterSetters: function() {\n                if (this.$options.getOption(\"getterSetter\")) {\n                  var t = this.$$parse(this.$$attr.ngModel + \"()\"),\n                    e = this.$$parse(this.$$attr.ngModel + \"($$$p)\");\n                  (this.$$ngModelGet = function(e) {\n                    var n = this.$$parsedNgModel(e);\n                    return K(n) && (n = t(e)), n;\n                  }),\n                    (this.$$ngModelSet = function(t, n) {\n                      K(this.$$parsedNgModel(t))\n                        ? e(t, { $$$p: n })\n                        : this.$$parsedNgModelAssign(t, n);\n                    });\n                } else if (!this.$$parsedNgModel.assign)\n                  throw Go(\n                    \"nonassign\",\n                    \"Expression '{0}' is non-assignable. Element: {1}\",\n                    this.$$attr.ngModel,\n                    xt(this.$$element)\n                  );\n              },\n              $render: D,\n              $isEmpty: function(t) {\n                return V(t) || \"\" === t || null === t || t != t;\n              },\n              $$updateEmptyClasses: function(t) {\n                this.$isEmpty(t)\n                  ? (this.$$animate.removeClass(this.$$element, \"ng-not-empty\"),\n                    this.$$animate.addClass(this.$$element, \"ng-empty\"))\n                  : (this.$$animate.removeClass(this.$$element, \"ng-empty\"),\n                    this.$$animate.addClass(this.$$element, \"ng-not-empty\"));\n              },\n              $setPristine: function() {\n                (this.$dirty = !1),\n                  (this.$pristine = !0),\n                  this.$$animate.removeClass(this.$$element, Wo),\n                  this.$$animate.addClass(this.$$element, zo);\n              },\n              $setDirty: function() {\n                (this.$dirty = !0),\n                  (this.$pristine = !1),\n                  this.$$animate.removeClass(this.$$element, zo),\n                  this.$$animate.addClass(this.$$element, Wo),\n                  this.$$parentForm.$setDirty();\n              },\n              $setUntouched: function() {\n                (this.$touched = !1),\n                  (this.$untouched = !0),\n                  this.$$animate.setClass(this.$$element, \"ng-untouched\", \"ng-touched\");\n              },\n              $setTouched: function() {\n                (this.$touched = !0),\n                  (this.$untouched = !1),\n                  this.$$animate.setClass(this.$$element, \"ng-touched\", \"ng-untouched\");\n              },\n              $rollbackViewValue: function() {\n                this.$$timeout.cancel(this.$$pendingDebounce),\n                  (this.$viewValue = this.$$lastCommittedViewValue),\n                  this.$render();\n              },\n              $validate: function() {\n                if (!M(this.$modelValue)) {\n                  var t = this.$$lastCommittedViewValue,\n                    e = this.$$rawModelValue,\n                    n = this.$valid,\n                    r = this.$modelValue,\n                    i = this.$options.getOption(\"allowInvalid\"),\n                    o = this;\n                  this.$$runValidators(e, t, function(t) {\n                    i ||\n                      n === t ||\n                      ((o.$modelValue = t ? e : void 0),\n                      o.$modelValue !== r && o.$$writeModelToScope());\n                  });\n                }\n              },\n              $$runValidators: function(t, e, n) {\n                this.$$currentValidationRunId++;\n                var r = this.$$currentValidationRunId,\n                  i = this;\n                function o(t, e) {\n                  r === i.$$currentValidationRunId && i.$setValidity(t, e);\n                }\n                function a(t) {\n                  r === i.$$currentValidationRunId && n(t);\n                }\n                !(function() {\n                  var t = i.$$parserName;\n                  if (!V(i.$$parserValid))\n                    return (\n                      i.$$parserValid ||\n                        (C(i.$validators, function(t, e) {\n                          o(e, null);\n                        }),\n                        C(i.$asyncValidators, function(t, e) {\n                          o(e, null);\n                        })),\n                      o(t, i.$$parserValid),\n                      i.$$parserValid\n                    );\n                  o(t, null);\n                  return !0;\n                })()\n                  ? a(!1)\n                  : (function() {\n                      var n = !0;\n                      if (\n                        (C(i.$validators, function(r, i) {\n                          var a = Boolean(r(t, e));\n                          (n = n && a), o(i, a);\n                        }),\n                        !n)\n                      )\n                        return (\n                          C(i.$asyncValidators, function(t, e) {\n                            o(e, null);\n                          }),\n                          !1\n                        );\n                      return !0;\n                    })()\n                    ? (function() {\n                        var n = [],\n                          r = !0;\n                        C(i.$asyncValidators, function(i, a) {\n                          var u = i(t, e);\n                          if (!Q(u))\n                            throw Go(\n                              \"nopromise\",\n                              \"Expected asynchronous validator to return a promise but got '{0}' instead.\",\n                              u\n                            );\n                          o(a, void 0),\n                            n.push(\n                              u.then(\n                                function() {\n                                  o(a, !0);\n                                },\n                                function() {\n                                  (r = !1), o(a, !1);\n                                }\n                              )\n                            );\n                        }),\n                          n.length\n                            ? i.$$q.all(n).then(function() {\n                                a(r);\n                              }, D)\n                            : a(!0);\n                      })()\n                    : a(!1);\n              },\n              $commitViewValue: function() {\n                var t = this.$viewValue;\n                this.$$timeout.cancel(this.$$pendingDebounce),\n                  (this.$$lastCommittedViewValue !== t ||\n                    (\"\" === t && this.$$hasNativeValidators)) &&\n                    (this.$$updateEmptyClasses(t),\n                    (this.$$lastCommittedViewValue = t),\n                    this.$pristine && this.$setDirty(),\n                    this.$$parseAndValidate());\n              },\n              $$parseAndValidate: function() {\n                var t = this.$$lastCommittedViewValue,\n                  e = this;\n                if (\n                  ((this.$$parserValid = !V(t) || void 0),\n                  this.$setValidity(this.$$parserName, null),\n                  (this.$$parserName = \"parse\"),\n                  this.$$parserValid)\n                )\n                  for (var n = 0; n < this.$parsers.length; n++)\n                    if (V((t = this.$parsers[n](t)))) {\n                      this.$$parserValid = !1;\n                      break;\n                    }\n                M(this.$modelValue) && (this.$modelValue = this.$$ngModelGet(this.$$scope));\n                var r = this.$modelValue,\n                  i = this.$options.getOption(\"allowInvalid\");\n                function o() {\n                  e.$modelValue !== r && e.$$writeModelToScope();\n                }\n                (this.$$rawModelValue = t),\n                  i && ((this.$modelValue = t), o()),\n                  this.$$runValidators(t, this.$$lastCommittedViewValue, function(n) {\n                    i || ((e.$modelValue = n ? t : void 0), o());\n                  });\n              },\n              $$writeModelToScope: function() {\n                this.$$ngModelSet(this.$$scope, this.$modelValue),\n                  C(\n                    this.$viewChangeListeners,\n                    function(t) {\n                      try {\n                        t();\n                      } catch (t) {\n                        this.$$exceptionHandler(t);\n                      }\n                    },\n                    this\n                  );\n              },\n              $setViewValue: function(t, e) {\n                (this.$viewValue = t),\n                  this.$options.getOption(\"updateOnDefault\") && this.$$debounceViewValueCommit(e);\n              },\n              $$debounceViewValueCommit: function(t) {\n                var e = this.$options.getOption(\"debounce\");\n                B(e[t])\n                  ? (e = e[t])\n                  : B(e.default) && -1 === this.$options.getOption(\"updateOn\").indexOf(t)\n                    ? (e = e.default)\n                    : B(e[\"*\"]) && (e = e[\"*\"]),\n                  this.$$timeout.cancel(this.$$pendingDebounce);\n                var n = this;\n                e > 0\n                  ? (this.$$pendingDebounce = this.$$timeout(function() {\n                      n.$commitViewValue();\n                    }, e))\n                  : this.$$rootScope.$$phase\n                    ? this.$commitViewValue()\n                    : this.$$scope.$apply(function() {\n                        n.$commitViewValue();\n                      });\n              },\n              $overrideModelOptions: function(t) {\n                (this.$options = this.$options.createChild(t)), this.$$setUpdateOnEvents();\n              },\n              $processModelValue: function() {\n                var t = this.$$format();\n                this.$viewValue !== t &&\n                  (this.$$updateEmptyClasses(t),\n                  (this.$viewValue = this.$$lastCommittedViewValue = t),\n                  this.$render(),\n                  this.$$runValidators(this.$modelValue, this.$viewValue, D));\n              },\n              $$format: function() {\n                for (var t = this.$formatters, e = t.length, n = this.$modelValue; e--; )\n                  n = t[e](n);\n                return n;\n              },\n              $$setModelValue: function(t) {\n                (this.$modelValue = this.$$rawModelValue = t),\n                  (this.$$parserValid = void 0),\n                  this.$processModelValue();\n              },\n              $$setUpdateOnEvents: function() {\n                this.$$updateEvents &&\n                  this.$$element.off(this.$$updateEvents, this.$$updateEventHandler),\n                  (this.$$updateEvents = this.$options.getOption(\"updateOn\")),\n                  this.$$updateEvents &&\n                    this.$$element.on(this.$$updateEvents, this.$$updateEventHandler);\n              },\n              $$updateEventHandler: function(t) {\n                this.$$debounceViewValueCommit(t && t.type);\n              }\n            }),\n            Yi({\n              clazz: Ko,\n              set: function(t, e) {\n                t[e] = !0;\n              },\n              unset: function(t, e) {\n                delete t[e];\n              }\n            });\n          var Jo,\n            Yo = [\n              \"$rootScope\",\n              function(t) {\n                return {\n                  restrict: \"A\",\n                  require: [\"ngModel\", \"^?form\", \"^?ngModelOptions\"],\n                  controller: Ko,\n                  priority: 1,\n                  compile: function(e) {\n                    return (\n                      e\n                        .addClass(zo)\n                        .addClass(\"ng-untouched\")\n                        .addClass(Ho),\n                      {\n                        pre: function(t, e, n, r) {\n                          var i = r[0],\n                            o = r[1] || i.$$parentForm,\n                            a = r[2];\n                          a && (i.$options = a.$options),\n                            i.$$initGetterSetters(),\n                            o.$addControl(i),\n                            n.$observe(\"name\", function(t) {\n                              i.$name !== t && i.$$parentForm.$$renameControl(i, t);\n                            }),\n                            t.$on(\"$destroy\", function() {\n                              i.$$parentForm.$removeControl(i);\n                            });\n                        },\n                        post: function(e, n, r, i) {\n                          var o = i[0];\n                          function a() {\n                            o.$setTouched();\n                          }\n                          o.$$setUpdateOnEvents(),\n                            n.on(\"blur\", function() {\n                              o.$touched || (t.$$phase ? e.$evalAsync(a) : e.$apply(a));\n                            });\n                        }\n                      }\n                    );\n                  }\n                };\n              }\n            ],\n            Zo = /(\\s+|^)default(\\s+|$)/;\n          function Xo(t) {\n            this.$$options = t;\n          }\n          (Xo.prototype = {\n            getOption: function(t) {\n              return this.$$options[t];\n            },\n            createChild: function(t) {\n              var e = !1;\n              return (\n                C(\n                  (t = O({}, t)),\n                  function(n, r) {\n                    \"$inherit\" === n\n                      ? \"*\" === r\n                        ? (e = !0)\n                        : ((t[r] = this.$$options[r]),\n                          \"updateOn\" === r && (t.updateOnDefault = this.$$options.updateOnDefault))\n                      : \"updateOn\" === r &&\n                        ((t.updateOnDefault = !1),\n                        (t[r] = et(\n                          n.replace(Zo, function() {\n                            return (t.updateOnDefault = !0), \" \";\n                          })\n                        )));\n                  },\n                  this\n                ),\n                e && (delete t[\"*\"], ta(t, this.$$options)),\n                ta(t, Jo.$$options),\n                new Xo(t)\n              );\n            }\n          }),\n            (Jo = new Xo({\n              updateOn: \"\",\n              updateOnDefault: !0,\n              debounce: 0,\n              getterSetter: !1,\n              allowInvalid: !1,\n              timezone: null\n            }));\n          var Qo = function() {\n            function t(t, e) {\n              (this.$$attrs = t), (this.$$scope = e);\n            }\n            return (\n              (t.$inject = [\"$attrs\", \"$scope\"]),\n              (t.prototype = {\n                $onInit: function() {\n                  var t = this.parentCtrl ? this.parentCtrl.$options : Jo,\n                    e = this.$$scope.$eval(this.$$attrs.ngModelOptions);\n                  this.$options = t.createChild(e);\n                }\n              }),\n              {\n                restrict: \"A\",\n                priority: 10,\n                require: { parentCtrl: \"?^^ngModelOptions\" },\n                bindToController: !0,\n                controller: t\n              }\n            );\n          };\n          function ta(t, e) {\n            C(e, function(e, n) {\n              q(t[n]) || (t[n] = e);\n            });\n          }\n          var ea = qi({ terminal: !0, priority: 1e3 }),\n            na = o(\"ngOptions\"),\n            ra = /^\\s*([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?(?:\\s+group\\s+by\\s+([\\s\\S]+?))?(?:\\s+disable\\s+when\\s+([\\s\\S]+?))?\\s+for\\s+(?:([$\\w][$\\w]*)|(?:\\(\\s*([$\\w][$\\w]*)\\s*,\\s*([$\\w][$\\w]*)\\s*\\)))\\s+in\\s+([\\s\\S]+?)(?:\\s+track\\s+by\\s+([\\s\\S]+?))?$/,\n            ia = [\n              \"$compile\",\n              \"$document\",\n              \"$parse\",\n              function(t, n, r) {\n                var i = e.document.createElement(\"option\"),\n                  o = e.document.createElement(\"optgroup\");\n                return {\n                  restrict: \"A\",\n                  terminal: !0,\n                  require: [\"select\", \"ngModel\"],\n                  link: {\n                    pre: function(t, e, n, r) {\n                      r[0].registerOption = D;\n                    },\n                    post: function(e, a, s, c) {\n                      for (\n                        var l = c[0],\n                          f = c[1],\n                          p = s.multiple,\n                          h = 0,\n                          d = a.children(),\n                          v = d.length;\n                        h < v;\n                        h++\n                      )\n                        if (\"\" === d[h].value) {\n                          (l.hasEmptyOption = !0), (l.emptyOption = d.eq(h));\n                          break;\n                        }\n                      a.empty();\n                      var g,\n                        m = !!l.emptyOption;\n                      u(i.cloneNode(!1)).val(\"?\");\n                      var $ = (function(t, e, n) {\n                          var i = t.match(ra);\n                          if (!i)\n                            throw na(\n                              \"iexp\",\n                              \"Expected expression in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '{0}'. Element: {1}\",\n                              t,\n                              xt(e)\n                            );\n                          var o = i[5] || i[7],\n                            a = i[6],\n                            u = / as /.test(i[0]) && i[1],\n                            s = i[9],\n                            c = r(i[2] ? i[1] : o),\n                            l = (u && r(u)) || c,\n                            f = s && r(s),\n                            p = s\n                              ? function(t, e) {\n                                  return f(n, e);\n                                }\n                              : function(t) {\n                                  return Ve(t);\n                                },\n                            h = function(t, e) {\n                              return p(t, y(t, e));\n                            },\n                            d = r(i[2] || i[1]),\n                            v = r(i[3] || \"\"),\n                            g = r(i[4] || \"\"),\n                            m = r(i[8]),\n                            $ = {},\n                            y = a\n                              ? function(t, e) {\n                                  return ($[a] = e), ($[o] = t), $;\n                                }\n                              : function(t) {\n                                  return ($[o] = t), $;\n                                };\n                          function b(t, e, n, r, i) {\n                            (this.selectValue = t),\n                              (this.viewValue = e),\n                              (this.label = n),\n                              (this.group = r),\n                              (this.disabled = i);\n                          }\n                          function w(t) {\n                            var e;\n                            if (!a && _(t)) e = t;\n                            else\n                              for (var n in ((e = []), t))\n                                t.hasOwnProperty(n) && \"$\" !== n.charAt(0) && e.push(n);\n                            return e;\n                          }\n                          return {\n                            trackBy: s,\n                            getTrackByValue: h,\n                            getWatchables: r(m, function(t) {\n                              for (\n                                var e = [], r = w((t = t || [])), o = r.length, a = 0;\n                                a < o;\n                                a++\n                              ) {\n                                var u = t === r ? a : r[a],\n                                  s = t[u],\n                                  c = y(s, u),\n                                  l = p(s, c);\n                                if ((e.push(l), i[2] || i[1])) {\n                                  var f = d(n, c);\n                                  e.push(f);\n                                }\n                                if (i[4]) {\n                                  var h = g(n, c);\n                                  e.push(h);\n                                }\n                              }\n                              return e;\n                            }),\n                            getOptions: function() {\n                              for (\n                                var t = [], e = {}, r = m(n) || [], i = w(r), o = i.length, a = 0;\n                                a < o;\n                                a++\n                              ) {\n                                var u = r === i ? a : i[a],\n                                  c = r[u],\n                                  f = y(c, u),\n                                  $ = l(n, f),\n                                  x = p($, f),\n                                  _ = new b(x, $, d(n, f), v(n, f), g(n, f));\n                                t.push(_), (e[x] = _);\n                              }\n                              return {\n                                items: t,\n                                selectValueMap: e,\n                                getOptionFromViewValue: function(t) {\n                                  return e[h(t)];\n                                },\n                                getViewValueFromOption: function(t) {\n                                  return s ? ut(t.viewValue) : t.viewValue;\n                                }\n                              };\n                            }\n                          };\n                        })(s.ngOptions, a, e),\n                        y = n[0].createDocumentFragment();\n                      function b(t, e) {\n                        var n = i.cloneNode(!1);\n                        e.appendChild(n),\n                          (function(t, e) {\n                            (t.element = e),\n                              (e.disabled = t.disabled),\n                              t.label !== e.label &&\n                                ((e.label = t.label), (e.textContent = t.label)),\n                              (e.value = t.selectValue);\n                          })(t, n);\n                      }\n                      function w(t) {\n                        var e = g.getOptionFromViewValue(t),\n                          n = e && e.element;\n                        return n && !n.selected && (n.selected = !0), e;\n                      }\n                      (l.generateUnknownOptionValue = function(t) {\n                        return \"?\";\n                      }),\n                        p\n                          ? ((l.writeValue = function(t) {\n                              if (g) {\n                                var e = (t && t.map(w)) || [];\n                                g.items.forEach(function(t) {\n                                  t.element.selected && !ot(e, t) && (t.element.selected = !1);\n                                });\n                              }\n                            }),\n                            (l.readValue = function() {\n                              var t = [];\n                              return (\n                                C(a.val() || [], function(e) {\n                                  var n = g.selectValueMap[e];\n                                  n && !n.disabled && t.push(g.getViewValueFromOption(n));\n                                }),\n                                t\n                              );\n                            }),\n                            $.trackBy &&\n                              e.$watchCollection(\n                                function() {\n                                  if (W(f.$viewValue))\n                                    return f.$viewValue.map(function(t) {\n                                      return $.getTrackByValue(t);\n                                    });\n                                },\n                                function() {\n                                  f.$render();\n                                }\n                              ))\n                          : ((l.writeValue = function(t) {\n                              if (g) {\n                                var e = a[0].options[a[0].selectedIndex],\n                                  n = g.getOptionFromViewValue(t);\n                                e && e.removeAttribute(\"selected\"),\n                                  n\n                                    ? (a[0].value !== n.selectValue &&\n                                        (l.removeUnknownOption(),\n                                        (a[0].value = n.selectValue),\n                                        (n.element.selected = !0)),\n                                      n.element.setAttribute(\"selected\", \"selected\"))\n                                    : l.selectUnknownOrEmptyOption(t);\n                              }\n                            }),\n                            (l.readValue = function() {\n                              var t = g.selectValueMap[a.val()];\n                              return t && !t.disabled\n                                ? (l.unselectEmptyOption(),\n                                  l.removeUnknownOption(),\n                                  g.getViewValueFromOption(t))\n                                : null;\n                            }),\n                            $.trackBy &&\n                              e.$watch(\n                                function() {\n                                  return $.getTrackByValue(f.$viewValue);\n                                },\n                                function() {\n                                  f.$render();\n                                }\n                              )),\n                        m &&\n                          (t(l.emptyOption)(e),\n                          a.prepend(l.emptyOption),\n                          l.emptyOption[0].nodeType === Bt\n                            ? ((l.hasEmptyOption = !1),\n                              (l.registerOption = function(t, e) {\n                                \"\" === e.val() &&\n                                  ((l.hasEmptyOption = !0),\n                                  (l.emptyOption = e),\n                                  l.emptyOption.removeClass(\"ng-scope\"),\n                                  f.$render(),\n                                  e.on(\"$destroy\", function() {\n                                    var t = l.$isEmptyOptionSelected();\n                                    (l.hasEmptyOption = !1),\n                                      (l.emptyOption = void 0),\n                                      t && f.$render();\n                                  }));\n                              }))\n                            : l.emptyOption.removeClass(\"ng-scope\")),\n                        e.$watchCollection($.getWatchables, function() {\n                          var t = g && l.readValue();\n                          if (g)\n                            for (var e = g.items.length - 1; e >= 0; e--) {\n                              var n = g.items[e];\n                              q(n.group) ? Te(n.element.parentNode) : Te(n.element);\n                            }\n                          var r = {};\n                          if (\n                            ((g = $.getOptions()).items.forEach(function(t) {\n                              var e;\n                              q(t.group)\n                                ? ((e = r[t.group]) ||\n                                    ((e = o.cloneNode(!1)),\n                                    y.appendChild(e),\n                                    (e.label = null === t.group ? \"null\" : t.group),\n                                    (r[t.group] = e)),\n                                  b(t, e))\n                                : b(t, y);\n                            }),\n                            a[0].appendChild(y),\n                            f.$render(),\n                            !f.$isEmpty(t))\n                          ) {\n                            var i = l.readValue(),\n                              u = $.trackBy || p;\n                            (u ? ct(t, i) : t === i) || (f.$setViewValue(i), f.$render());\n                          }\n                        });\n                    }\n                  }\n                };\n              }\n            ],\n            oa = [\n              \"$locale\",\n              \"$interpolate\",\n              \"$log\",\n              function(t, e, n) {\n                var r = /{}/g,\n                  i = /^when(Minus)?(.+)$/;\n                return {\n                  link: function(o, a, u) {\n                    var s,\n                      c = u.count,\n                      l = u.$attr.when && a.attr(u.$attr.when),\n                      f = u.offset || 0,\n                      p = o.$eval(l) || {},\n                      d = {},\n                      v = e.startSymbol(),\n                      g = e.endSymbol(),\n                      m = v + c + \"-\" + f + g,\n                      $ = w.noop;\n                    function y(t) {\n                      a.text(t || \"\");\n                    }\n                    C(u, function(t, e) {\n                      var n = i.exec(e);\n                      if (n) {\n                        var r = (n[1] ? \"-\" : \"\") + h(n[2]);\n                        p[r] = a.attr(u.$attr[e]);\n                      }\n                    }),\n                      C(p, function(t, n) {\n                        d[n] = e(t.replace(r, m));\n                      }),\n                      o.$watch(c, function(e) {\n                        var r = parseFloat(e),\n                          i = M(r);\n                        if ((i || r in p || (r = t.pluralCat(r - f)), !(r === s || (i && M(s))))) {\n                          $();\n                          var a = d[r];\n                          V(a)\n                            ? (null != e &&\n                                n.debug(\"ngPluralize: no rule defined for '\" + r + \"' in \" + l),\n                              ($ = D),\n                              y())\n                            : ($ = o.$watch(a, y)),\n                            (s = r);\n                        }\n                      });\n                  }\n                };\n              }\n            ],\n            aa = o(\"ngRef\"),\n            ua = [\n              \"$parse\",\n              function(t) {\n                return {\n                  priority: -1,\n                  restrict: \"A\",\n                  compile: function(e, n) {\n                    var r = bn(it(e)),\n                      i = t(n.ngRef),\n                      o =\n                        i.assign ||\n                        function() {\n                          throw aa(\n                            \"nonassign\",\n                            'Expression in ngRef=\"{0}\" is non-assignable!',\n                            n.ngRef\n                          );\n                        };\n                    return function(t, e, a) {\n                      var u;\n                      if (a.hasOwnProperty(\"ngRefRead\")) {\n                        if (\"$element\" === a.ngRefRead) u = e;\n                        else if (!(u = e.data(\"$\" + a.ngRefRead + \"Controller\")))\n                          throw aa(\n                            \"noctrl\",\n                            'The controller for ngRefRead=\"{0}\" could not be found on ngRef=\"{1}\"',\n                            a.ngRefRead,\n                            n.ngRef\n                          );\n                      } else u = e.data(\"$\" + r + \"Controller\");\n                      o(t, (u = u || e)),\n                        e.on(\"$destroy\", function() {\n                          i(t) === u && o(t, null);\n                        });\n                    };\n                  }\n                };\n              }\n            ],\n            sa = [\n              \"$parse\",\n              \"$animate\",\n              \"$compile\",\n              function(t, e, n) {\n                var r = o(\"ngRepeat\"),\n                  i = function(t, e, n, r, i, o, a) {\n                    (t[n] = r),\n                      i && (t[i] = o),\n                      (t.$index = e),\n                      (t.$first = 0 === e),\n                      (t.$last = e === a - 1),\n                      (t.$middle = !(t.$first || t.$last)),\n                      (t.$odd = !(t.$even = 0 == (1 & e)));\n                  },\n                  a = function(t) {\n                    return t.clone[0];\n                  },\n                  u = function(t) {\n                    return t.clone[t.clone.length - 1];\n                  };\n                return {\n                  restrict: \"A\",\n                  multiElement: !0,\n                  transclude: \"element\",\n                  priority: 1e3,\n                  terminal: !0,\n                  $$tlb: !0,\n                  compile: function(o, s) {\n                    var c = s.ngRepeat,\n                      l = n.$$createComment(\"end ngRepeat\", c),\n                      f = c.match(\n                        /^\\s*([\\s\\S]+?)\\s+in\\s+([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?(?:\\s+track\\s+by\\s+([\\s\\S]+?))?\\s*$/\n                      );\n                    if (!f)\n                      throw r(\n                        \"iexp\",\n                        \"Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.\",\n                        c\n                      );\n                    var h = f[1],\n                      d = f[2],\n                      v = f[3],\n                      g = f[4];\n                    if (!(f = h.match(/^(?:(\\s*[$\\w]+)|\\(\\s*([$\\w]+)\\s*,\\s*([$\\w]+)\\s*\\))$/)))\n                      throw r(\n                        \"iidexp\",\n                        \"'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.\",\n                        h\n                      );\n                    var m,\n                      $,\n                      y,\n                      b,\n                      w = f[3] || f[1],\n                      x = f[2];\n                    if (\n                      v &&\n                      (!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(v) ||\n                        /^(null|undefined|this|\\$index|\\$first|\\$middle|\\$last|\\$even|\\$odd|\\$parent|\\$root|\\$id)$/.test(\n                          v\n                        ))\n                    )\n                      throw r(\n                        \"badident\",\n                        \"alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.\",\n                        v\n                      );\n                    var S = { $id: Ve };\n                    return (\n                      g\n                        ? (m = t(g))\n                        : ((y = function(t, e) {\n                            return Ve(e);\n                          }),\n                          (b = function(t) {\n                            return t;\n                          })),\n                      function(t, n, o, s, f) {\n                        m &&\n                          ($ = function(e, n, r) {\n                            return x && (S[x] = e), (S[w] = n), (S.$index = r), m(t, S);\n                          });\n                        var h = qt();\n                        t.$watchCollection(d, function(o) {\n                          var s,\n                            d,\n                            g,\n                            m,\n                            S,\n                            E,\n                            k,\n                            A,\n                            T,\n                            O,\n                            j,\n                            N,\n                            M = n[0],\n                            L = qt();\n                          if ((v && (t[v] = o), _(o))) (T = o), (A = $ || y);\n                          else\n                            for (var D in ((A = $ || b), (T = []), o))\n                              p.call(o, D) && \"$\" !== D.charAt(0) && T.push(D);\n                          for (m = T.length, j = new Array(m), s = 0; s < m; s++)\n                            if (((S = o === T ? s : T[s]), (E = o[S]), (k = A(S, E, s)), h[k]))\n                              (O = h[k]), delete h[k], (L[k] = O), (j[s] = O);\n                            else {\n                              if (L[k])\n                                throw (C(j, function(t) {\n                                  t && t.scope && (h[t.id] = t);\n                                }),\n                                r(\n                                  \"dupes\",\n                                  \"Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}\",\n                                  c,\n                                  k,\n                                  E\n                                ));\n                              (j[s] = { id: k, scope: void 0, clone: void 0 }), (L[k] = !0);\n                            }\n                          for (var I in h) {\n                            if (((N = Vt((O = h[I]).clone)), e.leave(N), N[0].parentNode))\n                              for (s = 0, d = N.length; s < d; s++) N[s].$$NG_REMOVED = !0;\n                            O.scope.$destroy();\n                          }\n                          for (s = 0; s < m; s++)\n                            if (((S = o === T ? s : T[s]), (E = o[S]), (O = j[s]).scope)) {\n                              g = M;\n                              do {\n                                g = g.nextSibling;\n                              } while (g && g.$$NG_REMOVED);\n                              a(O) !== g && e.move(Vt(O.clone), null, M),\n                                (M = u(O)),\n                                i(O.scope, s, w, E, x, S, m);\n                            } else\n                              f(function(t, n) {\n                                O.scope = n;\n                                var r = l.cloneNode(!1);\n                                (t[t.length++] = r),\n                                  e.enter(t, null, M),\n                                  (M = r),\n                                  (O.clone = t),\n                                  (L[O.id] = O),\n                                  i(O.scope, s, w, E, x, S, m);\n                              });\n                          h = L;\n                        });\n                      }\n                    );\n                  }\n                };\n              }\n            ],\n            ca = [\n              \"$animate\",\n              function(t) {\n                return {\n                  restrict: \"A\",\n                  multiElement: !0,\n                  link: function(e, n, r) {\n                    e.$watch(r.ngShow, function(e) {\n                      t[e ? \"removeClass\" : \"addClass\"](n, \"ng-hide\", {\n                        tempClasses: \"ng-hide-animate\"\n                      });\n                    });\n                  }\n                };\n              }\n            ],\n            la = [\n              \"$animate\",\n              function(t) {\n                return {\n                  restrict: \"A\",\n                  multiElement: !0,\n                  link: function(e, n, r) {\n                    e.$watch(r.ngHide, function(e) {\n                      t[e ? \"addClass\" : \"removeClass\"](n, \"ng-hide\", {\n                        tempClasses: \"ng-hide-animate\"\n                      });\n                    });\n                  }\n                };\n              }\n            ],\n            fa = qi(function(t, e, n) {\n              t.$watchCollection(n.ngStyle, function(t, n) {\n                n &&\n                  t !== n &&\n                  C(n, function(t, n) {\n                    e.css(n, \"\");\n                  }),\n                  t && e.css(t);\n              });\n            }),\n            pa = [\n              \"$animate\",\n              \"$compile\",\n              function(t, e) {\n                return {\n                  require: \"ngSwitch\",\n                  controller: [\n                    \"$scope\",\n                    function() {\n                      this.cases = {};\n                    }\n                  ],\n                  link: function(n, r, i, o) {\n                    var a = i.ngSwitch || i.on,\n                      u = [],\n                      s = [],\n                      c = [],\n                      l = [],\n                      f = function(t, e) {\n                        return function(n) {\n                          !1 !== n && t.splice(e, 1);\n                        };\n                      };\n                    n.$watch(a, function(n) {\n                      for (var r, i; c.length; ) t.cancel(c.pop());\n                      for (r = 0, i = l.length; r < i; ++r) {\n                        var a = Vt(s[r].clone);\n                        l[r].$destroy(), (c[r] = t.leave(a)).done(f(c, r));\n                      }\n                      (s.length = 0),\n                        (l.length = 0),\n                        (u = o.cases[\"!\" + n] || o.cases[\"?\"]) &&\n                          C(u, function(n) {\n                            n.transclude(function(r, i) {\n                              l.push(i);\n                              var o = n.element;\n                              r[r.length++] = e.$$createComment(\"end ngSwitchWhen\");\n                              var a = { clone: r };\n                              s.push(a), t.enter(r, o.parent(), o);\n                            });\n                          });\n                    });\n                  }\n                };\n              }\n            ],\n            ha = qi({\n              transclude: \"element\",\n              priority: 1200,\n              require: \"^ngSwitch\",\n              multiElement: !0,\n              link: function(t, e, n, r, i) {\n                C(\n                  n.ngSwitchWhen\n                    .split(n.ngSwitchWhenSeparator)\n                    .sort()\n                    .filter(function(t, e, n) {\n                      return n[e - 1] !== t;\n                    }),\n                  function(t) {\n                    (r.cases[\"!\" + t] = r.cases[\"!\" + t] || []),\n                      r.cases[\"!\" + t].push({ transclude: i, element: e });\n                  }\n                );\n              }\n            }),\n            da = qi({\n              transclude: \"element\",\n              priority: 1200,\n              require: \"^ngSwitch\",\n              multiElement: !0,\n              link: function(t, e, n, r, i) {\n                (r.cases[\"?\"] = r.cases[\"?\"] || []),\n                  r.cases[\"?\"].push({ transclude: i, element: e });\n              }\n            }),\n            va = o(\"ngTransclude\"),\n            ga = [\n              \"$compile\",\n              function(t) {\n                return {\n                  restrict: \"EAC\",\n                  compile: function(e) {\n                    var n = t(e.contents());\n                    return (\n                      e.empty(),\n                      function(t, e, r, i, o) {\n                        if (!o)\n                          throw va(\n                            \"orphan\",\n                            \"Illegal use of ngTransclude directive in the template! No parent directive that requires a transclusion found. Element: {0}\",\n                            xt(e)\n                          );\n                        r.ngTransclude === r.$attr.ngTransclude && (r.ngTransclude = \"\");\n                        var a = r.ngTransclude || r.ngTranscludeSlot;\n                        function u() {\n                          n(t, function(t) {\n                            e.append(t);\n                          });\n                        }\n                        o(\n                          function(t, n) {\n                            t.length &&\n                            (function(t) {\n                              for (var e = 0, n = t.length; e < n; e++) {\n                                var r = t[e];\n                                if (r.nodeType !== Ht || r.nodeValue.trim()) return !0;\n                              }\n                            })(t)\n                              ? e.append(t)\n                              : (u(), n.$destroy());\n                          },\n                          null,\n                          a\n                        ),\n                          a && !o.isSlotFilled(a) && u();\n                      }\n                    );\n                  }\n                };\n              }\n            ],\n            ma = [\n              \"$templateCache\",\n              function(t) {\n                return {\n                  restrict: \"E\",\n                  terminal: !0,\n                  compile: function(e, n) {\n                    if (\"text/ng-template\" === n.type) {\n                      var r = n.id,\n                        i = e[0].text;\n                      t.put(r, i);\n                    }\n                  }\n                };\n              }\n            ],\n            $a = { $setViewValue: D, $render: D };\n          function ya(t, e) {\n            t.prop(\"selected\", e), t.attr(\"selected\", e);\n          }\n          var ba = [\n              \"$element\",\n              \"$scope\",\n              function(t, n) {\n                var r = this,\n                  i = new Fe();\n                (r.selectValueMap = {}),\n                  (r.ngModelCtrl = $a),\n                  (r.multiple = !1),\n                  (r.unknownOption = u(e.document.createElement(\"option\"))),\n                  (r.hasEmptyOption = !1),\n                  (r.emptyOption = void 0),\n                  (r.renderUnknownOption = function(e) {\n                    var n = r.generateUnknownOptionValue(e);\n                    r.unknownOption.val(n),\n                      t.prepend(r.unknownOption),\n                      ya(r.unknownOption, !0),\n                      t.val(n);\n                  }),\n                  (r.updateUnknownOption = function(e) {\n                    var n = r.generateUnknownOptionValue(e);\n                    r.unknownOption.val(n), ya(r.unknownOption, !0), t.val(n);\n                  }),\n                  (r.generateUnknownOptionValue = function(t) {\n                    return \"? \" + Ve(t) + \" ?\";\n                  }),\n                  (r.removeUnknownOption = function() {\n                    r.unknownOption.parent() && r.unknownOption.remove();\n                  }),\n                  (r.selectEmptyOption = function() {\n                    r.emptyOption && (t.val(\"\"), ya(r.emptyOption, !0));\n                  }),\n                  (r.unselectEmptyOption = function() {\n                    r.hasEmptyOption && ya(r.emptyOption, !1);\n                  }),\n                  n.$on(\"$destroy\", function() {\n                    r.renderUnknownOption = D;\n                  }),\n                  (r.readValue = function() {\n                    var e = t.val(),\n                      n = e in r.selectValueMap ? r.selectValueMap[e] : e;\n                    return r.hasOption(n) ? n : null;\n                  }),\n                  (r.writeValue = function(e) {\n                    var n = t[0].options[t[0].selectedIndex];\n                    if ((n && ya(u(n), !1), r.hasOption(e))) {\n                      r.removeUnknownOption();\n                      var i = Ve(e);\n                      t.val(i in r.selectValueMap ? i : e);\n                      var o = t[0].options[t[0].selectedIndex];\n                      ya(u(o), !0);\n                    } else r.selectUnknownOrEmptyOption(e);\n                  }),\n                  (r.addOption = function(t, e) {\n                    if (e[0].nodeType !== Bt) {\n                      Pt(t, '\"option value\"'),\n                        \"\" === t && ((r.hasEmptyOption = !0), (r.emptyOption = e));\n                      var n = i.get(t) || 0;\n                      i.set(t, n + 1), a();\n                    }\n                  }),\n                  (r.removeOption = function(t) {\n                    var e = i.get(t);\n                    e &&\n                      (1 === e\n                        ? (i.delete(t),\n                          \"\" === t && ((r.hasEmptyOption = !1), (r.emptyOption = void 0)))\n                        : i.set(t, e - 1));\n                  }),\n                  (r.hasOption = function(t) {\n                    return !!i.get(t);\n                  }),\n                  (r.$hasEmptyOption = function() {\n                    return r.hasEmptyOption;\n                  }),\n                  (r.$isUnknownOptionSelected = function() {\n                    return t[0].options[0] === r.unknownOption[0];\n                  }),\n                  (r.$isEmptyOptionSelected = function() {\n                    return (\n                      r.hasEmptyOption && t[0].options[t[0].selectedIndex] === r.emptyOption[0]\n                    );\n                  }),\n                  (r.selectUnknownOrEmptyOption = function(t) {\n                    null == t && r.emptyOption\n                      ? (r.removeUnknownOption(), r.selectEmptyOption())\n                      : r.unknownOption.parent().length\n                        ? r.updateUnknownOption(t)\n                        : r.renderUnknownOption(t);\n                  });\n                var o = !1;\n                function a() {\n                  o ||\n                    ((o = !0),\n                    n.$$postDigest(function() {\n                      (o = !1), r.ngModelCtrl.$render();\n                    }));\n                }\n                var s = !1;\n                function c(t) {\n                  s ||\n                    ((s = !0),\n                    n.$$postDigest(function() {\n                      n.$$destroyed ||\n                        ((s = !1),\n                        r.ngModelCtrl.$setViewValue(r.readValue()),\n                        t && r.ngModelCtrl.$render());\n                    }));\n                }\n                r.registerOption = function(t, e, n, i, o) {\n                  if (n.$attr.ngValue) {\n                    var u,\n                      s = NaN;\n                    n.$observe(\"value\", function(t) {\n                      var n,\n                        i = e.prop(\"selected\");\n                      q(s) && (r.removeOption(u), delete r.selectValueMap[s], (n = !0)),\n                        (s = Ve(t)),\n                        (u = t),\n                        (r.selectValueMap[s] = t),\n                        r.addOption(t, e),\n                        e.attr(\"value\", s),\n                        n && i && c();\n                    });\n                  } else\n                    i\n                      ? n.$observe(\"value\", function(t) {\n                          var n;\n                          r.readValue();\n                          var i = e.prop(\"selected\");\n                          q(u) && (r.removeOption(u), (n = !0)),\n                            (u = t),\n                            r.addOption(t, e),\n                            n && i && c();\n                        })\n                      : o\n                        ? t.$watch(o, function(t, i) {\n                            n.$set(\"value\", t);\n                            var o = e.prop(\"selected\");\n                            i !== t && r.removeOption(i), r.addOption(t, e), i && o && c();\n                          })\n                        : r.addOption(n.value, e);\n                  n.$observe(\"disabled\", function(t) {\n                    (\"true\" === t || (t && e.prop(\"selected\"))) &&\n                      (r.multiple\n                        ? c(!0)\n                        : (r.ngModelCtrl.$setViewValue(null), r.ngModelCtrl.$render()));\n                  }),\n                    e.on(\"$destroy\", function() {\n                      var t = r.readValue(),\n                        e = n.value;\n                      r.removeOption(e),\n                        a(),\n                        ((r.multiple && t && -1 !== t.indexOf(e)) || t === e) && c(!0);\n                    });\n                };\n              }\n            ],\n            wa = function() {\n              return {\n                restrict: \"E\",\n                require: [\"select\", \"?ngModel\"],\n                controller: ba,\n                priority: 1,\n                link: {\n                  pre: function(t, e, n, r) {\n                    var i = r[0],\n                      o = r[1];\n                    if (!o) return void (i.registerOption = D);\n                    if (\n                      ((i.ngModelCtrl = o),\n                      e.on(\"change\", function() {\n                        i.removeUnknownOption(),\n                          t.$apply(function() {\n                            o.$setViewValue(i.readValue());\n                          });\n                      }),\n                      n.multiple)\n                    ) {\n                      (i.multiple = !0),\n                        (i.readValue = function() {\n                          var t = [];\n                          return (\n                            C(e.find(\"option\"), function(e) {\n                              if (e.selected && !e.disabled) {\n                                var n = e.value;\n                                t.push(n in i.selectValueMap ? i.selectValueMap[n] : n);\n                              }\n                            }),\n                            t\n                          );\n                        }),\n                        (i.writeValue = function(t) {\n                          C(e.find(\"option\"), function(e) {\n                            var n = !!t && (ot(t, e.value) || ot(t, i.selectValueMap[e.value])),\n                              r = e.selected;\n                            n !== r && ya(u(e), n);\n                          });\n                        });\n                      var a,\n                        s = NaN;\n                      t.$watch(function() {\n                        s !== o.$viewValue ||\n                          ct(a, o.$viewValue) ||\n                          ((a = Gt(o.$viewValue)), o.$render()),\n                          (s = o.$viewValue);\n                      }),\n                        (o.$isEmpty = function(t) {\n                          return !t || 0 === t.length;\n                        });\n                    }\n                  },\n                  post: function(t, e, n, r) {\n                    var i = r[1];\n                    if (!i) return;\n                    var o = r[0];\n                    i.$render = function() {\n                      o.writeValue(i.$viewValue);\n                    };\n                  }\n                }\n              };\n            },\n            xa = [\n              \"$interpolate\",\n              function(t) {\n                return {\n                  restrict: \"E\",\n                  priority: 100,\n                  compile: function(e, n) {\n                    var r, i;\n                    return (\n                      q(n.ngValue) ||\n                        (q(n.value)\n                          ? (r = t(n.value, !0))\n                          : (i = t(e.text(), !0)) || n.$set(\"value\", e.text())),\n                      function(t, e, n) {\n                        var o = e.parent(),\n                          a = o.data(\"$selectController\") || o.parent().data(\"$selectController\");\n                        a && a.registerOption(t, e, n, r, i);\n                      }\n                    );\n                  }\n                };\n              }\n            ],\n            _a = function() {\n              return {\n                restrict: \"A\",\n                require: \"?ngModel\",\n                link: function(t, e, n, r) {\n                  r &&\n                    ((n.required = !0),\n                    (r.$validators.required = function(t, e) {\n                      return !n.required || !r.$isEmpty(e);\n                    }),\n                    n.$observe(\"required\", function() {\n                      r.$validate();\n                    }));\n                }\n              };\n            },\n            Ca = function() {\n              return {\n                restrict: \"A\",\n                require: \"?ngModel\",\n                link: function(t, e, n, r) {\n                  if (r) {\n                    var i,\n                      a = n.ngPattern || n.pattern;\n                    n.$observe(\"pattern\", function(t) {\n                      if ((H(t) && t.length > 0 && (t = new RegExp(\"^\" + t + \"$\")), t && !t.test))\n                        throw o(\"ngPattern\")(\n                          \"noregexp\",\n                          \"Expected {0} to be a RegExp but was {1}. Element: {2}\",\n                          a,\n                          t,\n                          xt(e)\n                        );\n                      (i = t || void 0), r.$validate();\n                    }),\n                      (r.$validators.pattern = function(t, e) {\n                        return r.$isEmpty(e) || V(i) || i.test(e);\n                      });\n                  }\n                }\n              };\n            },\n            Sa = function() {\n              return {\n                restrict: \"A\",\n                require: \"?ngModel\",\n                link: function(t, e, n, r) {\n                  if (r) {\n                    var i = -1;\n                    n.$observe(\"maxlength\", function(t) {\n                      var e = N(t);\n                      (i = M(e) ? -1 : e), r.$validate();\n                    }),\n                      (r.$validators.maxlength = function(t, e) {\n                        return i < 0 || r.$isEmpty(e) || e.length <= i;\n                      });\n                  }\n                }\n              };\n            },\n            Ea = function() {\n              return {\n                restrict: \"A\",\n                require: \"?ngModel\",\n                link: function(t, e, n, r) {\n                  if (r) {\n                    var i = 0;\n                    n.$observe(\"minlength\", function(t) {\n                      (i = N(t) || 0), r.$validate();\n                    }),\n                      (r.$validators.minlength = function(t, e) {\n                        return r.$isEmpty(e) || e.length >= i;\n                      });\n                  }\n                }\n              };\n            };\n          e.angular.bootstrap\n            ? e.console && console.log(\"WARNING: Tried to load AngularJS more than once.\")\n            : (!(function() {\n                var n;\n                if (!Dt) {\n                  var r = ft();\n                  (s = V(r) ? t : r ? e[r] : void 0) && s.fn.on\n                    ? ((u = s),\n                      O(s.fn, {\n                        scope: je.scope,\n                        isolateScope: je.isolateScope,\n                        controller: je.controller,\n                        injector: je.injector,\n                        inheritedData: je.inheritedData\n                      }))\n                    : (u = he),\n                    (n = u.cleanData),\n                    (u.cleanData = function(t) {\n                      for (var e, r, i = 0; null != (r = t[i]); i++)\n                        (e = (u._data(r) || {}).events) &&\n                          e.$destroy &&\n                          u(r).triggerHandler(\"$destroy\");\n                      n(t);\n                    }),\n                    (w.element = u),\n                    (Dt = !0);\n                }\n              })(),\n              (function(t) {\n                O(t, {\n                  errorHandlingConfig: r,\n                  bootstrap: Ot,\n                  copy: ut,\n                  extend: O,\n                  merge: j,\n                  equals: ct,\n                  element: u,\n                  forEach: C,\n                  injector: Xe,\n                  noop: D,\n                  bind: dt,\n                  toJson: gt,\n                  fromJson: mt,\n                  identity: I,\n                  isUndefined: V,\n                  isDefined: q,\n                  isString: H,\n                  isFunction: K,\n                  isObject: U,\n                  isNumber: B,\n                  isElement: rt,\n                  isArray: W,\n                  version: Jt,\n                  isDate: z,\n                  callbacks: { $$counter: 0 },\n                  getTestability: Nt,\n                  reloadWithDebugInfo: jt,\n                  $$minErr: o,\n                  $$csp: lt,\n                  $$encodeUriSegment: St,\n                  $$encodeUriQuery: Et,\n                  $$lowercase: h,\n                  $$stringify: Ut,\n                  $$uppercase: d\n                }),\n                  (c = (function(t) {\n                    var e = o(\"$injector\"),\n                      n = o(\"ng\");\n                    function r(t, e, n) {\n                      return t[e] || (t[e] = n());\n                    }\n                    var i = r(t, \"angular\", Object);\n                    return (\n                      (i.$$minErr = i.$$minErr || o),\n                      r(i, \"module\", function() {\n                        var t = {};\n                        return function(i, o, a) {\n                          var u = {};\n                          return (\n                            (function(t, e) {\n                              if (\"hasOwnProperty\" === t)\n                                throw n(\"badname\", \"hasOwnProperty is not a valid {0} name\", e);\n                            })(i, \"module\"),\n                            o && t.hasOwnProperty(i) && (t[i] = null),\n                            r(t, i, function() {\n                              if (!o)\n                                throw e(\n                                  \"nomod\",\n                                  \"Module '{0}' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.\",\n                                  i\n                                );\n                              var t = [],\n                                r = [],\n                                s = [],\n                                c = f(\"$injector\", \"invoke\", \"push\", r),\n                                l = {\n                                  _invokeQueue: t,\n                                  _configBlocks: r,\n                                  _runBlocks: s,\n                                  info: function(t) {\n                                    if (q(t)) {\n                                      if (!U(t))\n                                        throw n(\n                                          \"aobj\",\n                                          \"Argument '{0}' must be an object\",\n                                          \"value\"\n                                        );\n                                      return (u = t), this;\n                                    }\n                                    return u;\n                                  },\n                                  requires: o,\n                                  name: i,\n                                  provider: p(\"$provide\", \"provider\"),\n                                  factory: p(\"$provide\", \"factory\"),\n                                  service: p(\"$provide\", \"service\"),\n                                  value: f(\"$provide\", \"value\"),\n                                  constant: f(\"$provide\", \"constant\", \"unshift\"),\n                                  decorator: p(\"$provide\", \"decorator\", r),\n                                  animation: p(\"$animateProvider\", \"register\"),\n                                  filter: p(\"$filterProvider\", \"register\"),\n                                  controller: p(\"$controllerProvider\", \"register\"),\n                                  directive: p(\"$compileProvider\", \"directive\"),\n                                  component: p(\"$compileProvider\", \"component\"),\n                                  config: c,\n                                  run: function(t) {\n                                    return s.push(t), this;\n                                  }\n                                };\n                              return a && c(a), l;\n                              function f(e, n, r, i) {\n                                return (\n                                  i || (i = t),\n                                  function() {\n                                    return i[r || \"push\"]([e, n, arguments]), l;\n                                  }\n                                );\n                              }\n                              function p(e, n, r) {\n                                return (\n                                  r || (r = t),\n                                  function(t, o) {\n                                    return (\n                                      o && K(o) && (o.$$moduleName = i),\n                                      r.push([e, n, arguments]),\n                                      l\n                                    );\n                                  }\n                                );\n                              }\n                            })\n                          );\n                        };\n                      })\n                    );\n                  })(e))(\n                    \"ng\",\n                    [\"ngLocale\"],\n                    [\n                      \"$provide\",\n                      function(t) {\n                        t.provider({ $$sanitizeUri: zr }),\n                          t\n                            .provider(\"$compile\", gn)\n                            .directive({\n                              a: Ui,\n                              input: xo,\n                              textarea: xo,\n                              form: Gi,\n                              script: ma,\n                              select: wa,\n                              option: xa,\n                              ngBind: So,\n                              ngBindHtml: ko,\n                              ngBindTemplate: Eo,\n                              ngClass: Oo,\n                              ngClassEven: No,\n                              ngClassOdd: jo,\n                              ngCloak: Mo,\n                              ngController: Lo,\n                              ngForm: Ki,\n                              ngHide: la,\n                              ngIf: Po,\n                              ngInclude: Vo,\n                              ngInit: Uo,\n                              ngNonBindable: ea,\n                              ngPluralize: oa,\n                              ngRef: ua,\n                              ngRepeat: sa,\n                              ngShow: ca,\n                              ngStyle: fa,\n                              ngSwitch: pa,\n                              ngSwitchWhen: ha,\n                              ngSwitchDefault: da,\n                              ngOptions: ia,\n                              ngTransclude: ga,\n                              ngModel: Yo,\n                              ngList: Fo,\n                              ngChange: Ao,\n                              pattern: Ca,\n                              ngPattern: Ca,\n                              required: _a,\n                              ngRequired: _a,\n                              minlength: Ea,\n                              ngMinlength: Ea,\n                              maxlength: Sa,\n                              ngMaxlength: Sa,\n                              ngValue: Co,\n                              ngModelOptions: Qo\n                            })\n                            .directive({ ngInclude: qo })\n                            .directive(Fi)\n                            .directive(Do),\n                          t.provider({\n                            $anchorScroll: Qe,\n                            $animate: un,\n                            $animateCss: ln,\n                            $$animateJs: on,\n                            $$animateQueue: an,\n                            $$AnimateRunner: cn,\n                            $$animateAsyncRun: sn,\n                            $browser: fn,\n                            $cacheFactory: pn,\n                            $controller: Sn,\n                            $document: En,\n                            $$isDocumentHidden: kn,\n                            $exceptionHandler: An,\n                            $filter: di,\n                            $$forceReflow: Tn,\n                            $interpolate: Kn,\n                            $interval: Yn,\n                            $$intervalFactory: Zn,\n                            $http: Bn,\n                            $httpParamSerializer: Rn,\n                            $httpParamSerializerJQLike: Pn,\n                            $httpBackend: Wn,\n                            $xhrFactory: zn,\n                            $jsonpCallbacks: Xn,\n                            $location: vr,\n                            $log: gr,\n                            $parse: Ir,\n                            $rootScope: Br,\n                            $q: Rr,\n                            $$q: Pr,\n                            $sce: Xr,\n                            $sceDelegate: Zr,\n                            $sniffer: Qr,\n                            $$taskTrackerFactory: ti,\n                            $templateCache: hn,\n                            $templateRequest: ni,\n                            $$testability: ri,\n                            $timeout: oi,\n                            $window: fi,\n                            $$rAF: Hr,\n                            $$jqLite: Pe,\n                            $$Map: He,\n                            $$cookieReader: hi\n                          });\n                      }\n                    ]\n                  ).info({ angularVersion: \"1.7.3\" });\n              })(w),\n              w.module(\n                \"ngLocale\",\n                [],\n                [\n                  \"$provide\",\n                  function(t) {\n                    var e = \"one\",\n                      n = \"other\";\n                    t.value(\"$locale\", {\n                      DATETIME_FORMATS: {\n                        AMPMS: [\"AM\", \"PM\"],\n                        DAY: [\n                          \"Sunday\",\n                          \"Monday\",\n                          \"Tuesday\",\n                          \"Wednesday\",\n                          \"Thursday\",\n                          \"Friday\",\n                          \"Saturday\"\n                        ],\n                        ERANAMES: [\"Before Christ\", \"Anno Domini\"],\n                        ERAS: [\"BC\", \"AD\"],\n                        FIRSTDAYOFWEEK: 6,\n                        MONTH: [\n                          \"January\",\n                          \"February\",\n                          \"March\",\n                          \"April\",\n                          \"May\",\n                          \"June\",\n                          \"July\",\n                          \"August\",\n                          \"September\",\n                          \"October\",\n                          \"November\",\n                          \"December\"\n                        ],\n                        SHORTDAY: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n                        SHORTMONTH: [\n                          \"Jan\",\n                          \"Feb\",\n                          \"Mar\",\n                          \"Apr\",\n                          \"May\",\n                          \"Jun\",\n                          \"Jul\",\n                          \"Aug\",\n                          \"Sep\",\n                          \"Oct\",\n                          \"Nov\",\n                          \"Dec\"\n                        ],\n                        STANDALONEMONTH: [\n                          \"January\",\n                          \"February\",\n                          \"March\",\n                          \"April\",\n                          \"May\",\n                          \"June\",\n                          \"July\",\n                          \"August\",\n                          \"September\",\n                          \"October\",\n                          \"November\",\n                          \"December\"\n                        ],\n                        WEEKENDRANGE: [5, 6],\n                        fullDate: \"EEEE, MMMM d, y\",\n                        longDate: \"MMMM d, y\",\n                        medium: \"MMM d, y h:mm:ss a\",\n                        mediumDate: \"MMM d, y\",\n                        mediumTime: \"h:mm:ss a\",\n                        short: \"M/d/yy h:mm a\",\n                        shortDate: \"M/d/yy\",\n                        shortTime: \"h:mm a\"\n                      },\n                      NUMBER_FORMATS: {\n                        CURRENCY_SYM: \"$\",\n                        DECIMAL_SEP: \".\",\n                        GROUP_SEP: \",\",\n                        PATTERNS: [\n                          {\n                            gSize: 3,\n                            lgSize: 3,\n                            maxFrac: 3,\n                            minFrac: 0,\n                            minInt: 1,\n                            negPre: \"-\",\n                            negSuf: \"\",\n                            posPre: \"\",\n                            posSuf: \"\"\n                          },\n                          {\n                            gSize: 3,\n                            lgSize: 3,\n                            maxFrac: 2,\n                            minFrac: 2,\n                            minInt: 1,\n                            negPre: \"-¤\",\n                            negSuf: \"\",\n                            posPre: \"¤\",\n                            posSuf: \"\"\n                          }\n                        ]\n                      },\n                      id: \"en-us\",\n                      localeID: \"en_US\",\n                      pluralCat: function(t, r) {\n                        var i = 0 | t,\n                          o = (function(t, e) {\n                            var n = e;\n                            void 0 === n &&\n                              (n = Math.min(\n                                (function(t) {\n                                  var e = (t += \"\").indexOf(\".\");\n                                  return -1 == e ? 0 : t.length - e - 1;\n                                })(t),\n                                3\n                              ));\n                            var r = Math.pow(10, n);\n                            return { v: n, f: ((t * r) | 0) % r };\n                          })(t, r);\n                        return 1 == i && 0 == o.v ? e : n;\n                      }\n                    });\n                  }\n                ]\n              ),\n              u(function() {\n                Tt(e.document, Ot);\n              }));\n        })(window),\n          !window.angular.$$csp().noInlineStyle &&\n            window.angular\n              .element(document.head)\n              .prepend(\n                '<style type=\"text/css\">@charset \"UTF-8\";[ng\\\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style>'\n              );\n      }.call(this, n(1)));\n    },\n    31: function(t, e, n) {\n      var r;\n      /*!\n * angular-translate - v2.18.1 - 2018-05-19\n * \n * Copyright (c) 2018 The angular-translate team, Pascal Precht; Licensed MIT\n */ void 0 ===\n        (r = function() {\n          return (function() {\n            function t(t) {\n              \"use strict\";\n              var e = t.storageKey(),\n                n = t.storage(),\n                r = function() {\n                  var r = t.preferredLanguage();\n                  angular.isString(r) ? t.use(r) : n.put(e, t.use());\n                };\n              (r.displayName = \"fallbackFromIncorrectStorageValue\"),\n                n\n                  ? n.get(e)\n                    ? t.use(n.get(e)).catch(r)\n                    : r()\n                  : angular.isString(t.preferredLanguage()) && t.use(t.preferredLanguage());\n            }\n            function e(t, e, n, r) {\n              \"use strict\";\n              var i,\n                o,\n                a,\n                u,\n                s,\n                c,\n                l,\n                f,\n                p,\n                h,\n                d,\n                v,\n                g,\n                m,\n                $,\n                y,\n                b = {},\n                w = [],\n                x = t,\n                _ = [],\n                C = \"translate-cloak\",\n                S = !1,\n                E = !1,\n                k = \".\",\n                A = !1,\n                T = !1,\n                O = 0,\n                j = !0,\n                N = \"default\",\n                M = {\n                  default: function(t) {\n                    return (t || \"\").split(\"-\").join(\"_\");\n                  },\n                  java: function(t) {\n                    var e = (t || \"\").split(\"-\").join(\"_\"),\n                      n = e.split(\"_\");\n                    return n.length > 1 ? n[0].toLowerCase() + \"_\" + n[1].toUpperCase() : e;\n                  },\n                  bcp47: function(t) {\n                    var e = (t || \"\").split(\"_\").join(\"-\"),\n                      n = e.split(\"-\");\n                    switch (n.length) {\n                      case 1:\n                        n[0] = n[0].toLowerCase();\n                        break;\n                      case 2:\n                        (n[0] = n[0].toLowerCase()),\n                          4 === n[1].length\n                            ? (n[1] = n[1].charAt(0).toUpperCase() + n[1].slice(1).toLowerCase())\n                            : (n[1] = n[1].toUpperCase());\n                        break;\n                      case 3:\n                        (n[0] = n[0].toLowerCase()),\n                          (n[1] = n[1].charAt(0).toUpperCase() + n[1].slice(1).toLowerCase()),\n                          (n[2] = n[2].toUpperCase());\n                        break;\n                      default:\n                        return e;\n                    }\n                    return n.join(\"-\");\n                  },\n                  \"iso639-1\": function(t) {\n                    var e = (t || \"\").split(\"_\").join(\"-\"),\n                      n = e.split(\"-\");\n                    return n[0].toLowerCase();\n                  }\n                },\n                L = function() {\n                  if (angular.isFunction(r.getLocale)) return r.getLocale();\n                  var t,\n                    n,\n                    i = e.$get().navigator,\n                    o = [\"language\", \"browserLanguage\", \"systemLanguage\", \"userLanguage\"];\n                  if (angular.isArray(i.languages))\n                    for (t = 0; t < i.languages.length; t++)\n                      if ((n = i.languages[t]) && n.length) return n;\n                  for (t = 0; t < o.length; t++) if ((n = i[o[t]]) && n.length) return n;\n                  return null;\n                };\n              L.displayName = \"angular-translate/service: getFirstBrowserLanguage\";\n              var D = function() {\n                var t = L() || \"\";\n                return M[N] && (t = M[N](t)), t;\n              };\n              D.displayName = \"angular-translate/service: getLocale\";\n              var I = function(t, e) {\n                  for (var n = 0, r = t.length; n < r; n++) if (t[n] === e) return n;\n                  return -1;\n                },\n                R = function() {\n                  return this.toString().replace(/^\\s+|\\s+$/g, \"\");\n                },\n                P = function(t) {\n                  return angular.isString(t) ? t.toLowerCase() : t;\n                },\n                V = function(t) {\n                  if (t) {\n                    for (var e, n = [], r = P(t), i = 0, a = w.length; i < a; i++) n.push(P(w[i]));\n                    if ((i = I(n, r)) > -1) return w[i];\n                    if (o)\n                      for (var u in o)\n                        if (o.hasOwnProperty(u)) {\n                          var s = !1,\n                            c = Object.prototype.hasOwnProperty.call(o, u) && P(u) === P(t);\n                          if (\n                            (\"*\" === u.slice(-1) &&\n                              (s = P(u.slice(0, -1)) === P(t.slice(0, u.length - 1))),\n                            (c || s) && ((e = o[u]), I(n, P(e)) > -1))\n                          )\n                            return e;\n                        }\n                    var l = t.split(\"_\");\n                    return l.length > 1 && I(n, P(l[0])) > -1 ? l[0] : void 0;\n                  }\n                },\n                q = function(t, e) {\n                  if (!t && !e) return b;\n                  if (t && !e) {\n                    if (angular.isString(t)) return b[t];\n                  } else angular.isObject(b[t]) || (b[t] = {}), angular.extend(b[t], U(e));\n                  return this;\n                };\n              (this.translations = q),\n                (this.cloakClassName = function(t) {\n                  return t ? ((C = t), this) : C;\n                }),\n                (this.nestedObjectDelimeter = function(t) {\n                  return t ? ((k = t), this) : k;\n                });\n              var U = function(t, e, n, r) {\n                var i, o, a, u;\n                for (i in (e || (e = []), n || (n = {}), t))\n                  Object.prototype.hasOwnProperty.call(t, i) &&\n                    ((u = t[i]),\n                    angular.isObject(u)\n                      ? U(u, e.concat(i), n, i)\n                      : ((o = e.length ? \"\" + e.join(k) + k + i : i),\n                        e.length && i === r && ((a = \"\" + e.join(k)), (n[a] = \"@:\" + o)),\n                        (n[o] = u)));\n                return n;\n              };\n              (U.displayName = \"flatObject\"),\n                (this.addInterpolation = function(t) {\n                  return _.push(t), this;\n                }),\n                (this.useMessageFormatInterpolation = function() {\n                  return this.useInterpolation(\"$translateMessageFormatInterpolation\");\n                }),\n                (this.useInterpolation = function(t) {\n                  return (h = t), this;\n                }),\n                (this.useSanitizeValueStrategy = function(t) {\n                  return n.useStrategy(t), this;\n                }),\n                (this.preferredLanguage = function(t) {\n                  return t ? (F(t), this) : i;\n                });\n              var F = function(t) {\n                return t && (i = t), i;\n              };\n              (this.translationNotFoundIndicator = function(t) {\n                return (\n                  this.translationNotFoundIndicatorLeft(t),\n                  this.translationNotFoundIndicatorRight(t),\n                  this\n                );\n              }),\n                (this.translationNotFoundIndicatorLeft = function(t) {\n                  return t ? ((g = t), this) : g;\n                }),\n                (this.translationNotFoundIndicatorRight = function(t) {\n                  return t ? ((m = t), this) : m;\n                }),\n                (this.fallbackLanguage = function(t) {\n                  return H(t), this;\n                });\n              var H = function(t) {\n                return t\n                  ? (angular.isString(t)\n                      ? ((u = !0), (a = [t]))\n                      : angular.isArray(t) && ((u = !1), (a = t)),\n                    angular.isString(i) && I(a, i) < 0 && a.push(i),\n                    this)\n                  : u\n                    ? a[0]\n                    : a;\n              };\n              (this.use = function(t) {\n                if (t) {\n                  if (!b[t] && !d)\n                    throw new Error(\n                      \"$translateProvider couldn't find translationTable for langKey: '\" + t + \"'\"\n                    );\n                  return (s = t), this;\n                }\n                return s;\n              }),\n                (this.resolveClientLocale = function() {\n                  return D();\n                });\n              var B = function(t) {\n                return t ? ((x = t), this) : f ? f + x : x;\n              };\n              (this.storageKey = B),\n                (this.useUrlLoader = function(t, e) {\n                  return this.useLoader(\"$translateUrlLoader\", angular.extend({ url: t }, e));\n                }),\n                (this.useStaticFilesLoader = function(t) {\n                  return this.useLoader(\"$translateStaticFilesLoader\", t);\n                }),\n                (this.useLoader = function(t, e) {\n                  return (d = t), (v = e || {}), this;\n                }),\n                (this.useLocalStorage = function() {\n                  return this.useStorage(\"$translateLocalStorage\");\n                }),\n                (this.useCookieStorage = function() {\n                  return this.useStorage(\"$translateCookieStorage\");\n                }),\n                (this.useStorage = function(t) {\n                  return (l = t), this;\n                }),\n                (this.storagePrefix = function(t) {\n                  return t ? ((f = t), this) : t;\n                }),\n                (this.useMissingTranslationHandlerLog = function() {\n                  return this.useMissingTranslationHandler(\n                    \"$translateMissingTranslationHandlerLog\"\n                  );\n                }),\n                (this.useMissingTranslationHandler = function(t) {\n                  return (p = t), this;\n                }),\n                (this.usePostCompiling = function(t) {\n                  return (S = !!t), this;\n                }),\n                (this.forceAsyncReload = function(t) {\n                  return (E = !!t), this;\n                }),\n                (this.uniformLanguageTag = function(t) {\n                  return (\n                    t ? angular.isString(t) && (t = { standard: t }) : (t = {}),\n                    (N = t.standard),\n                    this\n                  );\n                }),\n                (this.determinePreferredLanguage = function(t) {\n                  var e = t && angular.isFunction(t) ? t() : D();\n                  return (i = (w.length && V(e)) || e), this;\n                }),\n                (this.registerAvailableLanguageKeys = function(t, e) {\n                  return t ? ((w = t), e && (o = e), this) : w;\n                }),\n                (this.useLoaderCache = function(t) {\n                  return (\n                    !1 === t\n                      ? ($ = void 0)\n                      : !0 === t\n                        ? ($ = !0)\n                        : void 0 === t\n                          ? ($ = \"$translationCache\")\n                          : t && ($ = t),\n                    this\n                  );\n                }),\n                (this.directivePriority = function(t) {\n                  return void 0 === t ? O : ((O = t), this);\n                }),\n                (this.statefulFilter = function(t) {\n                  return void 0 === t ? j : ((j = t), this);\n                }),\n                (this.postProcess = function(t) {\n                  return (y = t || void 0), this;\n                }),\n                (this.keepContent = function(t) {\n                  return (T = !!t), this;\n                }),\n                (this.$get = [\n                  \"$log\",\n                  \"$injector\",\n                  \"$rootScope\",\n                  \"$q\",\n                  function(t, e, n, r) {\n                    var o,\n                      f,\n                      N,\n                      M = e.get(h || \"$translateDefaultInterpolation\"),\n                      L = !1,\n                      P = {},\n                      z = {},\n                      W = function(t, e, n, u, c, p) {\n                        !s && i && (s = i);\n                        var h = c && c !== s ? V(c) || c : s;\n                        if ((c && ot(c), angular.isArray(t)))\n                          return (function(t) {\n                            for (\n                              var i = {},\n                                o = [],\n                                a = function(t) {\n                                  var o = r.defer(),\n                                    a = function(e) {\n                                      (i[t] = e), o.resolve([t, e]);\n                                    };\n                                  return W(t, e, n, u, c, p).then(a, a), o.promise;\n                                },\n                                s = 0,\n                                l = t.length;\n                              s < l;\n                              s++\n                            )\n                              o.push(a(t[s]));\n                            return r.all(o).then(function() {\n                              return i;\n                            });\n                          })(t);\n                        var d = r.defer();\n                        t && (t = R.apply(t));\n                        var v = (function() {\n                          var t = z[h] || z[i];\n                          if (((f = 0), l && !t)) {\n                            var e = o.get(x);\n                            if (((t = z[e]), a && a.length)) {\n                              var n = I(a, e);\n                              (f = 0 === n ? 1 : 0), I(a, i) < 0 && a.push(i);\n                            }\n                          }\n                          return t;\n                        })();\n                        if (v) {\n                          var g = function() {\n                            c || (h = s), nt(t, e, n, u, h, p).then(d.resolve, d.reject);\n                          };\n                          (g.displayName = \"promiseResolved\"), v.finally(g).catch(angular.noop);\n                        } else nt(t, e, n, u, h, p).then(d.resolve, d.reject);\n                        return d.promise;\n                      },\n                      G = function(t) {\n                        return g && (t = [g, t].join(\" \")), m && (t = [t, m].join(\" \")), t;\n                      },\n                      K = function(t) {\n                        (s = t),\n                          l && o.put(W.storageKey(), s),\n                          n.$emit(\"$translateChangeSuccess\", { language: t }),\n                          M.setLocale(s);\n                        var e = function(t, e) {\n                          P[e].setLocale(s);\n                        };\n                        (e.displayName = \"eachInterpolatorLocaleSetter\"),\n                          angular.forEach(P, e),\n                          n.$emit(\"$translateChangeEnd\", { language: t });\n                      },\n                      J = function(t) {\n                        if (!t) throw \"No language key specified for loading.\";\n                        var i = r.defer();\n                        n.$emit(\"$translateLoadingStart\", { language: t }), (L = !0);\n                        var o = $;\n                        \"string\" == typeof o && (o = e.get(o));\n                        var a = angular.extend({}, v, {\n                            key: t,\n                            $http: angular.extend({}, { cache: o }, v.$http)\n                          }),\n                          u = function(e) {\n                            var r = {};\n                            n.$emit(\"$translateLoadingSuccess\", { language: t }),\n                              angular.isArray(e)\n                                ? angular.forEach(e, function(t) {\n                                    angular.extend(r, U(t));\n                                  })\n                                : angular.extend(r, U(e)),\n                              (L = !1),\n                              i.resolve({ key: t, table: r }),\n                              n.$emit(\"$translateLoadingEnd\", { language: t });\n                          };\n                        u.displayName = \"onLoaderSuccess\";\n                        var s = function(t) {\n                          n.$emit(\"$translateLoadingError\", { language: t }),\n                            i.reject(t),\n                            n.$emit(\"$translateLoadingEnd\", { language: t });\n                        };\n                        return (\n                          (s.displayName = \"onLoaderError\"),\n                          e\n                            .get(d)(a)\n                            .then(u, s),\n                          i.promise\n                        );\n                      };\n                    if (l && (!(o = e.get(l)).get || !o.put))\n                      throw new Error(\n                        \"Couldn't use storage '\" + l + \"', missing get() or put() method!\"\n                      );\n                    if (_.length) {\n                      var Y = function(t) {\n                        var n = e.get(t);\n                        n.setLocale(i || s), (P[n.getInterpolationIdentifier()] = n);\n                      };\n                      (Y.displayName = \"interpolationFactoryAdder\"), angular.forEach(_, Y);\n                    }\n                    var Z = function(t, e, n, i, o) {\n                        var a = r.defer(),\n                          u = function(r) {\n                            if (Object.prototype.hasOwnProperty.call(r, e) && null !== r[e]) {\n                              i.setLocale(t);\n                              var u = r[e];\n                              if (\"@:\" === u.substr(0, 2))\n                                Z(t, u.substr(2), n, i, o).then(a.resolve, a.reject);\n                              else {\n                                var c = i.interpolate(r[e], n, \"service\", o, e);\n                                (c = it(e, r[e], c, n, t)), a.resolve(c);\n                              }\n                              i.setLocale(s);\n                            } else a.reject();\n                          };\n                        return (\n                          (u.displayName = \"fallbackTranslationResolver\"),\n                          (function(t) {\n                            var e = r.defer();\n                            if (Object.prototype.hasOwnProperty.call(b, t)) e.resolve(b[t]);\n                            else if (z[t]) {\n                              var n = function(t) {\n                                q(t.key, t.table), e.resolve(t.table);\n                              };\n                              (n.displayName = \"translationTableResolver\"), z[t].then(n, e.reject);\n                            } else e.reject();\n                            return e.promise;\n                          })(t).then(u, a.reject),\n                          a.promise\n                        );\n                      },\n                      X = function(t, e, n, r, i) {\n                        var o,\n                          a = b[t];\n                        if (a && Object.prototype.hasOwnProperty.call(a, e) && null !== a[e]) {\n                          if (\n                            (r.setLocale(t),\n                            (o = r.interpolate(a[e], n, \"filter\", i, e)),\n                            (o = it(e, a[e], o, n, t, i)),\n                            !angular.isString(o) && angular.isFunction(o.$$unwrapTrustedValue))\n                          ) {\n                            var u = o.$$unwrapTrustedValue();\n                            if (\"@:\" === u.substr(0, 2)) return X(t, u.substr(2), n, r, i);\n                          } else if (\"@:\" === o.substr(0, 2)) return X(t, o.substr(2), n, r, i);\n                          r.setLocale(s);\n                        }\n                        return o;\n                      },\n                      Q = function(t, n, r, i) {\n                        return p ? e.get(p)(t, s, n, r, i) : t;\n                      },\n                      tt = function(t, e, n, i, o, u) {\n                        var s = r.defer();\n                        if (t < a.length) {\n                          var c = a[t];\n                          Z(c, e, n, i, u).then(\n                            function(t) {\n                              s.resolve(t);\n                            },\n                            function() {\n                              return tt(t + 1, e, n, i, o, u).then(s.resolve, s.reject);\n                            }\n                          );\n                        } else if (o) s.resolve(o);\n                        else {\n                          var l = Q(e, n, o);\n                          p && l ? s.resolve(l) : s.reject(G(e));\n                        }\n                        return s.promise;\n                      },\n                      et = function(t, e, n, r, i) {\n                        var o;\n                        if (t < a.length) {\n                          var u = a[t];\n                          (o = X(u, e, n, r, i)) || \"\" === o || (o = et(t + 1, e, n, r));\n                        }\n                        return o;\n                      },\n                      nt = function(t, e, n, i, o, u) {\n                        var s = r.defer(),\n                          c = o ? b[o] : b,\n                          l = n ? P[n] : M;\n                        if (c && Object.prototype.hasOwnProperty.call(c, t) && null !== c[t]) {\n                          var h = c[t];\n                          if (\"@:\" === h.substr(0, 2))\n                            W(h.substr(2), e, n, i, o, u).then(s.resolve, s.reject);\n                          else {\n                            var d = l.interpolate(h, e, \"service\", u, t);\n                            (d = it(t, h, d, e, o)), s.resolve(d);\n                          }\n                        } else {\n                          var v;\n                          p && !L && (v = Q(t, e, i)),\n                            o && a && a.length\n                              ? (function(t, e, n, r, i) {\n                                  return tt(N > 0 ? N : f, t, e, n, r, i);\n                                })(t, e, l, i, u).then(\n                                  function(t) {\n                                    s.resolve(t);\n                                  },\n                                  function(t) {\n                                    s.reject(G(t));\n                                  }\n                                )\n                              : p && !L && v\n                                ? i\n                                  ? s.resolve(i)\n                                  : s.resolve(v)\n                                : i\n                                  ? s.resolve(i)\n                                  : s.reject(G(t));\n                        }\n                        return s.promise;\n                      },\n                      rt = function(t, e, n, r, i) {\n                        var o,\n                          u = r ? b[r] : b,\n                          s = M;\n                        if (\n                          (P && Object.prototype.hasOwnProperty.call(P, n) && (s = P[n]),\n                          u && Object.prototype.hasOwnProperty.call(u, t) && null !== u[t])\n                        ) {\n                          var c = u[t];\n                          \"@:\" === c.substr(0, 2)\n                            ? (o = rt(c.substr(2), e, n, r, i))\n                            : ((o = s.interpolate(c, e, \"filter\", i, t)),\n                              (o = it(t, c, o, e, r, i)));\n                        } else {\n                          var l;\n                          p && !L && (l = Q(t, e, i)),\n                            r && a && a.length\n                              ? ((f = 0),\n                                (o = (function(t, e, n, r) {\n                                  return et(N > 0 ? N : f, t, e, n, r);\n                                })(t, e, s, i)))\n                              : (o = p && !L && l ? l : G(t));\n                        }\n                        return o;\n                      },\n                      it = function(t, n, r, i, o, a) {\n                        var u = y;\n                        return u && (\"string\" == typeof u && (u = e.get(u)), u)\n                          ? u(t, n, r, i, o, a)\n                          : r;\n                      },\n                      ot = function(t) {\n                        b[t] ||\n                          !d ||\n                          z[t] ||\n                          (z[t] = J(t).then(function(t) {\n                            return q(t.key, t.table), t;\n                          }));\n                      };\n                    (W.preferredLanguage = function(t) {\n                      return t && F(t), i;\n                    }),\n                      (W.cloakClassName = function() {\n                        return C;\n                      }),\n                      (W.nestedObjectDelimeter = function() {\n                        return k;\n                      }),\n                      (W.fallbackLanguage = function(t) {\n                        if (void 0 !== t && null !== t) {\n                          if ((H(t), d && a && a.length))\n                            for (var e = 0, n = a.length; e < n; e++)\n                              z[a[e]] || (z[a[e]] = J(a[e]));\n                          W.use(W.use());\n                        }\n                        return u ? a[0] : a;\n                      }),\n                      (W.useFallbackLanguage = function(t) {\n                        if (void 0 !== t && null !== t)\n                          if (t) {\n                            var e = I(a, t);\n                            e > -1 && (N = e);\n                          } else N = 0;\n                      }),\n                      (W.proposedLanguage = function() {\n                        return c;\n                      }),\n                      (W.storage = function() {\n                        return o;\n                      }),\n                      (W.negotiateLocale = V),\n                      (W.use = function(t) {\n                        if (!t) return s;\n                        var e = r.defer();\n                        e.promise.then(null, angular.noop),\n                          n.$emit(\"$translateChangeStart\", { language: t });\n                        var i = V(t);\n                        return w.length > 0 && !i\n                          ? r.reject(t)\n                          : (i && (t = i),\n                            (c = t),\n                            (!E && b[t]) || !d || z[t]\n                              ? z[t]\n                                ? z[t].then(\n                                    function(t) {\n                                      return c === t.key && K(t.key), e.resolve(t.key), t;\n                                    },\n                                    function(t) {\n                                      return !s && a && a.length > 0 && a[0] !== t\n                                        ? W.use(a[0]).then(e.resolve, e.reject)\n                                        : e.reject(t);\n                                    }\n                                  )\n                                : (e.resolve(t), K(t))\n                              : ((z[t] = J(t).then(\n                                  function(n) {\n                                    return (\n                                      q(n.key, n.table), e.resolve(n.key), c === t && K(n.key), n\n                                    );\n                                  },\n                                  function(t) {\n                                    return (\n                                      n.$emit(\"$translateChangeError\", { language: t }),\n                                      e.reject(t),\n                                      n.$emit(\"$translateChangeEnd\", { language: t }),\n                                      r.reject(t)\n                                    );\n                                  }\n                                )),\n                                z[t]\n                                  .finally(function() {\n                                    !(function(t) {\n                                      c === t && (c = void 0), (z[t] = void 0);\n                                    })(t);\n                                  })\n                                  .catch(angular.noop)),\n                            e.promise);\n                      }),\n                      (W.resolveClientLocale = function() {\n                        return D();\n                      }),\n                      (W.storageKey = function() {\n                        return B();\n                      }),\n                      (W.isPostCompilingEnabled = function() {\n                        return S;\n                      }),\n                      (W.isForceAsyncReloadEnabled = function() {\n                        return E;\n                      }),\n                      (W.isKeepContent = function() {\n                        return T;\n                      }),\n                      (W.refresh = function(t) {\n                        if (!d)\n                          throw new Error(\n                            \"Couldn't refresh translation table, no loader registered!\"\n                          );\n                        n.$emit(\"$translateRefreshStart\", { language: t });\n                        var e = r.defer(),\n                          i = {};\n                        function o(t) {\n                          var e = J(t);\n                          return (\n                            (z[t] = e),\n                            e.then(function(e) {\n                              (b[t] = {}), q(t, e.table), (i[t] = !0);\n                            }, angular.noop),\n                            e\n                          );\n                        }\n                        if (\n                          (e.promise\n                            .then(function() {\n                              for (var t in b) b.hasOwnProperty(t) && (t in i || delete b[t]);\n                              s && K(s);\n                            }, angular.noop)\n                            .finally(function() {\n                              n.$emit(\"$translateRefreshEnd\", { language: t });\n                            }),\n                          t)\n                        )\n                          b[t] ? o(t).then(e.resolve, e.reject) : e.reject();\n                        else {\n                          var u = (a && a.slice()) || [];\n                          s && -1 === u.indexOf(s) && u.push(s),\n                            r.all(u.map(o)).then(e.resolve, e.reject);\n                        }\n                        return e.promise;\n                      }),\n                      (W.instant = function(t, e, n, r, o) {\n                        var u = r && r !== s ? V(r) || r : s;\n                        if (null === t || angular.isUndefined(t)) return t;\n                        if ((r && ot(r), angular.isArray(t))) {\n                          for (var c = {}, l = 0, f = t.length; l < f; l++)\n                            c[t[l]] = W.instant(t[l], e, n, r, o);\n                          return c;\n                        }\n                        if (angular.isString(t) && t.length < 1) return t;\n                        t && (t = R.apply(t));\n                        var h,\n                          d,\n                          v = [];\n                        i && v.push(i), u && v.push(u), a && a.length && (v = v.concat(a));\n                        for (var $ = 0, y = v.length; $ < y; $++) {\n                          var w = v[$];\n                          if ((b[w] && void 0 !== b[w][t] && (h = rt(t, e, n, u, o)), void 0 !== h))\n                            break;\n                        }\n                        return (\n                          h ||\n                            \"\" === h ||\n                            (g || m\n                              ? (h = G(t))\n                              : ((h = M.interpolate(t, e, \"filter\", o)),\n                                p && !L && (d = Q(t, e, o)),\n                                p && !L && d && (h = d))),\n                          h\n                        );\n                      }),\n                      (W.versionInfo = function() {\n                        return \"2.18.1\";\n                      }),\n                      (W.loaderCache = function() {\n                        return $;\n                      }),\n                      (W.directivePriority = function() {\n                        return O;\n                      }),\n                      (W.statefulFilter = function() {\n                        return j;\n                      }),\n                      (W.isReady = function() {\n                        return A;\n                      });\n                    var at = r.defer();\n                    at.promise.then(function() {\n                      A = !0;\n                    }),\n                      (W.onReady = function(t) {\n                        var e = r.defer();\n                        return (\n                          angular.isFunction(t) && e.promise.then(t),\n                          A ? e.resolve() : at.promise.then(e.resolve),\n                          e.promise\n                        );\n                      }),\n                      (W.getAvailableLanguageKeys = function() {\n                        return w.length > 0 ? w : null;\n                      }),\n                      (W.getTranslationTable = function(t) {\n                        return (t = t || W.use()) && b[t] ? angular.copy(b[t]) : null;\n                      });\n                    var ut = n.$on(\"$translateReady\", function() {\n                        at.resolve(), ut(), (ut = null);\n                      }),\n                      st = n.$on(\"$translateChangeEnd\", function() {\n                        at.resolve(), st(), (st = null);\n                      });\n                    if (d) {\n                      if ((angular.equals(b, {}) && W.use() && W.use(W.use()), a && a.length))\n                        for (\n                          var ct = function(t) {\n                              return (\n                                q(t.key, t.table),\n                                n.$emit(\"$translateChangeEnd\", { language: t.key }),\n                                t\n                              );\n                            },\n                            lt = 0,\n                            ft = a.length;\n                          lt < ft;\n                          lt++\n                        ) {\n                          var pt = a[lt];\n                          (!E && b[pt]) || (z[pt] = J(pt).then(ct));\n                        }\n                    } else n.$emit(\"$translateReady\", { language: W.use() });\n                    return W;\n                  }\n                ]);\n            }\n            function n(t, e) {\n              \"use strict\";\n              var n = {\n                setLocale: function(t) {},\n                getInterpolationIdentifier: function() {\n                  return \"default\";\n                },\n                useSanitizeValueStrategy: function(t) {\n                  return e.useStrategy(t), this;\n                },\n                interpolate: function(n, r, i, o, a) {\n                  var u;\n                  return (\n                    (r = r || {}),\n                    (r = e.sanitize(r, \"params\", o, i)),\n                    angular.isNumber(n)\n                      ? (u = \"\" + n)\n                      : angular.isString(n)\n                        ? ((u = t(n)(r)), (u = e.sanitize(u, \"text\", o, i)))\n                        : (u = \"\"),\n                    u\n                  );\n                }\n              };\n              return n;\n            }\n            function r(t, e, n, r, i) {\n              \"use strict\";\n              var o = function(t) {\n                return angular.isString(t) ? t.toLowerCase() : t;\n              };\n              return {\n                restrict: \"AE\",\n                scope: !0,\n                priority: t.directivePriority(),\n                compile: function(a, u) {\n                  var s = u.translateValues ? u.translateValues : void 0,\n                    c = u.translateInterpolation ? u.translateInterpolation : void 0,\n                    l = u.translateSanitizeStrategy ? u.translateSanitizeStrategy : void 0,\n                    f = a[0].outerHTML.match(/translate-value-+/i),\n                    p = \"^(.*)(\" + e.startSymbol() + \".*\" + e.endSymbol() + \")(.*)\",\n                    h = \"^(.*)\" + e.startSymbol() + \"(.*)\" + e.endSymbol() + \"(.*)\";\n                  return function(a, d, v) {\n                    (a.interpolateParams = {}),\n                      (a.preText = \"\"),\n                      (a.postText = \"\"),\n                      (a.translateNamespace = (function t(e) {\n                        return e.translateNamespace\n                          ? e.translateNamespace\n                          : e.$parent\n                            ? t(e.$parent)\n                            : void 0;\n                      })(a));\n                    var g = {},\n                      m = function(t) {\n                        if (\n                          (angular.isFunction(m._unwatchOld) &&\n                            (m._unwatchOld(), (m._unwatchOld = void 0)),\n                          angular.equals(t, \"\") || !angular.isDefined(t))\n                        ) {\n                          var n = function() {\n                              return this.toString().replace(/^\\s+|\\s+$/g, \"\");\n                            }.apply(d.text()),\n                            r = n.match(p);\n                          if (angular.isArray(r)) {\n                            (a.preText = r[1]),\n                              (a.postText = r[3]),\n                              (g.translate = e(r[2])(a.$parent));\n                            var i = n.match(h);\n                            angular.isArray(i) &&\n                              i[2] &&\n                              i[2].length &&\n                              (m._unwatchOld = a.$watch(i[2], function(t) {\n                                (g.translate = t), _();\n                              }));\n                          } else g.translate = n || void 0;\n                        } else g.translate = t;\n                        _();\n                      },\n                      $ = function(t) {\n                        v.$observe(t, function(e) {\n                          (g[t] = e), _();\n                        });\n                      };\n                    !(function(t, e, n) {\n                      if (\n                        (e.translateValues && angular.extend(t, r(e.translateValues)(a.$parent)), f)\n                      )\n                        for (var i in n)\n                          if (\n                            Object.prototype.hasOwnProperty.call(e, i) &&\n                            \"translateValue\" === i.substr(0, 14) &&\n                            \"translateValues\" !== i\n                          ) {\n                            var u = o(i.substr(14, 1)) + i.substr(15);\n                            t[u] = n[i];\n                          }\n                    })(a.interpolateParams, v, u);\n                    var y = !0;\n                    for (var b in (v.$observe(\"translate\", function(t) {\n                      void 0 === t ? m(\"\") : (\"\" === t && y) || ((g.translate = t), _()), (y = !1);\n                    }),\n                    v))\n                      v.hasOwnProperty(b) &&\n                        \"translateAttr\" === b.substr(0, 13) &&\n                        b.length > 13 &&\n                        $(b);\n                    if (\n                      (v.$observe(\"translateDefault\", function(t) {\n                        (a.defaultText = t), _();\n                      }),\n                      l &&\n                        v.$observe(\"translateSanitizeStrategy\", function(t) {\n                          (a.sanitizeStrategy = r(t)(a.$parent)), _();\n                        }),\n                      s &&\n                        v.$observe(\"translateValues\", function(t) {\n                          t &&\n                            a.$parent.$watch(function() {\n                              angular.extend(a.interpolateParams, r(t)(a.$parent));\n                            });\n                        }),\n                      f)\n                    ) {\n                      var w = function(t) {\n                        v.$observe(t, function(e) {\n                          var n = o(t.substr(14, 1)) + t.substr(15);\n                          a.interpolateParams[n] = e;\n                        });\n                      };\n                      for (var x in v)\n                        Object.prototype.hasOwnProperty.call(v, x) &&\n                          \"translateValue\" === x.substr(0, 14) &&\n                          \"translateValues\" !== x &&\n                          w(x);\n                    }\n                    var _ = function() {\n                        for (var t in g)\n                          g.hasOwnProperty(t) &&\n                            void 0 !== g[t] &&\n                            C(t, g[t], a, a.interpolateParams, a.defaultText, a.translateNamespace);\n                      },\n                      C = function(e, n, r, i, o, a) {\n                        n\n                          ? (a && \".\" === n.charAt(0) && (n = a + n),\n                            t(n, i, c, o, r.translateLanguage, r.sanitizeStrategy).then(\n                              function(t) {\n                                S(t, r, !0, e);\n                              },\n                              function(t) {\n                                S(t, r, !1, e);\n                              }\n                            ))\n                          : S(n, r, !1, e);\n                      },\n                      S = function(e, r, i, o) {\n                        if (\n                          (i || (void 0 !== r.defaultText && (e = r.defaultText)),\n                          \"translate\" === o)\n                        ) {\n                          (i || (!i && !t.isKeepContent() && void 0 === v.translateKeepContent)) &&\n                            d.empty().append(r.preText + e + r.postText);\n                          var a = t.isPostCompilingEnabled(),\n                            s = void 0 !== u.translateCompile,\n                            c = s && \"false\" !== u.translateCompile;\n                          ((a && !s) || c) && n(d.contents())(r);\n                        } else {\n                          var l = v.$attr[o];\n                          \"data-\" === l.substr(0, 5) && (l = l.substr(5)),\n                            (l = l.substr(15)),\n                            d.attr(l, e);\n                        }\n                      };\n                    (s || f || v.translateDefault) && a.$watch(\"interpolateParams\", _, !0),\n                      a.$on(\"translateLanguageChanged\", _);\n                    var E = i.$on(\"$translateChangeSuccess\", _);\n                    d.text().length\n                      ? v.translate\n                        ? m(v.translate)\n                        : m(\"\")\n                      : v.translate && m(v.translate),\n                      _(),\n                      a.$on(\"$destroy\", E);\n                  };\n                }\n              };\n            }\n            function i(t, e) {\n              \"use strict\";\n              return {\n                restrict: \"A\",\n                priority: t.directivePriority(),\n                link: function(n, r, i) {\n                  var a,\n                    u,\n                    s,\n                    c = {},\n                    l = function() {\n                      angular.forEach(a, function(e, o) {\n                        e &&\n                          ((c[o] = !0),\n                          n.translateNamespace &&\n                            \".\" === e.charAt(0) &&\n                            (e = n.translateNamespace + e),\n                          t(e, u, i.translateInterpolation, void 0, n.translateLanguage, s).then(\n                            function(t) {\n                              r.attr(o, t);\n                            },\n                            function(t) {\n                              r.attr(o, t);\n                            }\n                          ));\n                      }),\n                        angular.forEach(c, function(t, e) {\n                          a[e] || (r.removeAttr(e), delete c[e]);\n                        });\n                    };\n                  o(\n                    n,\n                    i.translateAttr,\n                    function(t) {\n                      a = t;\n                    },\n                    l\n                  ),\n                    o(\n                      n,\n                      i.translateValues,\n                      function(t) {\n                        u = t;\n                      },\n                      l\n                    ),\n                    o(\n                      n,\n                      i.translateSanitizeStrategy,\n                      function(t) {\n                        s = t;\n                      },\n                      l\n                    ),\n                    i.translateValues && n.$watch(i.translateValues, l, !0),\n                    n.$on(\"translateLanguageChanged\", l);\n                  var f = e.$on(\"$translateChangeSuccess\", l);\n                  l(), n.$on(\"$destroy\", f);\n                }\n              };\n            }\n            function o(t, e, n, r) {\n              \"use strict\";\n              e &&\n                (\"::\" === e.substr(0, 2)\n                  ? (e = e.substr(2))\n                  : t.$watch(\n                      e,\n                      function(t) {\n                        n(t), r();\n                      },\n                      !0\n                    ),\n                n(t.$eval(e)));\n            }\n            function a(t, e) {\n              \"use strict\";\n              return {\n                compile: function(n) {\n                  var r = function(e) {\n                    e.addClass(t.cloakClassName());\n                  };\n                  return (\n                    r(n),\n                    function(n, i, o) {\n                      var a = function(e) {\n                          e.removeClass(t.cloakClassName());\n                        }.bind(this, i),\n                        u = r.bind(this, i);\n                      o.translateCloak && o.translateCloak.length\n                        ? (o.$observe(\"translateCloak\", function(e) {\n                            t(e).then(a, u);\n                          }),\n                          e.$on(\"$translateChangeSuccess\", function() {\n                            t(o.translateCloak).then(a, u);\n                          }))\n                        : t.onReady(a);\n                    }\n                  );\n                }\n              };\n            }\n            function u() {\n              \"use strict\";\n              return {\n                restrict: \"A\",\n                scope: !0,\n                compile: function() {\n                  return {\n                    pre: function(t, e, n) {\n                      (t.translateNamespace = (function t(e) {\n                        return e.translateNamespace\n                          ? e.translateNamespace\n                          : e.$parent\n                            ? t(e.$parent)\n                            : void 0;\n                      })(t)),\n                        t.translateNamespace && \".\" === n.translateNamespace.charAt(0)\n                          ? (t.translateNamespace += n.translateNamespace)\n                          : (t.translateNamespace = n.translateNamespace);\n                    }\n                  };\n                }\n              };\n            }\n            function s() {\n              \"use strict\";\n              return {\n                restrict: \"A\",\n                scope: !0,\n                compile: function() {\n                  return function(t, e, n) {\n                    n.$observe(\"translateLanguage\", function(e) {\n                      t.translateLanguage = e;\n                    }),\n                      t.$watch(\"translateLanguage\", function() {\n                        t.$broadcast(\"translateLanguageChanged\");\n                      });\n                  };\n                }\n              };\n            }\n            function c(t, e) {\n              \"use strict\";\n              var n = function(n, r, i, o) {\n                if (!angular.isObject(r)) {\n                  var a = this || {\n                    __SCOPE_IS_NOT_AVAILABLE:\n                      \"More info at https://github.com/angular/angular.js/commit/8863b9d04c722b278fa93c5d66ad1e578ad6eb1f\"\n                  };\n                  r = t(r)(a);\n                }\n                return e.instant(n, r, i, o);\n              };\n              return e.statefulFilter() && (n.$stateful = !0), n;\n            }\n            function l(t) {\n              \"use strict\";\n              return t(\"translations\");\n            }\n            return (\n              (t.$inject = [\"$translate\"]),\n              (e.$inject = [\n                \"$STORAGE_KEY\",\n                \"$windowProvider\",\n                \"$translateSanitizationProvider\",\n                \"pascalprechtTranslateOverrider\"\n              ]),\n              (n.$inject = [\"$interpolate\", \"$translateSanitization\"]),\n              (r.$inject = [\"$translate\", \"$interpolate\", \"$compile\", \"$parse\", \"$rootScope\"]),\n              (i.$inject = [\"$translate\", \"$rootScope\"]),\n              (a.$inject = [\"$translate\", \"$rootScope\"]),\n              (c.$inject = [\"$parse\", \"$translate\"]),\n              (l.$inject = [\"$cacheFactory\"]),\n              angular.module(\"pascalprecht.translate\", [\"ng\"]).run(t),\n              (t.displayName = \"runTranslate\"),\n              angular\n                .module(\"pascalprecht.translate\")\n                .provider(\"$translateSanitization\", function() {\n                  \"use strict\";\n                  var t,\n                    e,\n                    n,\n                    r = null,\n                    i = !1,\n                    o = !1;\n                  ((n = {\n                    sanitize: function(t, e) {\n                      return \"text\" === e && (t = u(t)), t;\n                    },\n                    escape: function(t, e) {\n                      return \"text\" === e && (t = a(t)), t;\n                    },\n                    sanitizeParameters: function(t, e) {\n                      return \"params\" === e && (t = c(t, u)), t;\n                    },\n                    escapeParameters: function(t, e) {\n                      return \"params\" === e && (t = c(t, a)), t;\n                    },\n                    sce: function(t, e, n) {\n                      return (\n                        \"text\" === e\n                          ? (t = s(t))\n                          : \"params\" === e && \"filter\" !== n && (t = c(t, a)),\n                        t\n                      );\n                    },\n                    sceParameters: function(t, e) {\n                      return \"params\" === e && (t = c(t, s)), t;\n                    }\n                  }).escaped = n.escapeParameters),\n                    (this.addStrategy = function(t, e) {\n                      return (n[t] = e), this;\n                    }),\n                    (this.removeStrategy = function(t) {\n                      return delete n[t], this;\n                    }),\n                    (this.useStrategy = function(t) {\n                      return (i = !0), (r = t), this;\n                    }),\n                    (this.$get = [\n                      \"$injector\",\n                      \"$log\",\n                      function(a, u) {\n                        var s = {};\n                        return (\n                          a.has(\"$sanitize\") && (t = a.get(\"$sanitize\")),\n                          a.has(\"$sce\") && (e = a.get(\"$sce\")),\n                          {\n                            useStrategy: (function(t) {\n                              return function(e) {\n                                t.useStrategy(e);\n                              };\n                            })(this),\n                            sanitize: function(t, e, c, l) {\n                              if (\n                                (r ||\n                                  i ||\n                                  o ||\n                                  (u.warn(\n                                    \"pascalprecht.translate.$translateSanitization: No sanitization strategy has been configured. This can have serious security implications. See http://angular-translate.github.io/docs/#/guide/19_security for details.\"\n                                  ),\n                                  (o = !0)),\n                                c || null === c || (c = r),\n                                !c)\n                              )\n                                return t;\n                              l || (l = \"service\");\n                              var f = angular.isArray(c) ? c : [c];\n                              return (function(t, e, r, i) {\n                                return (\n                                  angular.forEach(i, function(i) {\n                                    if (angular.isFunction(i)) t = i(t, e, r);\n                                    else if (angular.isFunction(n[i])) t = n[i](t, e, r);\n                                    else {\n                                      if (!angular.isString(n[i]))\n                                        throw new Error(\n                                          \"pascalprecht.translate.$translateSanitization: Unknown sanitization strategy: '\" +\n                                            i +\n                                            \"'\"\n                                        );\n                                      if (!s[n[i]])\n                                        try {\n                                          s[n[i]] = a.get(n[i]);\n                                        } catch (t) {\n                                          throw ((s[n[i]] = function() {}),\n                                          new Error(\n                                            \"pascalprecht.translate.$translateSanitization: Unknown sanitization strategy: '\" +\n                                              i +\n                                              \"'\"\n                                          ));\n                                        }\n                                      t = s[n[i]](t, e, r);\n                                    }\n                                  }),\n                                  t\n                                );\n                              })(t, e, l, f);\n                            }\n                          }\n                        );\n                      }\n                    ]);\n                  var a = function(t) {\n                      var e = angular.element(\"<div></div>\");\n                      return e.text(t), e.html();\n                    },\n                    u = function(e) {\n                      if (!t)\n                        throw new Error(\n                          \"pascalprecht.translate.$translateSanitization: Error cannot find $sanitize service. Either include the ngSanitize module (https://docs.angularjs.org/api/ngSanitize) or use a sanitization strategy which does not depend on $sanitize, such as 'escape'.\"\n                        );\n                      return t(e);\n                    },\n                    s = function(t) {\n                      if (!e)\n                        throw new Error(\n                          \"pascalprecht.translate.$translateSanitization: Error cannot find $sce service.\"\n                        );\n                      return e.trustAsHtml(t);\n                    },\n                    c = function(t, e, n) {\n                      if (angular.isDate(t)) return t;\n                      if (angular.isObject(t)) {\n                        var r = angular.isArray(t) ? [] : {};\n                        if (n) {\n                          if (n.indexOf(t) > -1)\n                            throw new Error(\n                              \"pascalprecht.translate.$translateSanitization: Error cannot interpolate parameter due recursive object\"\n                            );\n                        } else n = [];\n                        return (\n                          n.push(t),\n                          angular.forEach(t, function(t, i) {\n                            angular.isFunction(t) || (r[i] = c(t, e, n));\n                          }),\n                          n.splice(-1, 1),\n                          r\n                        );\n                      }\n                      return angular.isNumber(t)\n                        ? t\n                        : !0 === t || !1 === t\n                          ? t\n                          : angular.isUndefined(t) || null === t\n                            ? t\n                            : e(t);\n                    };\n                }),\n              angular\n                .module(\"pascalprecht.translate\")\n                .constant(\"pascalprechtTranslateOverrider\", {})\n                .provider(\"$translate\", e),\n              (e.displayName = \"displayName\"),\n              angular.module(\"pascalprecht.translate\").factory(\"$translateDefaultInterpolation\", n),\n              (n.displayName = \"$translateDefaultInterpolation\"),\n              angular\n                .module(\"pascalprecht.translate\")\n                .constant(\"$STORAGE_KEY\", \"NG_TRANSLATE_LANG_KEY\"),\n              angular.module(\"pascalprecht.translate\").directive(\"translate\", r),\n              (r.displayName = \"translateDirective\"),\n              angular.module(\"pascalprecht.translate\").directive(\"translateAttr\", i),\n              (i.displayName = \"translateAttrDirective\"),\n              angular.module(\"pascalprecht.translate\").directive(\"translateCloak\", a),\n              (a.displayName = \"translateCloakDirective\"),\n              angular.module(\"pascalprecht.translate\").directive(\"translateNamespace\", u),\n              (u.displayName = \"translateNamespaceDirective\"),\n              angular.module(\"pascalprecht.translate\").directive(\"translateLanguage\", s),\n              (s.displayName = \"translateLanguageDirective\"),\n              angular.module(\"pascalprecht.translate\").filter(\"translate\", c),\n              (c.displayName = \"translateFilterFactory\"),\n              angular.module(\"pascalprecht.translate\").factory(\"$translationCache\", l),\n              (l.displayName = \"$translationCache\"),\n              \"pascalprecht.translate\"\n            );\n          })();\n        }.apply(e, [])) || (t.exports = r);\n    },\n    38: function(t, e) {\n      var n;\n      n = (function() {\n        return this;\n      })();\n      try {\n        n = n || Function(\"return this\")() || (0, eval)(\"this\");\n      } catch (t) {\n        \"object\" == typeof window && (n = window);\n      }\n      t.exports = n;\n    },\n    39: function(t, e) {\n      t.exports = function(t) {\n        return (\n          t.webpackPolyfill ||\n            ((t.deprecate = function() {}),\n            (t.paths = []),\n            t.children || (t.children = []),\n            Object.defineProperty(t, \"loaded\", {\n              enumerable: !0,\n              get: function() {\n                return t.l;\n              }\n            }),\n            Object.defineProperty(t, \"id\", {\n              enumerable: !0,\n              get: function() {\n                return t.i;\n              }\n            }),\n            (t.webpackPolyfill = 1)),\n          t\n        );\n      };\n    },\n    6: function(t, e, n) {\n      (function(t, r) {\n        var i;\n        /**\n         * @license\n         * Lodash <https://lodash.com/>\n         * Copyright JS Foundation and other contributors <https://js.foundation/>\n         * Released under MIT license <https://lodash.com/license>\n         * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n         * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n         */ (function() {\n          var o,\n            a = 200,\n            u = \"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\",\n            s = \"Expected a function\",\n            c = \"__lodash_hash_undefined__\",\n            l = 500,\n            f = \"__lodash_placeholder__\",\n            p = 1,\n            h = 2,\n            d = 4,\n            v = 1,\n            g = 2,\n            m = 1,\n            $ = 2,\n            y = 4,\n            b = 8,\n            w = 16,\n            x = 32,\n            _ = 64,\n            C = 128,\n            S = 256,\n            E = 512,\n            k = 30,\n            A = \"...\",\n            T = 800,\n            O = 16,\n            j = 1,\n            N = 2,\n            M = 1 / 0,\n            L = 9007199254740991,\n            D = 1.7976931348623157e308,\n            I = NaN,\n            R = 4294967295,\n            P = R - 1,\n            V = R >>> 1,\n            q = [\n              [\"ary\", C],\n              [\"bind\", m],\n              [\"bindKey\", $],\n              [\"curry\", b],\n              [\"curryRight\", w],\n              [\"flip\", E],\n              [\"partial\", x],\n              [\"partialRight\", _],\n              [\"rearg\", S]\n            ],\n            U = \"[object Arguments]\",\n            F = \"[object Array]\",\n            H = \"[object AsyncFunction]\",\n            B = \"[object Boolean]\",\n            z = \"[object Date]\",\n            W = \"[object DOMException]\",\n            G = \"[object Error]\",\n            K = \"[object Function]\",\n            J = \"[object GeneratorFunction]\",\n            Y = \"[object Map]\",\n            Z = \"[object Number]\",\n            X = \"[object Null]\",\n            Q = \"[object Object]\",\n            tt = \"[object Proxy]\",\n            et = \"[object RegExp]\",\n            nt = \"[object Set]\",\n            rt = \"[object String]\",\n            it = \"[object Symbol]\",\n            ot = \"[object Undefined]\",\n            at = \"[object WeakMap]\",\n            ut = \"[object WeakSet]\",\n            st = \"[object ArrayBuffer]\",\n            ct = \"[object DataView]\",\n            lt = \"[object Float32Array]\",\n            ft = \"[object Float64Array]\",\n            pt = \"[object Int8Array]\",\n            ht = \"[object Int16Array]\",\n            dt = \"[object Int32Array]\",\n            vt = \"[object Uint8Array]\",\n            gt = \"[object Uint8ClampedArray]\",\n            mt = \"[object Uint16Array]\",\n            $t = \"[object Uint32Array]\",\n            yt = /\\b__p \\+= '';/g,\n            bt = /\\b(__p \\+=) '' \\+/g,\n            wt = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,\n            xt = /&(?:amp|lt|gt|quot|#39);/g,\n            _t = /[&<>\"']/g,\n            Ct = RegExp(xt.source),\n            St = RegExp(_t.source),\n            Et = /<%-([\\s\\S]+?)%>/g,\n            kt = /<%([\\s\\S]+?)%>/g,\n            At = /<%=([\\s\\S]+?)%>/g,\n            Tt = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n            Ot = /^\\w*$/,\n            jt = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,\n            Nt = /[\\\\^$.*+?()[\\]{}|]/g,\n            Mt = RegExp(Nt.source),\n            Lt = /^\\s+|\\s+$/g,\n            Dt = /^\\s+/,\n            It = /\\s+$/,\n            Rt = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n            Pt = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n            Vt = /,? & /,\n            qt = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,\n            Ut = /\\\\(\\\\)?/g,\n            Ft = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,\n            Ht = /\\w*$/,\n            Bt = /^[-+]0x[0-9a-f]+$/i,\n            zt = /^0b[01]+$/i,\n            Wt = /^\\[object .+?Constructor\\]$/,\n            Gt = /^0o[0-7]+$/i,\n            Kt = /^(?:0|[1-9]\\d*)$/,\n            Jt = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,\n            Yt = /($^)/,\n            Zt = /['\\n\\r\\u2028\\u2029\\\\]/g,\n            Xt = \"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",\n            Qt =\n              \"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",\n            te = \"[\\\\ud800-\\\\udfff]\",\n            ee = \"[\" + Qt + \"]\",\n            ne = \"[\" + Xt + \"]\",\n            re = \"\\\\d+\",\n            ie = \"[\\\\u2700-\\\\u27bf]\",\n            oe = \"[a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff]\",\n            ae =\n              \"[^\\\\ud800-\\\\udfff\" +\n              Qt +\n              re +\n              \"\\\\u2700-\\\\u27bfa-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xffA-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]\",\n            ue = \"\\\\ud83c[\\\\udffb-\\\\udfff]\",\n            se = \"[^\\\\ud800-\\\\udfff]\",\n            ce = \"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",\n            le = \"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",\n            fe = \"[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]\",\n            pe = \"(?:\" + oe + \"|\" + ae + \")\",\n            he = \"(?:\" + fe + \"|\" + ae + \")\",\n            de = \"(?:\" + ne + \"|\" + ue + \")\" + \"?\",\n            ve =\n              \"[\\\\ufe0e\\\\ufe0f]?\" +\n              de +\n              (\"(?:\\\\u200d(?:\" + [se, ce, le].join(\"|\") + \")[\\\\ufe0e\\\\ufe0f]?\" + de + \")*\"),\n            ge = \"(?:\" + [ie, ce, le].join(\"|\") + \")\" + ve,\n            me = \"(?:\" + [se + ne + \"?\", ne, ce, le, te].join(\"|\") + \")\",\n            $e = RegExp(\"['’]\", \"g\"),\n            ye = RegExp(ne, \"g\"),\n            be = RegExp(ue + \"(?=\" + ue + \")|\" + me + ve, \"g\"),\n            we = RegExp(\n              [\n                fe + \"?\" + oe + \"+(?:['’](?:d|ll|m|re|s|t|ve))?(?=\" + [ee, fe, \"$\"].join(\"|\") + \")\",\n                he + \"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?=\" + [ee, fe + pe, \"$\"].join(\"|\") + \")\",\n                fe + \"?\" + pe + \"+(?:['’](?:d|ll|m|re|s|t|ve))?\",\n                fe + \"+(?:['’](?:D|LL|M|RE|S|T|VE))?\",\n                \"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\n                \"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",\n                re,\n                ge\n              ].join(\"|\"),\n              \"g\"\n            ),\n            xe = RegExp(\"[\\\\u200d\\\\ud800-\\\\udfff\" + Xt + \"\\\\ufe0e\\\\ufe0f]\"),\n            _e = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,\n            Ce = [\n              \"Array\",\n              \"Buffer\",\n              \"DataView\",\n              \"Date\",\n              \"Error\",\n              \"Float32Array\",\n              \"Float64Array\",\n              \"Function\",\n              \"Int8Array\",\n              \"Int16Array\",\n              \"Int32Array\",\n              \"Map\",\n              \"Math\",\n              \"Object\",\n              \"Promise\",\n              \"RegExp\",\n              \"Set\",\n              \"String\",\n              \"Symbol\",\n              \"TypeError\",\n              \"Uint8Array\",\n              \"Uint8ClampedArray\",\n              \"Uint16Array\",\n              \"Uint32Array\",\n              \"WeakMap\",\n              \"_\",\n              \"clearTimeout\",\n              \"isFinite\",\n              \"parseInt\",\n              \"setTimeout\"\n            ],\n            Se = -1,\n            Ee = {};\n          (Ee[lt] = Ee[ft] = Ee[pt] = Ee[ht] = Ee[dt] = Ee[vt] = Ee[gt] = Ee[mt] = Ee[$t] = !0),\n            (Ee[U] = Ee[F] = Ee[st] = Ee[B] = Ee[ct] = Ee[z] = Ee[G] = Ee[K] = Ee[Y] = Ee[Z] = Ee[\n              Q\n            ] = Ee[et] = Ee[nt] = Ee[rt] = Ee[at] = !1);\n          var ke = {};\n          (ke[U] = ke[F] = ke[st] = ke[ct] = ke[B] = ke[z] = ke[lt] = ke[ft] = ke[pt] = ke[ht] = ke[\n            dt\n          ] = ke[Y] = ke[Z] = ke[Q] = ke[et] = ke[nt] = ke[rt] = ke[it] = ke[vt] = ke[gt] = ke[\n            mt\n          ] = ke[$t] = !0),\n            (ke[G] = ke[K] = ke[at] = !1);\n          var Ae = {\n              \"\\\\\": \"\\\\\",\n              \"'\": \"'\",\n              \"\\n\": \"n\",\n              \"\\r\": \"r\",\n              \"\\u2028\": \"u2028\",\n              \"\\u2029\": \"u2029\"\n            },\n            Te = parseFloat,\n            Oe = parseInt,\n            je = \"object\" == typeof t && t && t.Object === Object && t,\n            Ne = \"object\" == typeof self && self && self.Object === Object && self,\n            Me = je || Ne || Function(\"return this\")(),\n            Le = \"object\" == typeof e && e && !e.nodeType && e,\n            De = Le && \"object\" == typeof r && r && !r.nodeType && r,\n            Ie = De && De.exports === Le,\n            Re = Ie && je.process,\n            Pe = (function() {\n              try {\n                var t = De && De.require && De.require(\"util\").types;\n                return t || (Re && Re.binding && Re.binding(\"util\"));\n              } catch (t) {}\n            })(),\n            Ve = Pe && Pe.isArrayBuffer,\n            qe = Pe && Pe.isDate,\n            Ue = Pe && Pe.isMap,\n            Fe = Pe && Pe.isRegExp,\n            He = Pe && Pe.isSet,\n            Be = Pe && Pe.isTypedArray;\n          function ze(t, e, n) {\n            switch (n.length) {\n              case 0:\n                return t.call(e);\n              case 1:\n                return t.call(e, n[0]);\n              case 2:\n                return t.call(e, n[0], n[1]);\n              case 3:\n                return t.call(e, n[0], n[1], n[2]);\n            }\n            return t.apply(e, n);\n          }\n          function We(t, e, n, r) {\n            for (var i = -1, o = null == t ? 0 : t.length; ++i < o; ) {\n              var a = t[i];\n              e(r, a, n(a), t);\n            }\n            return r;\n          }\n          function Ge(t, e) {\n            for (var n = -1, r = null == t ? 0 : t.length; ++n < r && !1 !== e(t[n], n, t); );\n            return t;\n          }\n          function Ke(t, e) {\n            for (var n = null == t ? 0 : t.length; n-- && !1 !== e(t[n], n, t); );\n            return t;\n          }\n          function Je(t, e) {\n            for (var n = -1, r = null == t ? 0 : t.length; ++n < r; ) if (!e(t[n], n, t)) return !1;\n            return !0;\n          }\n          function Ye(t, e) {\n            for (var n = -1, r = null == t ? 0 : t.length, i = 0, o = []; ++n < r; ) {\n              var a = t[n];\n              e(a, n, t) && (o[i++] = a);\n            }\n            return o;\n          }\n          function Ze(t, e) {\n            return !!(null == t ? 0 : t.length) && sn(t, e, 0) > -1;\n          }\n          function Xe(t, e, n) {\n            for (var r = -1, i = null == t ? 0 : t.length; ++r < i; ) if (n(e, t[r])) return !0;\n            return !1;\n          }\n          function Qe(t, e) {\n            for (var n = -1, r = null == t ? 0 : t.length, i = Array(r); ++n < r; )\n              i[n] = e(t[n], n, t);\n            return i;\n          }\n          function tn(t, e) {\n            for (var n = -1, r = e.length, i = t.length; ++n < r; ) t[i + n] = e[n];\n            return t;\n          }\n          function en(t, e, n, r) {\n            var i = -1,\n              o = null == t ? 0 : t.length;\n            for (r && o && (n = t[++i]); ++i < o; ) n = e(n, t[i], i, t);\n            return n;\n          }\n          function nn(t, e, n, r) {\n            var i = null == t ? 0 : t.length;\n            for (r && i && (n = t[--i]); i--; ) n = e(n, t[i], i, t);\n            return n;\n          }\n          function rn(t, e) {\n            for (var n = -1, r = null == t ? 0 : t.length; ++n < r; ) if (e(t[n], n, t)) return !0;\n            return !1;\n          }\n          var on = pn(\"length\");\n          function an(t, e, n) {\n            var r;\n            return (\n              n(t, function(t, n, i) {\n                if (e(t, n, i)) return (r = n), !1;\n              }),\n              r\n            );\n          }\n          function un(t, e, n, r) {\n            for (var i = t.length, o = n + (r ? 1 : -1); r ? o-- : ++o < i; )\n              if (e(t[o], o, t)) return o;\n            return -1;\n          }\n          function sn(t, e, n) {\n            return e == e\n              ? (function(t, e, n) {\n                  var r = n - 1,\n                    i = t.length;\n                  for (; ++r < i; ) if (t[r] === e) return r;\n                  return -1;\n                })(t, e, n)\n              : un(t, ln, n);\n          }\n          function cn(t, e, n, r) {\n            for (var i = n - 1, o = t.length; ++i < o; ) if (r(t[i], e)) return i;\n            return -1;\n          }\n          function ln(t) {\n            return t != t;\n          }\n          function fn(t, e) {\n            var n = null == t ? 0 : t.length;\n            return n ? vn(t, e) / n : I;\n          }\n          function pn(t) {\n            return function(e) {\n              return null == e ? o : e[t];\n            };\n          }\n          function hn(t) {\n            return function(e) {\n              return null == t ? o : t[e];\n            };\n          }\n          function dn(t, e, n, r, i) {\n            return (\n              i(t, function(t, i, o) {\n                n = r ? ((r = !1), t) : e(n, t, i, o);\n              }),\n              n\n            );\n          }\n          function vn(t, e) {\n            for (var n, r = -1, i = t.length; ++r < i; ) {\n              var a = e(t[r]);\n              a !== o && (n = n === o ? a : n + a);\n            }\n            return n;\n          }\n          function gn(t, e) {\n            for (var n = -1, r = Array(t); ++n < t; ) r[n] = e(n);\n            return r;\n          }\n          function mn(t) {\n            return function(e) {\n              return t(e);\n            };\n          }\n          function $n(t, e) {\n            return Qe(e, function(e) {\n              return t[e];\n            });\n          }\n          function yn(t, e) {\n            return t.has(e);\n          }\n          function bn(t, e) {\n            for (var n = -1, r = t.length; ++n < r && sn(e, t[n], 0) > -1; );\n            return n;\n          }\n          function wn(t, e) {\n            for (var n = t.length; n-- && sn(e, t[n], 0) > -1; );\n            return n;\n          }\n          var xn = hn({\n              À: \"A\",\n              Á: \"A\",\n              Â: \"A\",\n              Ã: \"A\",\n              Ä: \"A\",\n              Å: \"A\",\n              à: \"a\",\n              á: \"a\",\n              â: \"a\",\n              ã: \"a\",\n              ä: \"a\",\n              å: \"a\",\n              Ç: \"C\",\n              ç: \"c\",\n              Ð: \"D\",\n              ð: \"d\",\n              È: \"E\",\n              É: \"E\",\n              Ê: \"E\",\n              Ë: \"E\",\n              è: \"e\",\n              é: \"e\",\n              ê: \"e\",\n              ë: \"e\",\n              Ì: \"I\",\n              Í: \"I\",\n              Î: \"I\",\n              Ï: \"I\",\n              ì: \"i\",\n              í: \"i\",\n              î: \"i\",\n              ï: \"i\",\n              Ñ: \"N\",\n              ñ: \"n\",\n              Ò: \"O\",\n              Ó: \"O\",\n              Ô: \"O\",\n              Õ: \"O\",\n              Ö: \"O\",\n              Ø: \"O\",\n              ò: \"o\",\n              ó: \"o\",\n              ô: \"o\",\n              õ: \"o\",\n              ö: \"o\",\n              ø: \"o\",\n              Ù: \"U\",\n              Ú: \"U\",\n              Û: \"U\",\n              Ü: \"U\",\n              ù: \"u\",\n              ú: \"u\",\n              û: \"u\",\n              ü: \"u\",\n              Ý: \"Y\",\n              ý: \"y\",\n              ÿ: \"y\",\n              Æ: \"Ae\",\n              æ: \"ae\",\n              Þ: \"Th\",\n              þ: \"th\",\n              ß: \"ss\",\n              Ā: \"A\",\n              Ă: \"A\",\n              Ą: \"A\",\n              ā: \"a\",\n              ă: \"a\",\n              ą: \"a\",\n              Ć: \"C\",\n              Ĉ: \"C\",\n              Ċ: \"C\",\n              Č: \"C\",\n              ć: \"c\",\n              ĉ: \"c\",\n              ċ: \"c\",\n              č: \"c\",\n              Ď: \"D\",\n              Đ: \"D\",\n              ď: \"d\",\n              đ: \"d\",\n              Ē: \"E\",\n              Ĕ: \"E\",\n              Ė: \"E\",\n              Ę: \"E\",\n              Ě: \"E\",\n              ē: \"e\",\n              ĕ: \"e\",\n              ė: \"e\",\n              ę: \"e\",\n              ě: \"e\",\n              Ĝ: \"G\",\n              Ğ: \"G\",\n              Ġ: \"G\",\n              Ģ: \"G\",\n              ĝ: \"g\",\n              ğ: \"g\",\n              ġ: \"g\",\n              ģ: \"g\",\n              Ĥ: \"H\",\n              Ħ: \"H\",\n              ĥ: \"h\",\n              ħ: \"h\",\n              Ĩ: \"I\",\n              Ī: \"I\",\n              Ĭ: \"I\",\n              Į: \"I\",\n              İ: \"I\",\n              ĩ: \"i\",\n              ī: \"i\",\n              ĭ: \"i\",\n              į: \"i\",\n              ı: \"i\",\n              Ĵ: \"J\",\n              ĵ: \"j\",\n              Ķ: \"K\",\n              ķ: \"k\",\n              ĸ: \"k\",\n              Ĺ: \"L\",\n              Ļ: \"L\",\n              Ľ: \"L\",\n              Ŀ: \"L\",\n              Ł: \"L\",\n              ĺ: \"l\",\n              ļ: \"l\",\n              ľ: \"l\",\n              ŀ: \"l\",\n              ł: \"l\",\n              Ń: \"N\",\n              Ņ: \"N\",\n              Ň: \"N\",\n              Ŋ: \"N\",\n              ń: \"n\",\n              ņ: \"n\",\n              ň: \"n\",\n              ŋ: \"n\",\n              Ō: \"O\",\n              Ŏ: \"O\",\n              Ő: \"O\",\n              ō: \"o\",\n              ŏ: \"o\",\n              ő: \"o\",\n              Ŕ: \"R\",\n              Ŗ: \"R\",\n              Ř: \"R\",\n              ŕ: \"r\",\n              ŗ: \"r\",\n              ř: \"r\",\n              Ś: \"S\",\n              Ŝ: \"S\",\n              Ş: \"S\",\n              Š: \"S\",\n              ś: \"s\",\n              ŝ: \"s\",\n              ş: \"s\",\n              š: \"s\",\n              Ţ: \"T\",\n              Ť: \"T\",\n              Ŧ: \"T\",\n              ţ: \"t\",\n              ť: \"t\",\n              ŧ: \"t\",\n              Ũ: \"U\",\n              Ū: \"U\",\n              Ŭ: \"U\",\n              Ů: \"U\",\n              Ű: \"U\",\n              Ų: \"U\",\n              ũ: \"u\",\n              ū: \"u\",\n              ŭ: \"u\",\n              ů: \"u\",\n              ű: \"u\",\n              ų: \"u\",\n              Ŵ: \"W\",\n              ŵ: \"w\",\n              Ŷ: \"Y\",\n              ŷ: \"y\",\n              Ÿ: \"Y\",\n              Ź: \"Z\",\n              Ż: \"Z\",\n              Ž: \"Z\",\n              ź: \"z\",\n              ż: \"z\",\n              ž: \"z\",\n              Ĳ: \"IJ\",\n              ĳ: \"ij\",\n              Œ: \"Oe\",\n              œ: \"oe\",\n              ŉ: \"'n\",\n              ſ: \"s\"\n            }),\n            _n = hn({ \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", '\"': \"&quot;\", \"'\": \"&#39;\" });\n          function Cn(t) {\n            return \"\\\\\" + Ae[t];\n          }\n          function Sn(t) {\n            return xe.test(t);\n          }\n          function En(t) {\n            var e = -1,\n              n = Array(t.size);\n            return (\n              t.forEach(function(t, r) {\n                n[++e] = [r, t];\n              }),\n              n\n            );\n          }\n          function kn(t, e) {\n            return function(n) {\n              return t(e(n));\n            };\n          }\n          function An(t, e) {\n            for (var n = -1, r = t.length, i = 0, o = []; ++n < r; ) {\n              var a = t[n];\n              (a !== e && a !== f) || ((t[n] = f), (o[i++] = n));\n            }\n            return o;\n          }\n          function Tn(t, e) {\n            return \"__proto__\" == e ? o : t[e];\n          }\n          function On(t) {\n            var e = -1,\n              n = Array(t.size);\n            return (\n              t.forEach(function(t) {\n                n[++e] = t;\n              }),\n              n\n            );\n          }\n          function jn(t) {\n            var e = -1,\n              n = Array(t.size);\n            return (\n              t.forEach(function(t) {\n                n[++e] = [t, t];\n              }),\n              n\n            );\n          }\n          function Nn(t) {\n            return Sn(t)\n              ? (function(t) {\n                  var e = (be.lastIndex = 0);\n                  for (; be.test(t); ) ++e;\n                  return e;\n                })(t)\n              : on(t);\n          }\n          function Mn(t) {\n            return Sn(t)\n              ? (function(t) {\n                  return t.match(be) || [];\n                })(t)\n              : (function(t) {\n                  return t.split(\"\");\n                })(t);\n          }\n          var Ln = hn({ \"&amp;\": \"&\", \"&lt;\": \"<\", \"&gt;\": \">\", \"&quot;\": '\"', \"&#39;\": \"'\" });\n          var Dn = (function t(e) {\n            var n = (e = null == e ? Me : Dn.defaults(Me.Object(), e, Dn.pick(Me, Ce))).Array,\n              r = e.Date,\n              i = e.Error,\n              Xt = e.Function,\n              Qt = e.Math,\n              te = e.Object,\n              ee = e.RegExp,\n              ne = e.String,\n              re = e.TypeError,\n              ie = n.prototype,\n              oe = Xt.prototype,\n              ae = te.prototype,\n              ue = e[\"__core-js_shared__\"],\n              se = oe.toString,\n              ce = ae.hasOwnProperty,\n              le = 0,\n              fe = (function() {\n                var t = /[^.]+$/.exec((ue && ue.keys && ue.keys.IE_PROTO) || \"\");\n                return t ? \"Symbol(src)_1.\" + t : \"\";\n              })(),\n              pe = ae.toString,\n              he = se.call(te),\n              de = Me._,\n              ve = ee(\n                \"^\" +\n                  se\n                    .call(ce)\n                    .replace(Nt, \"\\\\$&\")\n                    .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, \"$1.*?\") +\n                  \"$\"\n              ),\n              ge = Ie ? e.Buffer : o,\n              me = e.Symbol,\n              be = e.Uint8Array,\n              xe = ge ? ge.allocUnsafe : o,\n              Ae = kn(te.getPrototypeOf, te),\n              je = te.create,\n              Ne = ae.propertyIsEnumerable,\n              Le = ie.splice,\n              De = me ? me.isConcatSpreadable : o,\n              Re = me ? me.iterator : o,\n              Pe = me ? me.toStringTag : o,\n              on = (function() {\n                try {\n                  var t = Vo(te, \"defineProperty\");\n                  return t({}, \"\", {}), t;\n                } catch (t) {}\n              })(),\n              hn = e.clearTimeout !== Me.clearTimeout && e.clearTimeout,\n              In = r && r.now !== Me.Date.now && r.now,\n              Rn = e.setTimeout !== Me.setTimeout && e.setTimeout,\n              Pn = Qt.ceil,\n              Vn = Qt.floor,\n              qn = te.getOwnPropertySymbols,\n              Un = ge ? ge.isBuffer : o,\n              Fn = e.isFinite,\n              Hn = ie.join,\n              Bn = kn(te.keys, te),\n              zn = Qt.max,\n              Wn = Qt.min,\n              Gn = r.now,\n              Kn = e.parseInt,\n              Jn = Qt.random,\n              Yn = ie.reverse,\n              Zn = Vo(e, \"DataView\"),\n              Xn = Vo(e, \"Map\"),\n              Qn = Vo(e, \"Promise\"),\n              tr = Vo(e, \"Set\"),\n              er = Vo(e, \"WeakMap\"),\n              nr = Vo(te, \"create\"),\n              rr = er && new er(),\n              ir = {},\n              or = la(Zn),\n              ar = la(Xn),\n              ur = la(Qn),\n              sr = la(tr),\n              cr = la(er),\n              lr = me ? me.prototype : o,\n              fr = lr ? lr.valueOf : o,\n              pr = lr ? lr.toString : o;\n            function hr(t) {\n              if (ku(t) && !gu(t) && !(t instanceof mr)) {\n                if (t instanceof gr) return t;\n                if (ce.call(t, \"__wrapped__\")) return fa(t);\n              }\n              return new gr(t);\n            }\n            var dr = (function() {\n              function t() {}\n              return function(e) {\n                if (!Eu(e)) return {};\n                if (je) return je(e);\n                t.prototype = e;\n                var n = new t();\n                return (t.prototype = o), n;\n              };\n            })();\n            function vr() {}\n            function gr(t, e) {\n              (this.__wrapped__ = t),\n                (this.__actions__ = []),\n                (this.__chain__ = !!e),\n                (this.__index__ = 0),\n                (this.__values__ = o);\n            }\n            function mr(t) {\n              (this.__wrapped__ = t),\n                (this.__actions__ = []),\n                (this.__dir__ = 1),\n                (this.__filtered__ = !1),\n                (this.__iteratees__ = []),\n                (this.__takeCount__ = R),\n                (this.__views__ = []);\n            }\n            function $r(t) {\n              var e = -1,\n                n = null == t ? 0 : t.length;\n              for (this.clear(); ++e < n; ) {\n                var r = t[e];\n                this.set(r[0], r[1]);\n              }\n            }\n            function yr(t) {\n              var e = -1,\n                n = null == t ? 0 : t.length;\n              for (this.clear(); ++e < n; ) {\n                var r = t[e];\n                this.set(r[0], r[1]);\n              }\n            }\n            function br(t) {\n              var e = -1,\n                n = null == t ? 0 : t.length;\n              for (this.clear(); ++e < n; ) {\n                var r = t[e];\n                this.set(r[0], r[1]);\n              }\n            }\n            function wr(t) {\n              var e = -1,\n                n = null == t ? 0 : t.length;\n              for (this.__data__ = new br(); ++e < n; ) this.add(t[e]);\n            }\n            function xr(t) {\n              var e = (this.__data__ = new yr(t));\n              this.size = e.size;\n            }\n            function _r(t, e) {\n              var n = gu(t),\n                r = !n && vu(t),\n                i = !n && !r && bu(t),\n                o = !n && !r && !i && Du(t),\n                a = n || r || i || o,\n                u = a ? gn(t.length, ne) : [],\n                s = u.length;\n              for (var c in t)\n                (!e && !ce.call(t, c)) ||\n                  (a &&\n                    (\"length\" == c ||\n                      (i && (\"offset\" == c || \"parent\" == c)) ||\n                      (o && (\"buffer\" == c || \"byteLength\" == c || \"byteOffset\" == c)) ||\n                      Wo(c, s))) ||\n                  u.push(c);\n              return u;\n            }\n            function Cr(t) {\n              var e = t.length;\n              return e ? t[wi(0, e - 1)] : o;\n            }\n            function Sr(t, e) {\n              return ua(no(t), Lr(e, 0, t.length));\n            }\n            function Er(t) {\n              return ua(no(t));\n            }\n            function kr(t, e, n) {\n              ((n === o || pu(t[e], n)) && (n !== o || e in t)) || Nr(t, e, n);\n            }\n            function Ar(t, e, n) {\n              var r = t[e];\n              (ce.call(t, e) && pu(r, n) && (n !== o || e in t)) || Nr(t, e, n);\n            }\n            function Tr(t, e) {\n              for (var n = t.length; n--; ) if (pu(t[n][0], e)) return n;\n              return -1;\n            }\n            function Or(t, e, n, r) {\n              return (\n                Vr(t, function(t, i, o) {\n                  e(r, t, n(t), o);\n                }),\n                r\n              );\n            }\n            function jr(t, e) {\n              return t && ro(e, rs(e), t);\n            }\n            function Nr(t, e, n) {\n              \"__proto__\" == e && on\n                ? on(t, e, { configurable: !0, enumerable: !0, value: n, writable: !0 })\n                : (t[e] = n);\n            }\n            function Mr(t, e) {\n              for (var r = -1, i = e.length, a = n(i), u = null == t; ++r < i; )\n                a[r] = u ? o : Xu(t, e[r]);\n              return a;\n            }\n            function Lr(t, e, n) {\n              return (\n                t == t && (n !== o && (t = t <= n ? t : n), e !== o && (t = t >= e ? t : e)), t\n              );\n            }\n            function Dr(t, e, n, r, i, a) {\n              var u,\n                s = e & p,\n                c = e & h,\n                l = e & d;\n              if ((n && (u = i ? n(t, r, i, a) : n(t)), u !== o)) return u;\n              if (!Eu(t)) return t;\n              var f = gu(t);\n              if (f) {\n                if (\n                  ((u = (function(t) {\n                    var e = t.length,\n                      n = new t.constructor(e);\n                    return (\n                      e &&\n                        \"string\" == typeof t[0] &&\n                        ce.call(t, \"index\") &&\n                        ((n.index = t.index), (n.input = t.input)),\n                      n\n                    );\n                  })(t)),\n                  !s)\n                )\n                  return no(t, u);\n              } else {\n                var v = Fo(t),\n                  g = v == K || v == J;\n                if (bu(t)) return Yi(t, s);\n                if (v == Q || v == U || (g && !i)) {\n                  if (((u = c || g ? {} : Bo(t)), !s))\n                    return c\n                      ? (function(t, e) {\n                          return ro(t, Uo(t), e);\n                        })(\n                          t,\n                          (function(t, e) {\n                            return t && ro(e, is(e), t);\n                          })(u, t)\n                        )\n                      : (function(t, e) {\n                          return ro(t, qo(t), e);\n                        })(t, jr(u, t));\n                } else {\n                  if (!ke[v]) return i ? t : {};\n                  u = (function(t, e, n) {\n                    var r = t.constructor;\n                    switch (e) {\n                      case st:\n                        return Zi(t);\n                      case B:\n                      case z:\n                        return new r(+t);\n                      case ct:\n                        return (function(t, e) {\n                          var n = e ? Zi(t.buffer) : t.buffer;\n                          return new t.constructor(n, t.byteOffset, t.byteLength);\n                        })(t, n);\n                      case lt:\n                      case ft:\n                      case pt:\n                      case ht:\n                      case dt:\n                      case vt:\n                      case gt:\n                      case mt:\n                      case $t:\n                        return Xi(t, n);\n                      case Y:\n                        return new r();\n                      case Z:\n                      case rt:\n                        return new r(t);\n                      case et:\n                        return (function(t) {\n                          var e = new t.constructor(t.source, Ht.exec(t));\n                          return (e.lastIndex = t.lastIndex), e;\n                        })(t);\n                      case nt:\n                        return new r();\n                      case it:\n                        return (function(t) {\n                          return fr ? te(fr.call(t)) : {};\n                        })(t);\n                    }\n                  })(t, v, s);\n                }\n              }\n              a || (a = new xr());\n              var m = a.get(t);\n              if (m) return m;\n              if ((a.set(t, u), Nu(t)))\n                return (\n                  t.forEach(function(r) {\n                    u.add(Dr(r, e, n, r, t, a));\n                  }),\n                  u\n                );\n              if (Au(t))\n                return (\n                  t.forEach(function(r, i) {\n                    u.set(i, Dr(r, e, n, i, t, a));\n                  }),\n                  u\n                );\n              var $ = f ? o : (l ? (c ? No : jo) : c ? is : rs)(t);\n              return (\n                Ge($ || t, function(r, i) {\n                  $ && (r = t[(i = r)]), Ar(u, i, Dr(r, e, n, i, t, a));\n                }),\n                u\n              );\n            }\n            function Ir(t, e, n) {\n              var r = n.length;\n              if (null == t) return !r;\n              for (t = te(t); r--; ) {\n                var i = n[r],\n                  a = e[i],\n                  u = t[i];\n                if ((u === o && !(i in t)) || !a(u)) return !1;\n              }\n              return !0;\n            }\n            function Rr(t, e, n) {\n              if (\"function\" != typeof t) throw new re(s);\n              return ra(function() {\n                t.apply(o, n);\n              }, e);\n            }\n            function Pr(t, e, n, r) {\n              var i = -1,\n                o = Ze,\n                u = !0,\n                s = t.length,\n                c = [],\n                l = e.length;\n              if (!s) return c;\n              n && (e = Qe(e, mn(n))),\n                r ? ((o = Xe), (u = !1)) : e.length >= a && ((o = yn), (u = !1), (e = new wr(e)));\n              t: for (; ++i < s; ) {\n                var f = t[i],\n                  p = null == n ? f : n(f);\n                if (((f = r || 0 !== f ? f : 0), u && p == p)) {\n                  for (var h = l; h--; ) if (e[h] === p) continue t;\n                  c.push(f);\n                } else o(e, p, r) || c.push(f);\n              }\n              return c;\n            }\n            (hr.templateSettings = {\n              escape: Et,\n              evaluate: kt,\n              interpolate: At,\n              variable: \"\",\n              imports: { _: hr }\n            }),\n              (hr.prototype = vr.prototype),\n              (hr.prototype.constructor = hr),\n              (gr.prototype = dr(vr.prototype)),\n              (gr.prototype.constructor = gr),\n              (mr.prototype = dr(vr.prototype)),\n              (mr.prototype.constructor = mr),\n              ($r.prototype.clear = function() {\n                (this.__data__ = nr ? nr(null) : {}), (this.size = 0);\n              }),\n              ($r.prototype.delete = function(t) {\n                var e = this.has(t) && delete this.__data__[t];\n                return (this.size -= e ? 1 : 0), e;\n              }),\n              ($r.prototype.get = function(t) {\n                var e = this.__data__;\n                if (nr) {\n                  var n = e[t];\n                  return n === c ? o : n;\n                }\n                return ce.call(e, t) ? e[t] : o;\n              }),\n              ($r.prototype.has = function(t) {\n                var e = this.__data__;\n                return nr ? e[t] !== o : ce.call(e, t);\n              }),\n              ($r.prototype.set = function(t, e) {\n                var n = this.__data__;\n                return (this.size += this.has(t) ? 0 : 1), (n[t] = nr && e === o ? c : e), this;\n              }),\n              (yr.prototype.clear = function() {\n                (this.__data__ = []), (this.size = 0);\n              }),\n              (yr.prototype.delete = function(t) {\n                var e = this.__data__,\n                  n = Tr(e, t);\n                return !(n < 0 || (n == e.length - 1 ? e.pop() : Le.call(e, n, 1), --this.size, 0));\n              }),\n              (yr.prototype.get = function(t) {\n                var e = this.__data__,\n                  n = Tr(e, t);\n                return n < 0 ? o : e[n][1];\n              }),\n              (yr.prototype.has = function(t) {\n                return Tr(this.__data__, t) > -1;\n              }),\n              (yr.prototype.set = function(t, e) {\n                var n = this.__data__,\n                  r = Tr(n, t);\n                return r < 0 ? (++this.size, n.push([t, e])) : (n[r][1] = e), this;\n              }),\n              (br.prototype.clear = function() {\n                (this.size = 0),\n                  (this.__data__ = { hash: new $r(), map: new (Xn || yr)(), string: new $r() });\n              }),\n              (br.prototype.delete = function(t) {\n                var e = Ro(this, t).delete(t);\n                return (this.size -= e ? 1 : 0), e;\n              }),\n              (br.prototype.get = function(t) {\n                return Ro(this, t).get(t);\n              }),\n              (br.prototype.has = function(t) {\n                return Ro(this, t).has(t);\n              }),\n              (br.prototype.set = function(t, e) {\n                var n = Ro(this, t),\n                  r = n.size;\n                return n.set(t, e), (this.size += n.size == r ? 0 : 1), this;\n              }),\n              (wr.prototype.add = wr.prototype.push = function(t) {\n                return this.__data__.set(t, c), this;\n              }),\n              (wr.prototype.has = function(t) {\n                return this.__data__.has(t);\n              }),\n              (xr.prototype.clear = function() {\n                (this.__data__ = new yr()), (this.size = 0);\n              }),\n              (xr.prototype.delete = function(t) {\n                var e = this.__data__,\n                  n = e.delete(t);\n                return (this.size = e.size), n;\n              }),\n              (xr.prototype.get = function(t) {\n                return this.__data__.get(t);\n              }),\n              (xr.prototype.has = function(t) {\n                return this.__data__.has(t);\n              }),\n              (xr.prototype.set = function(t, e) {\n                var n = this.__data__;\n                if (n instanceof yr) {\n                  var r = n.__data__;\n                  if (!Xn || r.length < a - 1) return r.push([t, e]), (this.size = ++n.size), this;\n                  n = this.__data__ = new br(r);\n                }\n                return n.set(t, e), (this.size = n.size), this;\n              });\n            var Vr = ao(Gr),\n              qr = ao(Kr, !0);\n            function Ur(t, e) {\n              var n = !0;\n              return (\n                Vr(t, function(t, r, i) {\n                  return (n = !!e(t, r, i));\n                }),\n                n\n              );\n            }\n            function Fr(t, e, n) {\n              for (var r = -1, i = t.length; ++r < i; ) {\n                var a = t[r],\n                  u = e(a);\n                if (null != u && (s === o ? u == u && !Lu(u) : n(u, s)))\n                  var s = u,\n                    c = a;\n              }\n              return c;\n            }\n            function Hr(t, e) {\n              var n = [];\n              return (\n                Vr(t, function(t, r, i) {\n                  e(t, r, i) && n.push(t);\n                }),\n                n\n              );\n            }\n            function Br(t, e, n, r, i) {\n              var o = -1,\n                a = t.length;\n              for (n || (n = zo), i || (i = []); ++o < a; ) {\n                var u = t[o];\n                e > 0 && n(u) ? (e > 1 ? Br(u, e - 1, n, r, i) : tn(i, u)) : r || (i[i.length] = u);\n              }\n              return i;\n            }\n            var zr = uo(),\n              Wr = uo(!0);\n            function Gr(t, e) {\n              return t && zr(t, e, rs);\n            }\n            function Kr(t, e) {\n              return t && Wr(t, e, rs);\n            }\n            function Jr(t, e) {\n              return Ye(e, function(e) {\n                return _u(t[e]);\n              });\n            }\n            function Yr(t, e) {\n              for (var n = 0, r = (e = Wi(e, t)).length; null != t && n < r; ) t = t[ca(e[n++])];\n              return n && n == r ? t : o;\n            }\n            function Zr(t, e, n) {\n              var r = e(t);\n              return gu(t) ? r : tn(r, n(t));\n            }\n            function Xr(t) {\n              return null == t\n                ? t === o\n                  ? ot\n                  : X\n                : Pe && Pe in te(t)\n                  ? (function(t) {\n                      var e = ce.call(t, Pe),\n                        n = t[Pe];\n                      try {\n                        t[Pe] = o;\n                        var r = !0;\n                      } catch (t) {}\n                      var i = pe.call(t);\n                      return r && (e ? (t[Pe] = n) : delete t[Pe]), i;\n                    })(t)\n                  : (function(t) {\n                      return pe.call(t);\n                    })(t);\n            }\n            function Qr(t, e) {\n              return t > e;\n            }\n            function ti(t, e) {\n              return null != t && ce.call(t, e);\n            }\n            function ei(t, e) {\n              return null != t && e in te(t);\n            }\n            function ni(t, e, r) {\n              for (\n                var i = r ? Xe : Ze,\n                  a = t[0].length,\n                  u = t.length,\n                  s = u,\n                  c = n(u),\n                  l = 1 / 0,\n                  f = [];\n                s--;\n\n              ) {\n                var p = t[s];\n                s && e && (p = Qe(p, mn(e))),\n                  (l = Wn(p.length, l)),\n                  (c[s] = !r && (e || (a >= 120 && p.length >= 120)) ? new wr(s && p) : o);\n              }\n              p = t[0];\n              var h = -1,\n                d = c[0];\n              t: for (; ++h < a && f.length < l; ) {\n                var v = p[h],\n                  g = e ? e(v) : v;\n                if (((v = r || 0 !== v ? v : 0), !(d ? yn(d, g) : i(f, g, r)))) {\n                  for (s = u; --s; ) {\n                    var m = c[s];\n                    if (!(m ? yn(m, g) : i(t[s], g, r))) continue t;\n                  }\n                  d && d.push(g), f.push(v);\n                }\n              }\n              return f;\n            }\n            function ri(t, e, n) {\n              var r = null == (t = ea(t, (e = Wi(e, t)))) ? t : t[ca(xa(e))];\n              return null == r ? o : ze(r, t, n);\n            }\n            function ii(t) {\n              return ku(t) && Xr(t) == U;\n            }\n            function oi(t, e, n, r, i) {\n              return (\n                t === e ||\n                (null == t || null == e || (!ku(t) && !ku(e))\n                  ? t != t && e != e\n                  : (function(t, e, n, r, i, a) {\n                      var u = gu(t),\n                        s = gu(e),\n                        c = u ? F : Fo(t),\n                        l = s ? F : Fo(e),\n                        f = (c = c == U ? Q : c) == Q,\n                        p = (l = l == U ? Q : l) == Q,\n                        h = c == l;\n                      if (h && bu(t)) {\n                        if (!bu(e)) return !1;\n                        (u = !0), (f = !1);\n                      }\n                      if (h && !f)\n                        return (\n                          a || (a = new xr()),\n                          u || Du(t)\n                            ? To(t, e, n, r, i, a)\n                            : (function(t, e, n, r, i, o, a) {\n                                switch (n) {\n                                  case ct:\n                                    if (\n                                      t.byteLength != e.byteLength ||\n                                      t.byteOffset != e.byteOffset\n                                    )\n                                      return !1;\n                                    (t = t.buffer), (e = e.buffer);\n                                  case st:\n                                    return !(\n                                      t.byteLength != e.byteLength || !o(new be(t), new be(e))\n                                    );\n                                  case B:\n                                  case z:\n                                  case Z:\n                                    return pu(+t, +e);\n                                  case G:\n                                    return t.name == e.name && t.message == e.message;\n                                  case et:\n                                  case rt:\n                                    return t == e + \"\";\n                                  case Y:\n                                    var u = En;\n                                  case nt:\n                                    var s = r & v;\n                                    if ((u || (u = On), t.size != e.size && !s)) return !1;\n                                    var c = a.get(t);\n                                    if (c) return c == e;\n                                    (r |= g), a.set(t, e);\n                                    var l = To(u(t), u(e), r, i, o, a);\n                                    return a.delete(t), l;\n                                  case it:\n                                    if (fr) return fr.call(t) == fr.call(e);\n                                }\n                                return !1;\n                              })(t, e, c, n, r, i, a)\n                        );\n                      if (!(n & v)) {\n                        var d = f && ce.call(t, \"__wrapped__\"),\n                          m = p && ce.call(e, \"__wrapped__\");\n                        if (d || m) {\n                          var $ = d ? t.value() : t,\n                            y = m ? e.value() : e;\n                          return a || (a = new xr()), i($, y, n, r, a);\n                        }\n                      }\n                      return (\n                        !!h &&\n                        (a || (a = new xr()),\n                        (function(t, e, n, r, i, a) {\n                          var u = n & v,\n                            s = jo(t),\n                            c = s.length,\n                            l = jo(e).length;\n                          if (c != l && !u) return !1;\n                          for (var f = c; f--; ) {\n                            var p = s[f];\n                            if (!(u ? p in e : ce.call(e, p))) return !1;\n                          }\n                          var h = a.get(t);\n                          if (h && a.get(e)) return h == e;\n                          var d = !0;\n                          a.set(t, e), a.set(e, t);\n                          for (var g = u; ++f < c; ) {\n                            p = s[f];\n                            var m = t[p],\n                              $ = e[p];\n                            if (r) var y = u ? r($, m, p, e, t, a) : r(m, $, p, t, e, a);\n                            if (!(y === o ? m === $ || i(m, $, n, r, a) : y)) {\n                              d = !1;\n                              break;\n                            }\n                            g || (g = \"constructor\" == p);\n                          }\n                          if (d && !g) {\n                            var b = t.constructor,\n                              w = e.constructor;\n                            b != w &&\n                              \"constructor\" in t &&\n                              \"constructor\" in e &&\n                              !(\n                                \"function\" == typeof b &&\n                                b instanceof b &&\n                                \"function\" == typeof w &&\n                                w instanceof w\n                              ) &&\n                              (d = !1);\n                          }\n                          return a.delete(t), a.delete(e), d;\n                        })(t, e, n, r, i, a))\n                      );\n                    })(t, e, n, r, oi, i))\n              );\n            }\n            function ai(t, e, n, r) {\n              var i = n.length,\n                a = i,\n                u = !r;\n              if (null == t) return !a;\n              for (t = te(t); i--; ) {\n                var s = n[i];\n                if (u && s[2] ? s[1] !== t[s[0]] : !(s[0] in t)) return !1;\n              }\n              for (; ++i < a; ) {\n                var c = (s = n[i])[0],\n                  l = t[c],\n                  f = s[1];\n                if (u && s[2]) {\n                  if (l === o && !(c in t)) return !1;\n                } else {\n                  var p = new xr();\n                  if (r) var h = r(l, f, c, t, e, p);\n                  if (!(h === o ? oi(f, l, v | g, r, p) : h)) return !1;\n                }\n              }\n              return !0;\n            }\n            function ui(t) {\n              return (\n                !(\n                  !Eu(t) ||\n                  (function(t) {\n                    return !!fe && fe in t;\n                  })(t)\n                ) && (_u(t) ? ve : Wt).test(la(t))\n              );\n            }\n            function si(t) {\n              return \"function\" == typeof t\n                ? t\n                : null == t\n                  ? Ts\n                  : \"object\" == typeof t\n                    ? gu(t)\n                      ? di(t[0], t[1])\n                      : hi(t)\n                    : Ps(t);\n            }\n            function ci(t) {\n              if (!Zo(t)) return Bn(t);\n              var e = [];\n              for (var n in te(t)) ce.call(t, n) && \"constructor\" != n && e.push(n);\n              return e;\n            }\n            function li(t) {\n              if (!Eu(t))\n                return (function(t) {\n                  var e = [];\n                  if (null != t) for (var n in te(t)) e.push(n);\n                  return e;\n                })(t);\n              var e = Zo(t),\n                n = [];\n              for (var r in t) (\"constructor\" != r || (!e && ce.call(t, r))) && n.push(r);\n              return n;\n            }\n            function fi(t, e) {\n              return t < e;\n            }\n            function pi(t, e) {\n              var r = -1,\n                i = $u(t) ? n(t.length) : [];\n              return (\n                Vr(t, function(t, n, o) {\n                  i[++r] = e(t, n, o);\n                }),\n                i\n              );\n            }\n            function hi(t) {\n              var e = Po(t);\n              return 1 == e.length && e[0][2]\n                ? Qo(e[0][0], e[0][1])\n                : function(n) {\n                    return n === t || ai(n, t, e);\n                  };\n            }\n            function di(t, e) {\n              return Ko(t) && Xo(e)\n                ? Qo(ca(t), e)\n                : function(n) {\n                    var r = Xu(n, t);\n                    return r === o && r === e ? Qu(n, t) : oi(e, r, v | g);\n                  };\n            }\n            function vi(t, e, n, r, i) {\n              t !== e &&\n                zr(\n                  e,\n                  function(a, u) {\n                    if (Eu(a))\n                      i || (i = new xr()),\n                        (function(t, e, n, r, i, a, u) {\n                          var s = Tn(t, n),\n                            c = Tn(e, n),\n                            l = u.get(c);\n                          if (l) kr(t, n, l);\n                          else {\n                            var f = a ? a(s, c, n + \"\", t, e, u) : o,\n                              p = f === o;\n                            if (p) {\n                              var h = gu(c),\n                                d = !h && bu(c),\n                                v = !h && !d && Du(c);\n                              (f = c),\n                                h || d || v\n                                  ? gu(s)\n                                    ? (f = s)\n                                    : yu(s)\n                                      ? (f = no(s))\n                                      : d\n                                        ? ((p = !1), (f = Yi(c, !0)))\n                                        : v\n                                          ? ((p = !1), (f = Xi(c, !0)))\n                                          : (f = [])\n                                  : Ou(c) || vu(c)\n                                    ? ((f = s),\n                                      vu(s) ? (f = Hu(s)) : (!Eu(s) || (r && _u(s))) && (f = Bo(c)))\n                                    : (p = !1);\n                            }\n                            p && (u.set(c, f), i(f, c, r, a, u), u.delete(c)), kr(t, n, f);\n                          }\n                        })(t, e, u, n, vi, r, i);\n                    else {\n                      var s = r ? r(Tn(t, u), a, u + \"\", t, e, i) : o;\n                      s === o && (s = a), kr(t, u, s);\n                    }\n                  },\n                  is\n                );\n            }\n            function gi(t, e) {\n              var n = t.length;\n              if (n) return Wo((e += e < 0 ? n : 0), n) ? t[e] : o;\n            }\n            function mi(t, e, n) {\n              var r = -1;\n              return (\n                (e = Qe(e.length ? e : [Ts], mn(Io()))),\n                (function(t, e) {\n                  var n = t.length;\n                  for (t.sort(e); n--; ) t[n] = t[n].value;\n                  return t;\n                })(\n                  pi(t, function(t, n, i) {\n                    return {\n                      criteria: Qe(e, function(e) {\n                        return e(t);\n                      }),\n                      index: ++r,\n                      value: t\n                    };\n                  }),\n                  function(t, e) {\n                    return (function(t, e, n) {\n                      for (\n                        var r = -1, i = t.criteria, o = e.criteria, a = i.length, u = n.length;\n                        ++r < a;\n\n                      ) {\n                        var s = Qi(i[r], o[r]);\n                        if (s) {\n                          if (r >= u) return s;\n                          var c = n[r];\n                          return s * (\"desc\" == c ? -1 : 1);\n                        }\n                      }\n                      return t.index - e.index;\n                    })(t, e, n);\n                  }\n                )\n              );\n            }\n            function $i(t, e, n) {\n              for (var r = -1, i = e.length, o = {}; ++r < i; ) {\n                var a = e[r],\n                  u = Yr(t, a);\n                n(u, a) && Ei(o, Wi(a, t), u);\n              }\n              return o;\n            }\n            function yi(t, e, n, r) {\n              var i = r ? cn : sn,\n                o = -1,\n                a = e.length,\n                u = t;\n              for (t === e && (e = no(e)), n && (u = Qe(t, mn(n))); ++o < a; )\n                for (var s = 0, c = e[o], l = n ? n(c) : c; (s = i(u, l, s, r)) > -1; )\n                  u !== t && Le.call(u, s, 1), Le.call(t, s, 1);\n              return t;\n            }\n            function bi(t, e) {\n              for (var n = t ? e.length : 0, r = n - 1; n--; ) {\n                var i = e[n];\n                if (n == r || i !== o) {\n                  var o = i;\n                  Wo(i) ? Le.call(t, i, 1) : Pi(t, i);\n                }\n              }\n              return t;\n            }\n            function wi(t, e) {\n              return t + Vn(Jn() * (e - t + 1));\n            }\n            function xi(t, e) {\n              var n = \"\";\n              if (!t || e < 1 || e > L) return n;\n              do {\n                e % 2 && (n += t), (e = Vn(e / 2)) && (t += t);\n              } while (e);\n              return n;\n            }\n            function _i(t, e) {\n              return ia(ta(t, e, Ts), t + \"\");\n            }\n            function Ci(t) {\n              return Cr(ps(t));\n            }\n            function Si(t, e) {\n              var n = ps(t);\n              return ua(n, Lr(e, 0, n.length));\n            }\n            function Ei(t, e, n, r) {\n              if (!Eu(t)) return t;\n              for (\n                var i = -1, a = (e = Wi(e, t)).length, u = a - 1, s = t;\n                null != s && ++i < a;\n\n              ) {\n                var c = ca(e[i]),\n                  l = n;\n                if (i != u) {\n                  var f = s[c];\n                  (l = r ? r(f, c, s) : o) === o && (l = Eu(f) ? f : Wo(e[i + 1]) ? [] : {});\n                }\n                Ar(s, c, l), (s = s[c]);\n              }\n              return t;\n            }\n            var ki = rr\n                ? function(t, e) {\n                    return rr.set(t, e), t;\n                  }\n                : Ts,\n              Ai = on\n                ? function(t, e) {\n                    return on(t, \"toString\", {\n                      configurable: !0,\n                      enumerable: !1,\n                      value: Es(e),\n                      writable: !0\n                    });\n                  }\n                : Ts;\n            function Ti(t) {\n              return ua(ps(t));\n            }\n            function Oi(t, e, r) {\n              var i = -1,\n                o = t.length;\n              e < 0 && (e = -e > o ? 0 : o + e),\n                (r = r > o ? o : r) < 0 && (r += o),\n                (o = e > r ? 0 : (r - e) >>> 0),\n                (e >>>= 0);\n              for (var a = n(o); ++i < o; ) a[i] = t[i + e];\n              return a;\n            }\n            function ji(t, e) {\n              var n;\n              return (\n                Vr(t, function(t, r, i) {\n                  return !(n = e(t, r, i));\n                }),\n                !!n\n              );\n            }\n            function Ni(t, e, n) {\n              var r = 0,\n                i = null == t ? r : t.length;\n              if (\"number\" == typeof e && e == e && i <= V) {\n                for (; r < i; ) {\n                  var o = (r + i) >>> 1,\n                    a = t[o];\n                  null !== a && !Lu(a) && (n ? a <= e : a < e) ? (r = o + 1) : (i = o);\n                }\n                return i;\n              }\n              return Mi(t, e, Ts, n);\n            }\n            function Mi(t, e, n, r) {\n              e = n(e);\n              for (\n                var i = 0,\n                  a = null == t ? 0 : t.length,\n                  u = e != e,\n                  s = null === e,\n                  c = Lu(e),\n                  l = e === o;\n                i < a;\n\n              ) {\n                var f = Vn((i + a) / 2),\n                  p = n(t[f]),\n                  h = p !== o,\n                  d = null === p,\n                  v = p == p,\n                  g = Lu(p);\n                if (u) var m = r || v;\n                else\n                  m = l\n                    ? v && (r || h)\n                    : s\n                      ? v && h && (r || !d)\n                      : c\n                        ? v && h && !d && (r || !g)\n                        : !d && !g && (r ? p <= e : p < e);\n                m ? (i = f + 1) : (a = f);\n              }\n              return Wn(a, P);\n            }\n            function Li(t, e) {\n              for (var n = -1, r = t.length, i = 0, o = []; ++n < r; ) {\n                var a = t[n],\n                  u = e ? e(a) : a;\n                if (!n || !pu(u, s)) {\n                  var s = u;\n                  o[i++] = 0 === a ? 0 : a;\n                }\n              }\n              return o;\n            }\n            function Di(t) {\n              return \"number\" == typeof t ? t : Lu(t) ? I : +t;\n            }\n            function Ii(t) {\n              if (\"string\" == typeof t) return t;\n              if (gu(t)) return Qe(t, Ii) + \"\";\n              if (Lu(t)) return pr ? pr.call(t) : \"\";\n              var e = t + \"\";\n              return \"0\" == e && 1 / t == -M ? \"-0\" : e;\n            }\n            function Ri(t, e, n) {\n              var r = -1,\n                i = Ze,\n                o = t.length,\n                u = !0,\n                s = [],\n                c = s;\n              if (n) (u = !1), (i = Xe);\n              else if (o >= a) {\n                var l = e ? null : _o(t);\n                if (l) return On(l);\n                (u = !1), (i = yn), (c = new wr());\n              } else c = e ? [] : s;\n              t: for (; ++r < o; ) {\n                var f = t[r],\n                  p = e ? e(f) : f;\n                if (((f = n || 0 !== f ? f : 0), u && p == p)) {\n                  for (var h = c.length; h--; ) if (c[h] === p) continue t;\n                  e && c.push(p), s.push(f);\n                } else i(c, p, n) || (c !== s && c.push(p), s.push(f));\n              }\n              return s;\n            }\n            function Pi(t, e) {\n              return null == (t = ea(t, (e = Wi(e, t)))) || delete t[ca(xa(e))];\n            }\n            function Vi(t, e, n, r) {\n              return Ei(t, e, n(Yr(t, e)), r);\n            }\n            function qi(t, e, n, r) {\n              for (var i = t.length, o = r ? i : -1; (r ? o-- : ++o < i) && e(t[o], o, t); );\n              return n ? Oi(t, r ? 0 : o, r ? o + 1 : i) : Oi(t, r ? o + 1 : 0, r ? i : o);\n            }\n            function Ui(t, e) {\n              var n = t;\n              return (\n                n instanceof mr && (n = n.value()),\n                en(\n                  e,\n                  function(t, e) {\n                    return e.func.apply(e.thisArg, tn([t], e.args));\n                  },\n                  n\n                )\n              );\n            }\n            function Fi(t, e, r) {\n              var i = t.length;\n              if (i < 2) return i ? Ri(t[0]) : [];\n              for (var o = -1, a = n(i); ++o < i; )\n                for (var u = t[o], s = -1; ++s < i; ) s != o && (a[o] = Pr(a[o] || u, t[s], e, r));\n              return Ri(Br(a, 1), e, r);\n            }\n            function Hi(t, e, n) {\n              for (var r = -1, i = t.length, a = e.length, u = {}; ++r < i; ) {\n                var s = r < a ? e[r] : o;\n                n(u, t[r], s);\n              }\n              return u;\n            }\n            function Bi(t) {\n              return yu(t) ? t : [];\n            }\n            function zi(t) {\n              return \"function\" == typeof t ? t : Ts;\n            }\n            function Wi(t, e) {\n              return gu(t) ? t : Ko(t, e) ? [t] : sa(Bu(t));\n            }\n            var Gi = _i;\n            function Ki(t, e, n) {\n              var r = t.length;\n              return (n = n === o ? r : n), !e && n >= r ? t : Oi(t, e, n);\n            }\n            var Ji =\n              hn ||\n              function(t) {\n                return Me.clearTimeout(t);\n              };\n            function Yi(t, e) {\n              if (e) return t.slice();\n              var n = t.length,\n                r = xe ? xe(n) : new t.constructor(n);\n              return t.copy(r), r;\n            }\n            function Zi(t) {\n              var e = new t.constructor(t.byteLength);\n              return new be(e).set(new be(t)), e;\n            }\n            function Xi(t, e) {\n              var n = e ? Zi(t.buffer) : t.buffer;\n              return new t.constructor(n, t.byteOffset, t.length);\n            }\n            function Qi(t, e) {\n              if (t !== e) {\n                var n = t !== o,\n                  r = null === t,\n                  i = t == t,\n                  a = Lu(t),\n                  u = e !== o,\n                  s = null === e,\n                  c = e == e,\n                  l = Lu(e);\n                if (\n                  (!s && !l && !a && t > e) ||\n                  (a && u && c && !s && !l) ||\n                  (r && u && c) ||\n                  (!n && c) ||\n                  !i\n                )\n                  return 1;\n                if (\n                  (!r && !a && !l && t < e) ||\n                  (l && n && i && !r && !a) ||\n                  (s && n && i) ||\n                  (!u && i) ||\n                  !c\n                )\n                  return -1;\n              }\n              return 0;\n            }\n            function to(t, e, r, i) {\n              for (\n                var o = -1,\n                  a = t.length,\n                  u = r.length,\n                  s = -1,\n                  c = e.length,\n                  l = zn(a - u, 0),\n                  f = n(c + l),\n                  p = !i;\n                ++s < c;\n\n              )\n                f[s] = e[s];\n              for (; ++o < u; ) (p || o < a) && (f[r[o]] = t[o]);\n              for (; l--; ) f[s++] = t[o++];\n              return f;\n            }\n            function eo(t, e, r, i) {\n              for (\n                var o = -1,\n                  a = t.length,\n                  u = -1,\n                  s = r.length,\n                  c = -1,\n                  l = e.length,\n                  f = zn(a - s, 0),\n                  p = n(f + l),\n                  h = !i;\n                ++o < f;\n\n              )\n                p[o] = t[o];\n              for (var d = o; ++c < l; ) p[d + c] = e[c];\n              for (; ++u < s; ) (h || o < a) && (p[d + r[u]] = t[o++]);\n              return p;\n            }\n            function no(t, e) {\n              var r = -1,\n                i = t.length;\n              for (e || (e = n(i)); ++r < i; ) e[r] = t[r];\n              return e;\n            }\n            function ro(t, e, n, r) {\n              var i = !n;\n              n || (n = {});\n              for (var a = -1, u = e.length; ++a < u; ) {\n                var s = e[a],\n                  c = r ? r(n[s], t[s], s, n, t) : o;\n                c === o && (c = t[s]), i ? Nr(n, s, c) : Ar(n, s, c);\n              }\n              return n;\n            }\n            function io(t, e) {\n              return function(n, r) {\n                var i = gu(n) ? We : Or,\n                  o = e ? e() : {};\n                return i(n, t, Io(r, 2), o);\n              };\n            }\n            function oo(t) {\n              return _i(function(e, n) {\n                var r = -1,\n                  i = n.length,\n                  a = i > 1 ? n[i - 1] : o,\n                  u = i > 2 ? n[2] : o;\n                for (\n                  a = t.length > 3 && \"function\" == typeof a ? (i--, a) : o,\n                    u && Go(n[0], n[1], u) && ((a = i < 3 ? o : a), (i = 1)),\n                    e = te(e);\n                  ++r < i;\n\n                ) {\n                  var s = n[r];\n                  s && t(e, s, r, a);\n                }\n                return e;\n              });\n            }\n            function ao(t, e) {\n              return function(n, r) {\n                if (null == n) return n;\n                if (!$u(n)) return t(n, r);\n                for (\n                  var i = n.length, o = e ? i : -1, a = te(n);\n                  (e ? o-- : ++o < i) && !1 !== r(a[o], o, a);\n\n                );\n                return n;\n              };\n            }\n            function uo(t) {\n              return function(e, n, r) {\n                for (var i = -1, o = te(e), a = r(e), u = a.length; u--; ) {\n                  var s = a[t ? u : ++i];\n                  if (!1 === n(o[s], s, o)) break;\n                }\n                return e;\n              };\n            }\n            function so(t) {\n              return function(e) {\n                var n = Sn((e = Bu(e))) ? Mn(e) : o,\n                  r = n ? n[0] : e.charAt(0),\n                  i = n ? Ki(n, 1).join(\"\") : e.slice(1);\n                return r[t]() + i;\n              };\n            }\n            function co(t) {\n              return function(e) {\n                return en(_s(vs(e).replace($e, \"\")), t, \"\");\n              };\n            }\n            function lo(t) {\n              return function() {\n                var e = arguments;\n                switch (e.length) {\n                  case 0:\n                    return new t();\n                  case 1:\n                    return new t(e[0]);\n                  case 2:\n                    return new t(e[0], e[1]);\n                  case 3:\n                    return new t(e[0], e[1], e[2]);\n                  case 4:\n                    return new t(e[0], e[1], e[2], e[3]);\n                  case 5:\n                    return new t(e[0], e[1], e[2], e[3], e[4]);\n                  case 6:\n                    return new t(e[0], e[1], e[2], e[3], e[4], e[5]);\n                  case 7:\n                    return new t(e[0], e[1], e[2], e[3], e[4], e[5], e[6]);\n                }\n                var n = dr(t.prototype),\n                  r = t.apply(n, e);\n                return Eu(r) ? r : n;\n              };\n            }\n            function fo(t) {\n              return function(e, n, r) {\n                var i = te(e);\n                if (!$u(e)) {\n                  var a = Io(n, 3);\n                  (e = rs(e)),\n                    (n = function(t) {\n                      return a(i[t], t, i);\n                    });\n                }\n                var u = t(e, n, r);\n                return u > -1 ? i[a ? e[u] : u] : o;\n              };\n            }\n            function po(t) {\n              return Oo(function(e) {\n                var n = e.length,\n                  r = n,\n                  i = gr.prototype.thru;\n                for (t && e.reverse(); r--; ) {\n                  var a = e[r];\n                  if (\"function\" != typeof a) throw new re(s);\n                  if (i && !u && \"wrapper\" == Lo(a)) var u = new gr([], !0);\n                }\n                for (r = u ? r : n; ++r < n; ) {\n                  var c = Lo((a = e[r])),\n                    l = \"wrapper\" == c ? Mo(a) : o;\n                  u =\n                    l && Jo(l[0]) && l[1] == (C | b | x | S) && !l[4].length && 1 == l[9]\n                      ? u[Lo(l[0])].apply(u, l[3])\n                      : 1 == a.length && Jo(a)\n                        ? u[c]()\n                        : u.thru(a);\n                }\n                return function() {\n                  var t = arguments,\n                    r = t[0];\n                  if (u && 1 == t.length && gu(r)) return u.plant(r).value();\n                  for (var i = 0, o = n ? e[i].apply(this, t) : r; ++i < n; )\n                    o = e[i].call(this, o);\n                  return o;\n                };\n              });\n            }\n            function ho(t, e, r, i, a, u, s, c, l, f) {\n              var p = e & C,\n                h = e & m,\n                d = e & $,\n                v = e & (b | w),\n                g = e & E,\n                y = d ? o : lo(t);\n              return function m() {\n                for (var $ = arguments.length, b = n($), w = $; w--; ) b[w] = arguments[w];\n                if (v)\n                  var x = Do(m),\n                    _ = (function(t, e) {\n                      for (var n = t.length, r = 0; n--; ) t[n] === e && ++r;\n                      return r;\n                    })(b, x);\n                if ((i && (b = to(b, i, a, v)), u && (b = eo(b, u, s, v)), ($ -= _), v && $ < f)) {\n                  var C = An(b, x);\n                  return wo(t, e, ho, m.placeholder, r, b, C, c, l, f - $);\n                }\n                var S = h ? r : this,\n                  E = d ? S[t] : t;\n                return (\n                  ($ = b.length),\n                  c\n                    ? (b = (function(t, e) {\n                        for (var n = t.length, r = Wn(e.length, n), i = no(t); r--; ) {\n                          var a = e[r];\n                          t[r] = Wo(a, n) ? i[a] : o;\n                        }\n                        return t;\n                      })(b, c))\n                    : g && $ > 1 && b.reverse(),\n                  p && l < $ && (b.length = l),\n                  this && this !== Me && this instanceof m && (E = y || lo(E)),\n                  E.apply(S, b)\n                );\n              };\n            }\n            function vo(t, e) {\n              return function(n, r) {\n                return (function(t, e, n, r) {\n                  return (\n                    Gr(t, function(t, i, o) {\n                      e(r, n(t), i, o);\n                    }),\n                    r\n                  );\n                })(n, t, e(r), {});\n              };\n            }\n            function go(t, e) {\n              return function(n, r) {\n                var i;\n                if (n === o && r === o) return e;\n                if ((n !== o && (i = n), r !== o)) {\n                  if (i === o) return r;\n                  \"string\" == typeof n || \"string\" == typeof r\n                    ? ((n = Ii(n)), (r = Ii(r)))\n                    : ((n = Di(n)), (r = Di(r))),\n                    (i = t(n, r));\n                }\n                return i;\n              };\n            }\n            function mo(t) {\n              return Oo(function(e) {\n                return (\n                  (e = Qe(e, mn(Io()))),\n                  _i(function(n) {\n                    var r = this;\n                    return t(e, function(t) {\n                      return ze(t, r, n);\n                    });\n                  })\n                );\n              });\n            }\n            function $o(t, e) {\n              var n = (e = e === o ? \" \" : Ii(e)).length;\n              if (n < 2) return n ? xi(e, t) : e;\n              var r = xi(e, Pn(t / Nn(e)));\n              return Sn(e) ? Ki(Mn(r), 0, t).join(\"\") : r.slice(0, t);\n            }\n            function yo(t) {\n              return function(e, r, i) {\n                return (\n                  i && \"number\" != typeof i && Go(e, r, i) && (r = i = o),\n                  (e = Vu(e)),\n                  r === o ? ((r = e), (e = 0)) : (r = Vu(r)),\n                  (function(t, e, r, i) {\n                    for (var o = -1, a = zn(Pn((e - t) / (r || 1)), 0), u = n(a); a--; )\n                      (u[i ? a : ++o] = t), (t += r);\n                    return u;\n                  })(e, r, (i = i === o ? (e < r ? 1 : -1) : Vu(i)), t)\n                );\n              };\n            }\n            function bo(t) {\n              return function(e, n) {\n                return (\n                  (\"string\" == typeof e && \"string\" == typeof n) || ((e = Fu(e)), (n = Fu(n))),\n                  t(e, n)\n                );\n              };\n            }\n            function wo(t, e, n, r, i, a, u, s, c, l) {\n              var f = e & b;\n              (e |= f ? x : _), (e &= ~(f ? _ : x)) & y || (e &= ~(m | $));\n              var p = [t, e, i, f ? a : o, f ? u : o, f ? o : a, f ? o : u, s, c, l],\n                h = n.apply(o, p);\n              return Jo(t) && na(h, p), (h.placeholder = r), oa(h, t, e);\n            }\n            function xo(t) {\n              var e = Qt[t];\n              return function(t, n) {\n                if (((t = Fu(t)), (n = null == n ? 0 : Wn(qu(n), 292)))) {\n                  var r = (Bu(t) + \"e\").split(\"e\");\n                  return +(\n                    (r = (Bu(e(r[0] + \"e\" + (+r[1] + n))) + \"e\").split(\"e\"))[0] +\n                    \"e\" +\n                    (+r[1] - n)\n                  );\n                }\n                return e(t);\n              };\n            }\n            var _o =\n              tr && 1 / On(new tr([, -0]))[1] == M\n                ? function(t) {\n                    return new tr(t);\n                  }\n                : Ls;\n            function Co(t) {\n              return function(e) {\n                var n = Fo(e);\n                return n == Y\n                  ? En(e)\n                  : n == nt\n                    ? jn(e)\n                    : (function(t, e) {\n                        return Qe(e, function(e) {\n                          return [e, t[e]];\n                        });\n                      })(e, t(e));\n              };\n            }\n            function So(t, e, r, i, a, u, c, l) {\n              var p = e & $;\n              if (!p && \"function\" != typeof t) throw new re(s);\n              var h = i ? i.length : 0;\n              if (\n                (h || ((e &= ~(x | _)), (i = a = o)),\n                (c = c === o ? c : zn(qu(c), 0)),\n                (l = l === o ? l : qu(l)),\n                (h -= a ? a.length : 0),\n                e & _)\n              ) {\n                var d = i,\n                  v = a;\n                i = a = o;\n              }\n              var g = p ? o : Mo(t),\n                E = [t, e, r, i, a, d, v, u, c, l];\n              if (\n                (g &&\n                  (function(t, e) {\n                    var n = t[1],\n                      r = e[1],\n                      i = n | r,\n                      o = i < (m | $ | C),\n                      a =\n                        (r == C && n == b) ||\n                        (r == C && n == S && t[7].length <= e[8]) ||\n                        (r == (C | S) && e[7].length <= e[8] && n == b);\n                    if (!o && !a) return t;\n                    r & m && ((t[2] = e[2]), (i |= n & m ? 0 : y));\n                    var u = e[3];\n                    if (u) {\n                      var s = t[3];\n                      (t[3] = s ? to(s, u, e[4]) : u), (t[4] = s ? An(t[3], f) : e[4]);\n                    }\n                    (u = e[5]) &&\n                      ((s = t[5]),\n                      (t[5] = s ? eo(s, u, e[6]) : u),\n                      (t[6] = s ? An(t[5], f) : e[6])),\n                      (u = e[7]) && (t[7] = u),\n                      r & C && (t[8] = null == t[8] ? e[8] : Wn(t[8], e[8])),\n                      null == t[9] && (t[9] = e[9]),\n                      (t[0] = e[0]),\n                      (t[1] = i);\n                  })(E, g),\n                (t = E[0]),\n                (e = E[1]),\n                (r = E[2]),\n                (i = E[3]),\n                (a = E[4]),\n                !(l = E[9] = E[9] === o ? (p ? 0 : t.length) : zn(E[9] - h, 0)) &&\n                  e & (b | w) &&\n                  (e &= ~(b | w)),\n                e && e != m)\n              )\n                k =\n                  e == b || e == w\n                    ? (function(t, e, r) {\n                        var i = lo(t);\n                        return function a() {\n                          for (var u = arguments.length, s = n(u), c = u, l = Do(a); c--; )\n                            s[c] = arguments[c];\n                          var f = u < 3 && s[0] !== l && s[u - 1] !== l ? [] : An(s, l);\n                          return (u -= f.length) < r\n                            ? wo(t, e, ho, a.placeholder, o, s, f, o, o, r - u)\n                            : ze(this && this !== Me && this instanceof a ? i : t, this, s);\n                        };\n                      })(t, e, l)\n                    : (e != x && e != (m | x)) || a.length\n                      ? ho.apply(o, E)\n                      : (function(t, e, r, i) {\n                          var o = e & m,\n                            a = lo(t);\n                          return function e() {\n                            for (\n                              var u = -1,\n                                s = arguments.length,\n                                c = -1,\n                                l = i.length,\n                                f = n(l + s),\n                                p = this && this !== Me && this instanceof e ? a : t;\n                              ++c < l;\n\n                            )\n                              f[c] = i[c];\n                            for (; s--; ) f[c++] = arguments[++u];\n                            return ze(p, o ? r : this, f);\n                          };\n                        })(t, e, r, i);\n              else\n                var k = (function(t, e, n) {\n                  var r = e & m,\n                    i = lo(t);\n                  return function e() {\n                    return (this && this !== Me && this instanceof e ? i : t).apply(\n                      r ? n : this,\n                      arguments\n                    );\n                  };\n                })(t, e, r);\n              return oa((g ? ki : na)(k, E), t, e);\n            }\n            function Eo(t, e, n, r) {\n              return t === o || (pu(t, ae[n]) && !ce.call(r, n)) ? e : t;\n            }\n            function ko(t, e, n, r, i, a) {\n              return Eu(t) && Eu(e) && (a.set(e, t), vi(t, e, o, ko, a), a.delete(e)), t;\n            }\n            function Ao(t) {\n              return Ou(t) ? o : t;\n            }\n            function To(t, e, n, r, i, a) {\n              var u = n & v,\n                s = t.length,\n                c = e.length;\n              if (s != c && !(u && c > s)) return !1;\n              var l = a.get(t);\n              if (l && a.get(e)) return l == e;\n              var f = -1,\n                p = !0,\n                h = n & g ? new wr() : o;\n              for (a.set(t, e), a.set(e, t); ++f < s; ) {\n                var d = t[f],\n                  m = e[f];\n                if (r) var $ = u ? r(m, d, f, e, t, a) : r(d, m, f, t, e, a);\n                if ($ !== o) {\n                  if ($) continue;\n                  p = !1;\n                  break;\n                }\n                if (h) {\n                  if (\n                    !rn(e, function(t, e) {\n                      if (!yn(h, e) && (d === t || i(d, t, n, r, a))) return h.push(e);\n                    })\n                  ) {\n                    p = !1;\n                    break;\n                  }\n                } else if (d !== m && !i(d, m, n, r, a)) {\n                  p = !1;\n                  break;\n                }\n              }\n              return a.delete(t), a.delete(e), p;\n            }\n            function Oo(t) {\n              return ia(ta(t, o, ma), t + \"\");\n            }\n            function jo(t) {\n              return Zr(t, rs, qo);\n            }\n            function No(t) {\n              return Zr(t, is, Uo);\n            }\n            var Mo = rr\n              ? function(t) {\n                  return rr.get(t);\n                }\n              : Ls;\n            function Lo(t) {\n              for (var e = t.name + \"\", n = ir[e], r = ce.call(ir, e) ? n.length : 0; r--; ) {\n                var i = n[r],\n                  o = i.func;\n                if (null == o || o == t) return i.name;\n              }\n              return e;\n            }\n            function Do(t) {\n              return (ce.call(hr, \"placeholder\") ? hr : t).placeholder;\n            }\n            function Io() {\n              var t = hr.iteratee || Os;\n              return (t = t === Os ? si : t), arguments.length ? t(arguments[0], arguments[1]) : t;\n            }\n            function Ro(t, e) {\n              var n = t.__data__;\n              return (function(t) {\n                var e = typeof t;\n                return \"string\" == e || \"number\" == e || \"symbol\" == e || \"boolean\" == e\n                  ? \"__proto__\" !== t\n                  : null === t;\n              })(e)\n                ? n[\"string\" == typeof e ? \"string\" : \"hash\"]\n                : n.map;\n            }\n            function Po(t) {\n              for (var e = rs(t), n = e.length; n--; ) {\n                var r = e[n],\n                  i = t[r];\n                e[n] = [r, i, Xo(i)];\n              }\n              return e;\n            }\n            function Vo(t, e) {\n              var n = (function(t, e) {\n                return null == t ? o : t[e];\n              })(t, e);\n              return ui(n) ? n : o;\n            }\n            var qo = qn\n                ? function(t) {\n                    return null == t\n                      ? []\n                      : ((t = te(t)),\n                        Ye(qn(t), function(e) {\n                          return Ne.call(t, e);\n                        }));\n                  }\n                : Us,\n              Uo = qn\n                ? function(t) {\n                    for (var e = []; t; ) tn(e, qo(t)), (t = Ae(t));\n                    return e;\n                  }\n                : Us,\n              Fo = Xr;\n            function Ho(t, e, n) {\n              for (var r = -1, i = (e = Wi(e, t)).length, o = !1; ++r < i; ) {\n                var a = ca(e[r]);\n                if (!(o = null != t && n(t, a))) break;\n                t = t[a];\n              }\n              return o || ++r != i\n                ? o\n                : !!(i = null == t ? 0 : t.length) && Su(i) && Wo(a, i) && (gu(t) || vu(t));\n            }\n            function Bo(t) {\n              return \"function\" != typeof t.constructor || Zo(t) ? {} : dr(Ae(t));\n            }\n            function zo(t) {\n              return gu(t) || vu(t) || !!(De && t && t[De]);\n            }\n            function Wo(t, e) {\n              var n = typeof t;\n              return (\n                !!(e = null == e ? L : e) &&\n                (\"number\" == n || (\"symbol\" != n && Kt.test(t))) &&\n                t > -1 &&\n                t % 1 == 0 &&\n                t < e\n              );\n            }\n            function Go(t, e, n) {\n              if (!Eu(n)) return !1;\n              var r = typeof e;\n              return (\n                !!(\"number\" == r ? $u(n) && Wo(e, n.length) : \"string\" == r && e in n) &&\n                pu(n[e], t)\n              );\n            }\n            function Ko(t, e) {\n              if (gu(t)) return !1;\n              var n = typeof t;\n              return (\n                !(\"number\" != n && \"symbol\" != n && \"boolean\" != n && null != t && !Lu(t)) ||\n                Ot.test(t) ||\n                !Tt.test(t) ||\n                (null != e && t in te(e))\n              );\n            }\n            function Jo(t) {\n              var e = Lo(t),\n                n = hr[e];\n              if (\"function\" != typeof n || !(e in mr.prototype)) return !1;\n              if (t === n) return !0;\n              var r = Mo(n);\n              return !!r && t === r[0];\n            }\n            ((Zn && Fo(new Zn(new ArrayBuffer(1))) != ct) ||\n              (Xn && Fo(new Xn()) != Y) ||\n              (Qn && \"[object Promise]\" != Fo(Qn.resolve())) ||\n              (tr && Fo(new tr()) != nt) ||\n              (er && Fo(new er()) != at)) &&\n              (Fo = function(t) {\n                var e = Xr(t),\n                  n = e == Q ? t.constructor : o,\n                  r = n ? la(n) : \"\";\n                if (r)\n                  switch (r) {\n                    case or:\n                      return ct;\n                    case ar:\n                      return Y;\n                    case ur:\n                      return \"[object Promise]\";\n                    case sr:\n                      return nt;\n                    case cr:\n                      return at;\n                  }\n                return e;\n              });\n            var Yo = ue ? _u : Fs;\n            function Zo(t) {\n              var e = t && t.constructor;\n              return t === ((\"function\" == typeof e && e.prototype) || ae);\n            }\n            function Xo(t) {\n              return t == t && !Eu(t);\n            }\n            function Qo(t, e) {\n              return function(n) {\n                return null != n && n[t] === e && (e !== o || t in te(n));\n              };\n            }\n            function ta(t, e, r) {\n              return (\n                (e = zn(e === o ? t.length - 1 : e, 0)),\n                function() {\n                  for (var i = arguments, o = -1, a = zn(i.length - e, 0), u = n(a); ++o < a; )\n                    u[o] = i[e + o];\n                  o = -1;\n                  for (var s = n(e + 1); ++o < e; ) s[o] = i[o];\n                  return (s[e] = r(u)), ze(t, this, s);\n                }\n              );\n            }\n            function ea(t, e) {\n              return e.length < 2 ? t : Yr(t, Oi(e, 0, -1));\n            }\n            var na = aa(ki),\n              ra =\n                Rn ||\n                function(t, e) {\n                  return Me.setTimeout(t, e);\n                },\n              ia = aa(Ai);\n            function oa(t, e, n) {\n              var r = e + \"\";\n              return ia(\n                t,\n                (function(t, e) {\n                  var n = e.length;\n                  if (!n) return t;\n                  var r = n - 1;\n                  return (\n                    (e[r] = (n > 1 ? \"& \" : \"\") + e[r]),\n                    (e = e.join(n > 2 ? \", \" : \" \")),\n                    t.replace(Rt, \"{\\n/* [wrapped with \" + e + \"] */\\n\")\n                  );\n                })(\n                  r,\n                  (function(t, e) {\n                    return (\n                      Ge(q, function(n) {\n                        var r = \"_.\" + n[0];\n                        e & n[1] && !Ze(t, r) && t.push(r);\n                      }),\n                      t.sort()\n                    );\n                  })(\n                    (function(t) {\n                      var e = t.match(Pt);\n                      return e ? e[1].split(Vt) : [];\n                    })(r),\n                    n\n                  )\n                )\n              );\n            }\n            function aa(t) {\n              var e = 0,\n                n = 0;\n              return function() {\n                var r = Gn(),\n                  i = O - (r - n);\n                if (((n = r), i > 0)) {\n                  if (++e >= T) return arguments[0];\n                } else e = 0;\n                return t.apply(o, arguments);\n              };\n            }\n            function ua(t, e) {\n              var n = -1,\n                r = t.length,\n                i = r - 1;\n              for (e = e === o ? r : e; ++n < e; ) {\n                var a = wi(n, i),\n                  u = t[a];\n                (t[a] = t[n]), (t[n] = u);\n              }\n              return (t.length = e), t;\n            }\n            var sa = (function(t) {\n              var e = au(t, function(t) {\n                  return n.size === l && n.clear(), t;\n                }),\n                n = e.cache;\n              return e;\n            })(function(t) {\n              var e = [];\n              return (\n                46 === t.charCodeAt(0) && e.push(\"\"),\n                t.replace(jt, function(t, n, r, i) {\n                  e.push(r ? i.replace(Ut, \"$1\") : n || t);\n                }),\n                e\n              );\n            });\n            function ca(t) {\n              if (\"string\" == typeof t || Lu(t)) return t;\n              var e = t + \"\";\n              return \"0\" == e && 1 / t == -M ? \"-0\" : e;\n            }\n            function la(t) {\n              if (null != t) {\n                try {\n                  return se.call(t);\n                } catch (t) {}\n                try {\n                  return t + \"\";\n                } catch (t) {}\n              }\n              return \"\";\n            }\n            function fa(t) {\n              if (t instanceof mr) return t.clone();\n              var e = new gr(t.__wrapped__, t.__chain__);\n              return (\n                (e.__actions__ = no(t.__actions__)),\n                (e.__index__ = t.__index__),\n                (e.__values__ = t.__values__),\n                e\n              );\n            }\n            var pa = _i(function(t, e) {\n                return yu(t) ? Pr(t, Br(e, 1, yu, !0)) : [];\n              }),\n              ha = _i(function(t, e) {\n                var n = xa(e);\n                return yu(n) && (n = o), yu(t) ? Pr(t, Br(e, 1, yu, !0), Io(n, 2)) : [];\n              }),\n              da = _i(function(t, e) {\n                var n = xa(e);\n                return yu(n) && (n = o), yu(t) ? Pr(t, Br(e, 1, yu, !0), o, n) : [];\n              });\n            function va(t, e, n) {\n              var r = null == t ? 0 : t.length;\n              if (!r) return -1;\n              var i = null == n ? 0 : qu(n);\n              return i < 0 && (i = zn(r + i, 0)), un(t, Io(e, 3), i);\n            }\n            function ga(t, e, n) {\n              var r = null == t ? 0 : t.length;\n              if (!r) return -1;\n              var i = r - 1;\n              return (\n                n !== o && ((i = qu(n)), (i = n < 0 ? zn(r + i, 0) : Wn(i, r - 1))),\n                un(t, Io(e, 3), i, !0)\n              );\n            }\n            function ma(t) {\n              return null != t && t.length ? Br(t, 1) : [];\n            }\n            function $a(t) {\n              return t && t.length ? t[0] : o;\n            }\n            var ya = _i(function(t) {\n                var e = Qe(t, Bi);\n                return e.length && e[0] === t[0] ? ni(e) : [];\n              }),\n              ba = _i(function(t) {\n                var e = xa(t),\n                  n = Qe(t, Bi);\n                return (\n                  e === xa(n) ? (e = o) : n.pop(), n.length && n[0] === t[0] ? ni(n, Io(e, 2)) : []\n                );\n              }),\n              wa = _i(function(t) {\n                var e = xa(t),\n                  n = Qe(t, Bi);\n                return (\n                  (e = \"function\" == typeof e ? e : o) && n.pop(),\n                  n.length && n[0] === t[0] ? ni(n, o, e) : []\n                );\n              });\n            function xa(t) {\n              var e = null == t ? 0 : t.length;\n              return e ? t[e - 1] : o;\n            }\n            var _a = _i(Ca);\n            function Ca(t, e) {\n              return t && t.length && e && e.length ? yi(t, e) : t;\n            }\n            var Sa = Oo(function(t, e) {\n              var n = null == t ? 0 : t.length,\n                r = Mr(t, e);\n              return (\n                bi(\n                  t,\n                  Qe(e, function(t) {\n                    return Wo(t, n) ? +t : t;\n                  }).sort(Qi)\n                ),\n                r\n              );\n            });\n            function Ea(t) {\n              return null == t ? t : Yn.call(t);\n            }\n            var ka = _i(function(t) {\n                return Ri(Br(t, 1, yu, !0));\n              }),\n              Aa = _i(function(t) {\n                var e = xa(t);\n                return yu(e) && (e = o), Ri(Br(t, 1, yu, !0), Io(e, 2));\n              }),\n              Ta = _i(function(t) {\n                var e = xa(t);\n                return (e = \"function\" == typeof e ? e : o), Ri(Br(t, 1, yu, !0), o, e);\n              });\n            function Oa(t) {\n              if (!t || !t.length) return [];\n              var e = 0;\n              return (\n                (t = Ye(t, function(t) {\n                  if (yu(t)) return (e = zn(t.length, e)), !0;\n                })),\n                gn(e, function(e) {\n                  return Qe(t, pn(e));\n                })\n              );\n            }\n            function ja(t, e) {\n              if (!t || !t.length) return [];\n              var n = Oa(t);\n              return null == e\n                ? n\n                : Qe(n, function(t) {\n                    return ze(e, o, t);\n                  });\n            }\n            var Na = _i(function(t, e) {\n                return yu(t) ? Pr(t, e) : [];\n              }),\n              Ma = _i(function(t) {\n                return Fi(Ye(t, yu));\n              }),\n              La = _i(function(t) {\n                var e = xa(t);\n                return yu(e) && (e = o), Fi(Ye(t, yu), Io(e, 2));\n              }),\n              Da = _i(function(t) {\n                var e = xa(t);\n                return (e = \"function\" == typeof e ? e : o), Fi(Ye(t, yu), o, e);\n              }),\n              Ia = _i(Oa);\n            var Ra = _i(function(t) {\n              var e = t.length,\n                n = e > 1 ? t[e - 1] : o;\n              return ja(t, (n = \"function\" == typeof n ? (t.pop(), n) : o));\n            });\n            function Pa(t) {\n              var e = hr(t);\n              return (e.__chain__ = !0), e;\n            }\n            function Va(t, e) {\n              return e(t);\n            }\n            var qa = Oo(function(t) {\n              var e = t.length,\n                n = e ? t[0] : 0,\n                r = this.__wrapped__,\n                i = function(e) {\n                  return Mr(e, t);\n                };\n              return !(e > 1 || this.__actions__.length) && r instanceof mr && Wo(n)\n                ? ((r = r.slice(n, +n + (e ? 1 : 0))).__actions__.push({\n                    func: Va,\n                    args: [i],\n                    thisArg: o\n                  }),\n                  new gr(r, this.__chain__).thru(function(t) {\n                    return e && !t.length && t.push(o), t;\n                  }))\n                : this.thru(i);\n            });\n            var Ua = io(function(t, e, n) {\n              ce.call(t, n) ? ++t[n] : Nr(t, n, 1);\n            });\n            var Fa = fo(va),\n              Ha = fo(ga);\n            function Ba(t, e) {\n              return (gu(t) ? Ge : Vr)(t, Io(e, 3));\n            }\n            function za(t, e) {\n              return (gu(t) ? Ke : qr)(t, Io(e, 3));\n            }\n            var Wa = io(function(t, e, n) {\n              ce.call(t, n) ? t[n].push(e) : Nr(t, n, [e]);\n            });\n            var Ga = _i(function(t, e, r) {\n                var i = -1,\n                  o = \"function\" == typeof e,\n                  a = $u(t) ? n(t.length) : [];\n                return (\n                  Vr(t, function(t) {\n                    a[++i] = o ? ze(e, t, r) : ri(t, e, r);\n                  }),\n                  a\n                );\n              }),\n              Ka = io(function(t, e, n) {\n                Nr(t, n, e);\n              });\n            function Ja(t, e) {\n              return (gu(t) ? Qe : pi)(t, Io(e, 3));\n            }\n            var Ya = io(\n              function(t, e, n) {\n                t[n ? 0 : 1].push(e);\n              },\n              function() {\n                return [[], []];\n              }\n            );\n            var Za = _i(function(t, e) {\n                if (null == t) return [];\n                var n = e.length;\n                return (\n                  n > 1 && Go(t, e[0], e[1])\n                    ? (e = [])\n                    : n > 2 && Go(e[0], e[1], e[2]) && (e = [e[0]]),\n                  mi(t, Br(e, 1), [])\n                );\n              }),\n              Xa =\n                In ||\n                function() {\n                  return Me.Date.now();\n                };\n            function Qa(t, e, n) {\n              return (e = n ? o : e), (e = t && null == e ? t.length : e), So(t, C, o, o, o, o, e);\n            }\n            function tu(t, e) {\n              var n;\n              if (\"function\" != typeof e) throw new re(s);\n              return (\n                (t = qu(t)),\n                function() {\n                  return --t > 0 && (n = e.apply(this, arguments)), t <= 1 && (e = o), n;\n                }\n              );\n            }\n            var eu = _i(function(t, e, n) {\n                var r = m;\n                if (n.length) {\n                  var i = An(n, Do(eu));\n                  r |= x;\n                }\n                return So(t, r, e, n, i);\n              }),\n              nu = _i(function(t, e, n) {\n                var r = m | $;\n                if (n.length) {\n                  var i = An(n, Do(nu));\n                  r |= x;\n                }\n                return So(e, r, t, n, i);\n              });\n            function ru(t, e, n) {\n              var r,\n                i,\n                a,\n                u,\n                c,\n                l,\n                f = 0,\n                p = !1,\n                h = !1,\n                d = !0;\n              if (\"function\" != typeof t) throw new re(s);\n              function v(e) {\n                var n = r,\n                  a = i;\n                return (r = i = o), (f = e), (u = t.apply(a, n));\n              }\n              function g(t) {\n                var n = t - l;\n                return l === o || n >= e || n < 0 || (h && t - f >= a);\n              }\n              function m() {\n                var t = Xa();\n                if (g(t)) return $(t);\n                c = ra(\n                  m,\n                  (function(t) {\n                    var n = e - (t - l);\n                    return h ? Wn(n, a - (t - f)) : n;\n                  })(t)\n                );\n              }\n              function $(t) {\n                return (c = o), d && r ? v(t) : ((r = i = o), u);\n              }\n              function y() {\n                var t = Xa(),\n                  n = g(t);\n                if (((r = arguments), (i = this), (l = t), n)) {\n                  if (c === o)\n                    return (function(t) {\n                      return (f = t), (c = ra(m, e)), p ? v(t) : u;\n                    })(l);\n                  if (h) return (c = ra(m, e)), v(l);\n                }\n                return c === o && (c = ra(m, e)), u;\n              }\n              return (\n                (e = Fu(e) || 0),\n                Eu(n) &&\n                  ((p = !!n.leading),\n                  (a = (h = \"maxWait\" in n) ? zn(Fu(n.maxWait) || 0, e) : a),\n                  (d = \"trailing\" in n ? !!n.trailing : d)),\n                (y.cancel = function() {\n                  c !== o && Ji(c), (f = 0), (r = l = i = c = o);\n                }),\n                (y.flush = function() {\n                  return c === o ? u : $(Xa());\n                }),\n                y\n              );\n            }\n            var iu = _i(function(t, e) {\n                return Rr(t, 1, e);\n              }),\n              ou = _i(function(t, e, n) {\n                return Rr(t, Fu(e) || 0, n);\n              });\n            function au(t, e) {\n              if (\"function\" != typeof t || (null != e && \"function\" != typeof e)) throw new re(s);\n              var n = function() {\n                var r = arguments,\n                  i = e ? e.apply(this, r) : r[0],\n                  o = n.cache;\n                if (o.has(i)) return o.get(i);\n                var a = t.apply(this, r);\n                return (n.cache = o.set(i, a) || o), a;\n              };\n              return (n.cache = new (au.Cache || br)()), n;\n            }\n            function uu(t) {\n              if (\"function\" != typeof t) throw new re(s);\n              return function() {\n                var e = arguments;\n                switch (e.length) {\n                  case 0:\n                    return !t.call(this);\n                  case 1:\n                    return !t.call(this, e[0]);\n                  case 2:\n                    return !t.call(this, e[0], e[1]);\n                  case 3:\n                    return !t.call(this, e[0], e[1], e[2]);\n                }\n                return !t.apply(this, e);\n              };\n            }\n            au.Cache = br;\n            var su = Gi(function(t, e) {\n                var n = (e =\n                  1 == e.length && gu(e[0]) ? Qe(e[0], mn(Io())) : Qe(Br(e, 1), mn(Io()))).length;\n                return _i(function(r) {\n                  for (var i = -1, o = Wn(r.length, n); ++i < o; ) r[i] = e[i].call(this, r[i]);\n                  return ze(t, this, r);\n                });\n              }),\n              cu = _i(function(t, e) {\n                var n = An(e, Do(cu));\n                return So(t, x, o, e, n);\n              }),\n              lu = _i(function(t, e) {\n                var n = An(e, Do(lu));\n                return So(t, _, o, e, n);\n              }),\n              fu = Oo(function(t, e) {\n                return So(t, S, o, o, o, e);\n              });\n            function pu(t, e) {\n              return t === e || (t != t && e != e);\n            }\n            var hu = bo(Qr),\n              du = bo(function(t, e) {\n                return t >= e;\n              }),\n              vu = ii(\n                (function() {\n                  return arguments;\n                })()\n              )\n                ? ii\n                : function(t) {\n                    return ku(t) && ce.call(t, \"callee\") && !Ne.call(t, \"callee\");\n                  },\n              gu = n.isArray,\n              mu = Ve\n                ? mn(Ve)\n                : function(t) {\n                    return ku(t) && Xr(t) == st;\n                  };\n            function $u(t) {\n              return null != t && Su(t.length) && !_u(t);\n            }\n            function yu(t) {\n              return ku(t) && $u(t);\n            }\n            var bu = Un || Fs,\n              wu = qe\n                ? mn(qe)\n                : function(t) {\n                    return ku(t) && Xr(t) == z;\n                  };\n            function xu(t) {\n              if (!ku(t)) return !1;\n              var e = Xr(t);\n              return (\n                e == G ||\n                e == W ||\n                (\"string\" == typeof t.message && \"string\" == typeof t.name && !Ou(t))\n              );\n            }\n            function _u(t) {\n              if (!Eu(t)) return !1;\n              var e = Xr(t);\n              return e == K || e == J || e == H || e == tt;\n            }\n            function Cu(t) {\n              return \"number\" == typeof t && t == qu(t);\n            }\n            function Su(t) {\n              return \"number\" == typeof t && t > -1 && t % 1 == 0 && t <= L;\n            }\n            function Eu(t) {\n              var e = typeof t;\n              return null != t && (\"object\" == e || \"function\" == e);\n            }\n            function ku(t) {\n              return null != t && \"object\" == typeof t;\n            }\n            var Au = Ue\n              ? mn(Ue)\n              : function(t) {\n                  return ku(t) && Fo(t) == Y;\n                };\n            function Tu(t) {\n              return \"number\" == typeof t || (ku(t) && Xr(t) == Z);\n            }\n            function Ou(t) {\n              if (!ku(t) || Xr(t) != Q) return !1;\n              var e = Ae(t);\n              if (null === e) return !0;\n              var n = ce.call(e, \"constructor\") && e.constructor;\n              return \"function\" == typeof n && n instanceof n && se.call(n) == he;\n            }\n            var ju = Fe\n              ? mn(Fe)\n              : function(t) {\n                  return ku(t) && Xr(t) == et;\n                };\n            var Nu = He\n              ? mn(He)\n              : function(t) {\n                  return ku(t) && Fo(t) == nt;\n                };\n            function Mu(t) {\n              return \"string\" == typeof t || (!gu(t) && ku(t) && Xr(t) == rt);\n            }\n            function Lu(t) {\n              return \"symbol\" == typeof t || (ku(t) && Xr(t) == it);\n            }\n            var Du = Be\n              ? mn(Be)\n              : function(t) {\n                  return ku(t) && Su(t.length) && !!Ee[Xr(t)];\n                };\n            var Iu = bo(fi),\n              Ru = bo(function(t, e) {\n                return t <= e;\n              });\n            function Pu(t) {\n              if (!t) return [];\n              if ($u(t)) return Mu(t) ? Mn(t) : no(t);\n              if (Re && t[Re])\n                return (function(t) {\n                  for (var e, n = []; !(e = t.next()).done; ) n.push(e.value);\n                  return n;\n                })(t[Re]());\n              var e = Fo(t);\n              return (e == Y ? En : e == nt ? On : ps)(t);\n            }\n            function Vu(t) {\n              return t\n                ? (t = Fu(t)) === M || t === -M\n                  ? (t < 0 ? -1 : 1) * D\n                  : t == t\n                    ? t\n                    : 0\n                : 0 === t\n                  ? t\n                  : 0;\n            }\n            function qu(t) {\n              var e = Vu(t),\n                n = e % 1;\n              return e == e ? (n ? e - n : e) : 0;\n            }\n            function Uu(t) {\n              return t ? Lr(qu(t), 0, R) : 0;\n            }\n            function Fu(t) {\n              if (\"number\" == typeof t) return t;\n              if (Lu(t)) return I;\n              if (Eu(t)) {\n                var e = \"function\" == typeof t.valueOf ? t.valueOf() : t;\n                t = Eu(e) ? e + \"\" : e;\n              }\n              if (\"string\" != typeof t) return 0 === t ? t : +t;\n              t = t.replace(Lt, \"\");\n              var n = zt.test(t);\n              return n || Gt.test(t) ? Oe(t.slice(2), n ? 2 : 8) : Bt.test(t) ? I : +t;\n            }\n            function Hu(t) {\n              return ro(t, is(t));\n            }\n            function Bu(t) {\n              return null == t ? \"\" : Ii(t);\n            }\n            var zu = oo(function(t, e) {\n                if (Zo(e) || $u(e)) ro(e, rs(e), t);\n                else for (var n in e) ce.call(e, n) && Ar(t, n, e[n]);\n              }),\n              Wu = oo(function(t, e) {\n                ro(e, is(e), t);\n              }),\n              Gu = oo(function(t, e, n, r) {\n                ro(e, is(e), t, r);\n              }),\n              Ku = oo(function(t, e, n, r) {\n                ro(e, rs(e), t, r);\n              }),\n              Ju = Oo(Mr);\n            var Yu = _i(function(t, e) {\n                t = te(t);\n                var n = -1,\n                  r = e.length,\n                  i = r > 2 ? e[2] : o;\n                for (i && Go(e[0], e[1], i) && (r = 1); ++n < r; )\n                  for (var a = e[n], u = is(a), s = -1, c = u.length; ++s < c; ) {\n                    var l = u[s],\n                      f = t[l];\n                    (f === o || (pu(f, ae[l]) && !ce.call(t, l))) && (t[l] = a[l]);\n                  }\n                return t;\n              }),\n              Zu = _i(function(t) {\n                return t.push(o, ko), ze(as, o, t);\n              });\n            function Xu(t, e, n) {\n              var r = null == t ? o : Yr(t, e);\n              return r === o ? n : r;\n            }\n            function Qu(t, e) {\n              return null != t && Ho(t, e, ei);\n            }\n            var ts = vo(function(t, e, n) {\n                null != e && \"function\" != typeof e.toString && (e = pe.call(e)), (t[e] = n);\n              }, Es(Ts)),\n              es = vo(function(t, e, n) {\n                null != e && \"function\" != typeof e.toString && (e = pe.call(e)),\n                  ce.call(t, e) ? t[e].push(n) : (t[e] = [n]);\n              }, Io),\n              ns = _i(ri);\n            function rs(t) {\n              return $u(t) ? _r(t) : ci(t);\n            }\n            function is(t) {\n              return $u(t) ? _r(t, !0) : li(t);\n            }\n            var os = oo(function(t, e, n) {\n                vi(t, e, n);\n              }),\n              as = oo(function(t, e, n, r) {\n                vi(t, e, n, r);\n              }),\n              us = Oo(function(t, e) {\n                var n = {};\n                if (null == t) return n;\n                var r = !1;\n                (e = Qe(e, function(e) {\n                  return (e = Wi(e, t)), r || (r = e.length > 1), e;\n                })),\n                  ro(t, No(t), n),\n                  r && (n = Dr(n, p | h | d, Ao));\n                for (var i = e.length; i--; ) Pi(n, e[i]);\n                return n;\n              });\n            var ss = Oo(function(t, e) {\n              return null == t\n                ? {}\n                : (function(t, e) {\n                    return $i(t, e, function(e, n) {\n                      return Qu(t, n);\n                    });\n                  })(t, e);\n            });\n            function cs(t, e) {\n              if (null == t) return {};\n              var n = Qe(No(t), function(t) {\n                return [t];\n              });\n              return (\n                (e = Io(e)),\n                $i(t, n, function(t, n) {\n                  return e(t, n[0]);\n                })\n              );\n            }\n            var ls = Co(rs),\n              fs = Co(is);\n            function ps(t) {\n              return null == t ? [] : $n(t, rs(t));\n            }\n            var hs = co(function(t, e, n) {\n              return (e = e.toLowerCase()), t + (n ? ds(e) : e);\n            });\n            function ds(t) {\n              return xs(Bu(t).toLowerCase());\n            }\n            function vs(t) {\n              return (t = Bu(t)) && t.replace(Jt, xn).replace(ye, \"\");\n            }\n            var gs = co(function(t, e, n) {\n                return t + (n ? \"-\" : \"\") + e.toLowerCase();\n              }),\n              ms = co(function(t, e, n) {\n                return t + (n ? \" \" : \"\") + e.toLowerCase();\n              }),\n              $s = so(\"toLowerCase\");\n            var ys = co(function(t, e, n) {\n              return t + (n ? \"_\" : \"\") + e.toLowerCase();\n            });\n            var bs = co(function(t, e, n) {\n              return t + (n ? \" \" : \"\") + xs(e);\n            });\n            var ws = co(function(t, e, n) {\n                return t + (n ? \" \" : \"\") + e.toUpperCase();\n              }),\n              xs = so(\"toUpperCase\");\n            function _s(t, e, n) {\n              return (\n                (t = Bu(t)),\n                (e = n ? o : e) === o\n                  ? (function(t) {\n                      return _e.test(t);\n                    })(t)\n                    ? (function(t) {\n                        return t.match(we) || [];\n                      })(t)\n                    : (function(t) {\n                        return t.match(qt) || [];\n                      })(t)\n                  : t.match(e) || []\n              );\n            }\n            var Cs = _i(function(t, e) {\n                try {\n                  return ze(t, o, e);\n                } catch (t) {\n                  return xu(t) ? t : new i(t);\n                }\n              }),\n              Ss = Oo(function(t, e) {\n                return (\n                  Ge(e, function(e) {\n                    (e = ca(e)), Nr(t, e, eu(t[e], t));\n                  }),\n                  t\n                );\n              });\n            function Es(t) {\n              return function() {\n                return t;\n              };\n            }\n            var ks = po(),\n              As = po(!0);\n            function Ts(t) {\n              return t;\n            }\n            function Os(t) {\n              return si(\"function\" == typeof t ? t : Dr(t, p));\n            }\n            var js = _i(function(t, e) {\n                return function(n) {\n                  return ri(n, t, e);\n                };\n              }),\n              Ns = _i(function(t, e) {\n                return function(n) {\n                  return ri(t, n, e);\n                };\n              });\n            function Ms(t, e, n) {\n              var r = rs(e),\n                i = Jr(e, r);\n              null != n ||\n                (Eu(e) && (i.length || !r.length)) ||\n                ((n = e), (e = t), (t = this), (i = Jr(e, rs(e))));\n              var o = !(Eu(n) && \"chain\" in n && !n.chain),\n                a = _u(t);\n              return (\n                Ge(i, function(n) {\n                  var r = e[n];\n                  (t[n] = r),\n                    a &&\n                      (t.prototype[n] = function() {\n                        var e = this.__chain__;\n                        if (o || e) {\n                          var n = t(this.__wrapped__);\n                          return (\n                            (n.__actions__ = no(this.__actions__)).push({\n                              func: r,\n                              args: arguments,\n                              thisArg: t\n                            }),\n                            (n.__chain__ = e),\n                            n\n                          );\n                        }\n                        return r.apply(t, tn([this.value()], arguments));\n                      });\n                }),\n                t\n              );\n            }\n            function Ls() {}\n            var Ds = mo(Qe),\n              Is = mo(Je),\n              Rs = mo(rn);\n            function Ps(t) {\n              return Ko(t)\n                ? pn(ca(t))\n                : (function(t) {\n                    return function(e) {\n                      return Yr(e, t);\n                    };\n                  })(t);\n            }\n            var Vs = yo(),\n              qs = yo(!0);\n            function Us() {\n              return [];\n            }\n            function Fs() {\n              return !1;\n            }\n            var Hs = go(function(t, e) {\n                return t + e;\n              }, 0),\n              Bs = xo(\"ceil\"),\n              zs = go(function(t, e) {\n                return t / e;\n              }, 1),\n              Ws = xo(\"floor\");\n            var Gs = go(function(t, e) {\n                return t * e;\n              }, 1),\n              Ks = xo(\"round\"),\n              Js = go(function(t, e) {\n                return t - e;\n              }, 0);\n            return (\n              (hr.after = function(t, e) {\n                if (\"function\" != typeof e) throw new re(s);\n                return (\n                  (t = qu(t)),\n                  function() {\n                    if (--t < 1) return e.apply(this, arguments);\n                  }\n                );\n              }),\n              (hr.ary = Qa),\n              (hr.assign = zu),\n              (hr.assignIn = Wu),\n              (hr.assignInWith = Gu),\n              (hr.assignWith = Ku),\n              (hr.at = Ju),\n              (hr.before = tu),\n              (hr.bind = eu),\n              (hr.bindAll = Ss),\n              (hr.bindKey = nu),\n              (hr.castArray = function() {\n                if (!arguments.length) return [];\n                var t = arguments[0];\n                return gu(t) ? t : [t];\n              }),\n              (hr.chain = Pa),\n              (hr.chunk = function(t, e, r) {\n                e = (r ? Go(t, e, r) : e === o) ? 1 : zn(qu(e), 0);\n                var i = null == t ? 0 : t.length;\n                if (!i || e < 1) return [];\n                for (var a = 0, u = 0, s = n(Pn(i / e)); a < i; ) s[u++] = Oi(t, a, (a += e));\n                return s;\n              }),\n              (hr.compact = function(t) {\n                for (var e = -1, n = null == t ? 0 : t.length, r = 0, i = []; ++e < n; ) {\n                  var o = t[e];\n                  o && (i[r++] = o);\n                }\n                return i;\n              }),\n              (hr.concat = function() {\n                var t = arguments.length;\n                if (!t) return [];\n                for (var e = n(t - 1), r = arguments[0], i = t; i--; ) e[i - 1] = arguments[i];\n                return tn(gu(r) ? no(r) : [r], Br(e, 1));\n              }),\n              (hr.cond = function(t) {\n                var e = null == t ? 0 : t.length,\n                  n = Io();\n                return (\n                  (t = e\n                    ? Qe(t, function(t) {\n                        if (\"function\" != typeof t[1]) throw new re(s);\n                        return [n(t[0]), t[1]];\n                      })\n                    : []),\n                  _i(function(n) {\n                    for (var r = -1; ++r < e; ) {\n                      var i = t[r];\n                      if (ze(i[0], this, n)) return ze(i[1], this, n);\n                    }\n                  })\n                );\n              }),\n              (hr.conforms = function(t) {\n                return (function(t) {\n                  var e = rs(t);\n                  return function(n) {\n                    return Ir(n, t, e);\n                  };\n                })(Dr(t, p));\n              }),\n              (hr.constant = Es),\n              (hr.countBy = Ua),\n              (hr.create = function(t, e) {\n                var n = dr(t);\n                return null == e ? n : jr(n, e);\n              }),\n              (hr.curry = function t(e, n, r) {\n                var i = So(e, b, o, o, o, o, o, (n = r ? o : n));\n                return (i.placeholder = t.placeholder), i;\n              }),\n              (hr.curryRight = function t(e, n, r) {\n                var i = So(e, w, o, o, o, o, o, (n = r ? o : n));\n                return (i.placeholder = t.placeholder), i;\n              }),\n              (hr.debounce = ru),\n              (hr.defaults = Yu),\n              (hr.defaultsDeep = Zu),\n              (hr.defer = iu),\n              (hr.delay = ou),\n              (hr.difference = pa),\n              (hr.differenceBy = ha),\n              (hr.differenceWith = da),\n              (hr.drop = function(t, e, n) {\n                var r = null == t ? 0 : t.length;\n                return r ? Oi(t, (e = n || e === o ? 1 : qu(e)) < 0 ? 0 : e, r) : [];\n              }),\n              (hr.dropRight = function(t, e, n) {\n                var r = null == t ? 0 : t.length;\n                return r ? Oi(t, 0, (e = r - (e = n || e === o ? 1 : qu(e))) < 0 ? 0 : e) : [];\n              }),\n              (hr.dropRightWhile = function(t, e) {\n                return t && t.length ? qi(t, Io(e, 3), !0, !0) : [];\n              }),\n              (hr.dropWhile = function(t, e) {\n                return t && t.length ? qi(t, Io(e, 3), !0) : [];\n              }),\n              (hr.fill = function(t, e, n, r) {\n                var i = null == t ? 0 : t.length;\n                return i\n                  ? (n && \"number\" != typeof n && Go(t, e, n) && ((n = 0), (r = i)),\n                    (function(t, e, n, r) {\n                      var i = t.length;\n                      for (\n                        (n = qu(n)) < 0 && (n = -n > i ? 0 : i + n),\n                          (r = r === o || r > i ? i : qu(r)) < 0 && (r += i),\n                          r = n > r ? 0 : Uu(r);\n                        n < r;\n\n                      )\n                        t[n++] = e;\n                      return t;\n                    })(t, e, n, r))\n                  : [];\n              }),\n              (hr.filter = function(t, e) {\n                return (gu(t) ? Ye : Hr)(t, Io(e, 3));\n              }),\n              (hr.flatMap = function(t, e) {\n                return Br(Ja(t, e), 1);\n              }),\n              (hr.flatMapDeep = function(t, e) {\n                return Br(Ja(t, e), M);\n              }),\n              (hr.flatMapDepth = function(t, e, n) {\n                return (n = n === o ? 1 : qu(n)), Br(Ja(t, e), n);\n              }),\n              (hr.flatten = ma),\n              (hr.flattenDeep = function(t) {\n                return null != t && t.length ? Br(t, M) : [];\n              }),\n              (hr.flattenDepth = function(t, e) {\n                return null != t && t.length ? Br(t, (e = e === o ? 1 : qu(e))) : [];\n              }),\n              (hr.flip = function(t) {\n                return So(t, E);\n              }),\n              (hr.flow = ks),\n              (hr.flowRight = As),\n              (hr.fromPairs = function(t) {\n                for (var e = -1, n = null == t ? 0 : t.length, r = {}; ++e < n; ) {\n                  var i = t[e];\n                  r[i[0]] = i[1];\n                }\n                return r;\n              }),\n              (hr.functions = function(t) {\n                return null == t ? [] : Jr(t, rs(t));\n              }),\n              (hr.functionsIn = function(t) {\n                return null == t ? [] : Jr(t, is(t));\n              }),\n              (hr.groupBy = Wa),\n              (hr.initial = function(t) {\n                return null != t && t.length ? Oi(t, 0, -1) : [];\n              }),\n              (hr.intersection = ya),\n              (hr.intersectionBy = ba),\n              (hr.intersectionWith = wa),\n              (hr.invert = ts),\n              (hr.invertBy = es),\n              (hr.invokeMap = Ga),\n              (hr.iteratee = Os),\n              (hr.keyBy = Ka),\n              (hr.keys = rs),\n              (hr.keysIn = is),\n              (hr.map = Ja),\n              (hr.mapKeys = function(t, e) {\n                var n = {};\n                return (\n                  (e = Io(e, 3)),\n                  Gr(t, function(t, r, i) {\n                    Nr(n, e(t, r, i), t);\n                  }),\n                  n\n                );\n              }),\n              (hr.mapValues = function(t, e) {\n                var n = {};\n                return (\n                  (e = Io(e, 3)),\n                  Gr(t, function(t, r, i) {\n                    Nr(n, r, e(t, r, i));\n                  }),\n                  n\n                );\n              }),\n              (hr.matches = function(t) {\n                return hi(Dr(t, p));\n              }),\n              (hr.matchesProperty = function(t, e) {\n                return di(t, Dr(e, p));\n              }),\n              (hr.memoize = au),\n              (hr.merge = os),\n              (hr.mergeWith = as),\n              (hr.method = js),\n              (hr.methodOf = Ns),\n              (hr.mixin = Ms),\n              (hr.negate = uu),\n              (hr.nthArg = function(t) {\n                return (\n                  (t = qu(t)),\n                  _i(function(e) {\n                    return gi(e, t);\n                  })\n                );\n              }),\n              (hr.omit = us),\n              (hr.omitBy = function(t, e) {\n                return cs(t, uu(Io(e)));\n              }),\n              (hr.once = function(t) {\n                return tu(2, t);\n              }),\n              (hr.orderBy = function(t, e, n, r) {\n                return null == t\n                  ? []\n                  : (gu(e) || (e = null == e ? [] : [e]),\n                    gu((n = r ? o : n)) || (n = null == n ? [] : [n]),\n                    mi(t, e, n));\n              }),\n              (hr.over = Ds),\n              (hr.overArgs = su),\n              (hr.overEvery = Is),\n              (hr.overSome = Rs),\n              (hr.partial = cu),\n              (hr.partialRight = lu),\n              (hr.partition = Ya),\n              (hr.pick = ss),\n              (hr.pickBy = cs),\n              (hr.property = Ps),\n              (hr.propertyOf = function(t) {\n                return function(e) {\n                  return null == t ? o : Yr(t, e);\n                };\n              }),\n              (hr.pull = _a),\n              (hr.pullAll = Ca),\n              (hr.pullAllBy = function(t, e, n) {\n                return t && t.length && e && e.length ? yi(t, e, Io(n, 2)) : t;\n              }),\n              (hr.pullAllWith = function(t, e, n) {\n                return t && t.length && e && e.length ? yi(t, e, o, n) : t;\n              }),\n              (hr.pullAt = Sa),\n              (hr.range = Vs),\n              (hr.rangeRight = qs),\n              (hr.rearg = fu),\n              (hr.reject = function(t, e) {\n                return (gu(t) ? Ye : Hr)(t, uu(Io(e, 3)));\n              }),\n              (hr.remove = function(t, e) {\n                var n = [];\n                if (!t || !t.length) return n;\n                var r = -1,\n                  i = [],\n                  o = t.length;\n                for (e = Io(e, 3); ++r < o; ) {\n                  var a = t[r];\n                  e(a, r, t) && (n.push(a), i.push(r));\n                }\n                return bi(t, i), n;\n              }),\n              (hr.rest = function(t, e) {\n                if (\"function\" != typeof t) throw new re(s);\n                return _i(t, (e = e === o ? e : qu(e)));\n              }),\n              (hr.reverse = Ea),\n              (hr.sampleSize = function(t, e, n) {\n                return (e = (n ? Go(t, e, n) : e === o) ? 1 : qu(e)), (gu(t) ? Sr : Si)(t, e);\n              }),\n              (hr.set = function(t, e, n) {\n                return null == t ? t : Ei(t, e, n);\n              }),\n              (hr.setWith = function(t, e, n, r) {\n                return (r = \"function\" == typeof r ? r : o), null == t ? t : Ei(t, e, n, r);\n              }),\n              (hr.shuffle = function(t) {\n                return (gu(t) ? Er : Ti)(t);\n              }),\n              (hr.slice = function(t, e, n) {\n                var r = null == t ? 0 : t.length;\n                return r\n                  ? (n && \"number\" != typeof n && Go(t, e, n)\n                      ? ((e = 0), (n = r))\n                      : ((e = null == e ? 0 : qu(e)), (n = n === o ? r : qu(n))),\n                    Oi(t, e, n))\n                  : [];\n              }),\n              (hr.sortBy = Za),\n              (hr.sortedUniq = function(t) {\n                return t && t.length ? Li(t) : [];\n              }),\n              (hr.sortedUniqBy = function(t, e) {\n                return t && t.length ? Li(t, Io(e, 2)) : [];\n              }),\n              (hr.split = function(t, e, n) {\n                return (\n                  n && \"number\" != typeof n && Go(t, e, n) && (e = n = o),\n                  (n = n === o ? R : n >>> 0)\n                    ? (t = Bu(t)) &&\n                      (\"string\" == typeof e || (null != e && !ju(e))) &&\n                      !(e = Ii(e)) &&\n                      Sn(t)\n                      ? Ki(Mn(t), 0, n)\n                      : t.split(e, n)\n                    : []\n                );\n              }),\n              (hr.spread = function(t, e) {\n                if (\"function\" != typeof t) throw new re(s);\n                return (\n                  (e = null == e ? 0 : zn(qu(e), 0)),\n                  _i(function(n) {\n                    var r = n[e],\n                      i = Ki(n, 0, e);\n                    return r && tn(i, r), ze(t, this, i);\n                  })\n                );\n              }),\n              (hr.tail = function(t) {\n                var e = null == t ? 0 : t.length;\n                return e ? Oi(t, 1, e) : [];\n              }),\n              (hr.take = function(t, e, n) {\n                return t && t.length ? Oi(t, 0, (e = n || e === o ? 1 : qu(e)) < 0 ? 0 : e) : [];\n              }),\n              (hr.takeRight = function(t, e, n) {\n                var r = null == t ? 0 : t.length;\n                return r ? Oi(t, (e = r - (e = n || e === o ? 1 : qu(e))) < 0 ? 0 : e, r) : [];\n              }),\n              (hr.takeRightWhile = function(t, e) {\n                return t && t.length ? qi(t, Io(e, 3), !1, !0) : [];\n              }),\n              (hr.takeWhile = function(t, e) {\n                return t && t.length ? qi(t, Io(e, 3)) : [];\n              }),\n              (hr.tap = function(t, e) {\n                return e(t), t;\n              }),\n              (hr.throttle = function(t, e, n) {\n                var r = !0,\n                  i = !0;\n                if (\"function\" != typeof t) throw new re(s);\n                return (\n                  Eu(n) &&\n                    ((r = \"leading\" in n ? !!n.leading : r),\n                    (i = \"trailing\" in n ? !!n.trailing : i)),\n                  ru(t, e, { leading: r, maxWait: e, trailing: i })\n                );\n              }),\n              (hr.thru = Va),\n              (hr.toArray = Pu),\n              (hr.toPairs = ls),\n              (hr.toPairsIn = fs),\n              (hr.toPath = function(t) {\n                return gu(t) ? Qe(t, ca) : Lu(t) ? [t] : no(sa(Bu(t)));\n              }),\n              (hr.toPlainObject = Hu),\n              (hr.transform = function(t, e, n) {\n                var r = gu(t),\n                  i = r || bu(t) || Du(t);\n                if (((e = Io(e, 4)), null == n)) {\n                  var o = t && t.constructor;\n                  n = i ? (r ? new o() : []) : Eu(t) && _u(o) ? dr(Ae(t)) : {};\n                }\n                return (\n                  (i ? Ge : Gr)(t, function(t, r, i) {\n                    return e(n, t, r, i);\n                  }),\n                  n\n                );\n              }),\n              (hr.unary = function(t) {\n                return Qa(t, 1);\n              }),\n              (hr.union = ka),\n              (hr.unionBy = Aa),\n              (hr.unionWith = Ta),\n              (hr.uniq = function(t) {\n                return t && t.length ? Ri(t) : [];\n              }),\n              (hr.uniqBy = function(t, e) {\n                return t && t.length ? Ri(t, Io(e, 2)) : [];\n              }),\n              (hr.uniqWith = function(t, e) {\n                return (e = \"function\" == typeof e ? e : o), t && t.length ? Ri(t, o, e) : [];\n              }),\n              (hr.unset = function(t, e) {\n                return null == t || Pi(t, e);\n              }),\n              (hr.unzip = Oa),\n              (hr.unzipWith = ja),\n              (hr.update = function(t, e, n) {\n                return null == t ? t : Vi(t, e, zi(n));\n              }),\n              (hr.updateWith = function(t, e, n, r) {\n                return (r = \"function\" == typeof r ? r : o), null == t ? t : Vi(t, e, zi(n), r);\n              }),\n              (hr.values = ps),\n              (hr.valuesIn = function(t) {\n                return null == t ? [] : $n(t, is(t));\n              }),\n              (hr.without = Na),\n              (hr.words = _s),\n              (hr.wrap = function(t, e) {\n                return cu(zi(e), t);\n              }),\n              (hr.xor = Ma),\n              (hr.xorBy = La),\n              (hr.xorWith = Da),\n              (hr.zip = Ia),\n              (hr.zipObject = function(t, e) {\n                return Hi(t || [], e || [], Ar);\n              }),\n              (hr.zipObjectDeep = function(t, e) {\n                return Hi(t || [], e || [], Ei);\n              }),\n              (hr.zipWith = Ra),\n              (hr.entries = ls),\n              (hr.entriesIn = fs),\n              (hr.extend = Wu),\n              (hr.extendWith = Gu),\n              Ms(hr, hr),\n              (hr.add = Hs),\n              (hr.attempt = Cs),\n              (hr.camelCase = hs),\n              (hr.capitalize = ds),\n              (hr.ceil = Bs),\n              (hr.clamp = function(t, e, n) {\n                return (\n                  n === o && ((n = e), (e = o)),\n                  n !== o && (n = (n = Fu(n)) == n ? n : 0),\n                  e !== o && (e = (e = Fu(e)) == e ? e : 0),\n                  Lr(Fu(t), e, n)\n                );\n              }),\n              (hr.clone = function(t) {\n                return Dr(t, d);\n              }),\n              (hr.cloneDeep = function(t) {\n                return Dr(t, p | d);\n              }),\n              (hr.cloneDeepWith = function(t, e) {\n                return Dr(t, p | d, (e = \"function\" == typeof e ? e : o));\n              }),\n              (hr.cloneWith = function(t, e) {\n                return Dr(t, d, (e = \"function\" == typeof e ? e : o));\n              }),\n              (hr.conformsTo = function(t, e) {\n                return null == e || Ir(t, e, rs(e));\n              }),\n              (hr.deburr = vs),\n              (hr.defaultTo = function(t, e) {\n                return null == t || t != t ? e : t;\n              }),\n              (hr.divide = zs),\n              (hr.endsWith = function(t, e, n) {\n                (t = Bu(t)), (e = Ii(e));\n                var r = t.length,\n                  i = (n = n === o ? r : Lr(qu(n), 0, r));\n                return (n -= e.length) >= 0 && t.slice(n, i) == e;\n              }),\n              (hr.eq = pu),\n              (hr.escape = function(t) {\n                return (t = Bu(t)) && St.test(t) ? t.replace(_t, _n) : t;\n              }),\n              (hr.escapeRegExp = function(t) {\n                return (t = Bu(t)) && Mt.test(t) ? t.replace(Nt, \"\\\\$&\") : t;\n              }),\n              (hr.every = function(t, e, n) {\n                var r = gu(t) ? Je : Ur;\n                return n && Go(t, e, n) && (e = o), r(t, Io(e, 3));\n              }),\n              (hr.find = Fa),\n              (hr.findIndex = va),\n              (hr.findKey = function(t, e) {\n                return an(t, Io(e, 3), Gr);\n              }),\n              (hr.findLast = Ha),\n              (hr.findLastIndex = ga),\n              (hr.findLastKey = function(t, e) {\n                return an(t, Io(e, 3), Kr);\n              }),\n              (hr.floor = Ws),\n              (hr.forEach = Ba),\n              (hr.forEachRight = za),\n              (hr.forIn = function(t, e) {\n                return null == t ? t : zr(t, Io(e, 3), is);\n              }),\n              (hr.forInRight = function(t, e) {\n                return null == t ? t : Wr(t, Io(e, 3), is);\n              }),\n              (hr.forOwn = function(t, e) {\n                return t && Gr(t, Io(e, 3));\n              }),\n              (hr.forOwnRight = function(t, e) {\n                return t && Kr(t, Io(e, 3));\n              }),\n              (hr.get = Xu),\n              (hr.gt = hu),\n              (hr.gte = du),\n              (hr.has = function(t, e) {\n                return null != t && Ho(t, e, ti);\n              }),\n              (hr.hasIn = Qu),\n              (hr.head = $a),\n              (hr.identity = Ts),\n              (hr.includes = function(t, e, n, r) {\n                (t = $u(t) ? t : ps(t)), (n = n && !r ? qu(n) : 0);\n                var i = t.length;\n                return (\n                  n < 0 && (n = zn(i + n, 0)),\n                  Mu(t) ? n <= i && t.indexOf(e, n) > -1 : !!i && sn(t, e, n) > -1\n                );\n              }),\n              (hr.indexOf = function(t, e, n) {\n                var r = null == t ? 0 : t.length;\n                if (!r) return -1;\n                var i = null == n ? 0 : qu(n);\n                return i < 0 && (i = zn(r + i, 0)), sn(t, e, i);\n              }),\n              (hr.inRange = function(t, e, n) {\n                return (\n                  (e = Vu(e)),\n                  n === o ? ((n = e), (e = 0)) : (n = Vu(n)),\n                  (function(t, e, n) {\n                    return t >= Wn(e, n) && t < zn(e, n);\n                  })((t = Fu(t)), e, n)\n                );\n              }),\n              (hr.invoke = ns),\n              (hr.isArguments = vu),\n              (hr.isArray = gu),\n              (hr.isArrayBuffer = mu),\n              (hr.isArrayLike = $u),\n              (hr.isArrayLikeObject = yu),\n              (hr.isBoolean = function(t) {\n                return !0 === t || !1 === t || (ku(t) && Xr(t) == B);\n              }),\n              (hr.isBuffer = bu),\n              (hr.isDate = wu),\n              (hr.isElement = function(t) {\n                return ku(t) && 1 === t.nodeType && !Ou(t);\n              }),\n              (hr.isEmpty = function(t) {\n                if (null == t) return !0;\n                if (\n                  $u(t) &&\n                  (gu(t) ||\n                    \"string\" == typeof t ||\n                    \"function\" == typeof t.splice ||\n                    bu(t) ||\n                    Du(t) ||\n                    vu(t))\n                )\n                  return !t.length;\n                var e = Fo(t);\n                if (e == Y || e == nt) return !t.size;\n                if (Zo(t)) return !ci(t).length;\n                for (var n in t) if (ce.call(t, n)) return !1;\n                return !0;\n              }),\n              (hr.isEqual = function(t, e) {\n                return oi(t, e);\n              }),\n              (hr.isEqualWith = function(t, e, n) {\n                var r = (n = \"function\" == typeof n ? n : o) ? n(t, e) : o;\n                return r === o ? oi(t, e, o, n) : !!r;\n              }),\n              (hr.isError = xu),\n              (hr.isFinite = function(t) {\n                return \"number\" == typeof t && Fn(t);\n              }),\n              (hr.isFunction = _u),\n              (hr.isInteger = Cu),\n              (hr.isLength = Su),\n              (hr.isMap = Au),\n              (hr.isMatch = function(t, e) {\n                return t === e || ai(t, e, Po(e));\n              }),\n              (hr.isMatchWith = function(t, e, n) {\n                return (n = \"function\" == typeof n ? n : o), ai(t, e, Po(e), n);\n              }),\n              (hr.isNaN = function(t) {\n                return Tu(t) && t != +t;\n              }),\n              (hr.isNative = function(t) {\n                if (Yo(t)) throw new i(u);\n                return ui(t);\n              }),\n              (hr.isNil = function(t) {\n                return null == t;\n              }),\n              (hr.isNull = function(t) {\n                return null === t;\n              }),\n              (hr.isNumber = Tu),\n              (hr.isObject = Eu),\n              (hr.isObjectLike = ku),\n              (hr.isPlainObject = Ou),\n              (hr.isRegExp = ju),\n              (hr.isSafeInteger = function(t) {\n                return Cu(t) && t >= -L && t <= L;\n              }),\n              (hr.isSet = Nu),\n              (hr.isString = Mu),\n              (hr.isSymbol = Lu),\n              (hr.isTypedArray = Du),\n              (hr.isUndefined = function(t) {\n                return t === o;\n              }),\n              (hr.isWeakMap = function(t) {\n                return ku(t) && Fo(t) == at;\n              }),\n              (hr.isWeakSet = function(t) {\n                return ku(t) && Xr(t) == ut;\n              }),\n              (hr.join = function(t, e) {\n                return null == t ? \"\" : Hn.call(t, e);\n              }),\n              (hr.kebabCase = gs),\n              (hr.last = xa),\n              (hr.lastIndexOf = function(t, e, n) {\n                var r = null == t ? 0 : t.length;\n                if (!r) return -1;\n                var i = r;\n                return (\n                  n !== o && (i = (i = qu(n)) < 0 ? zn(r + i, 0) : Wn(i, r - 1)),\n                  e == e\n                    ? (function(t, e, n) {\n                        for (var r = n + 1; r--; ) if (t[r] === e) return r;\n                        return r;\n                      })(t, e, i)\n                    : un(t, ln, i, !0)\n                );\n              }),\n              (hr.lowerCase = ms),\n              (hr.lowerFirst = $s),\n              (hr.lt = Iu),\n              (hr.lte = Ru),\n              (hr.max = function(t) {\n                return t && t.length ? Fr(t, Ts, Qr) : o;\n              }),\n              (hr.maxBy = function(t, e) {\n                return t && t.length ? Fr(t, Io(e, 2), Qr) : o;\n              }),\n              (hr.mean = function(t) {\n                return fn(t, Ts);\n              }),\n              (hr.meanBy = function(t, e) {\n                return fn(t, Io(e, 2));\n              }),\n              (hr.min = function(t) {\n                return t && t.length ? Fr(t, Ts, fi) : o;\n              }),\n              (hr.minBy = function(t, e) {\n                return t && t.length ? Fr(t, Io(e, 2), fi) : o;\n              }),\n              (hr.stubArray = Us),\n              (hr.stubFalse = Fs),\n              (hr.stubObject = function() {\n                return {};\n              }),\n              (hr.stubString = function() {\n                return \"\";\n              }),\n              (hr.stubTrue = function() {\n                return !0;\n              }),\n              (hr.multiply = Gs),\n              (hr.nth = function(t, e) {\n                return t && t.length ? gi(t, qu(e)) : o;\n              }),\n              (hr.noConflict = function() {\n                return Me._ === this && (Me._ = de), this;\n              }),\n              (hr.noop = Ls),\n              (hr.now = Xa),\n              (hr.pad = function(t, e, n) {\n                t = Bu(t);\n                var r = (e = qu(e)) ? Nn(t) : 0;\n                if (!e || r >= e) return t;\n                var i = (e - r) / 2;\n                return $o(Vn(i), n) + t + $o(Pn(i), n);\n              }),\n              (hr.padEnd = function(t, e, n) {\n                t = Bu(t);\n                var r = (e = qu(e)) ? Nn(t) : 0;\n                return e && r < e ? t + $o(e - r, n) : t;\n              }),\n              (hr.padStart = function(t, e, n) {\n                t = Bu(t);\n                var r = (e = qu(e)) ? Nn(t) : 0;\n                return e && r < e ? $o(e - r, n) + t : t;\n              }),\n              (hr.parseInt = function(t, e, n) {\n                return n || null == e ? (e = 0) : e && (e = +e), Kn(Bu(t).replace(Dt, \"\"), e || 0);\n              }),\n              (hr.random = function(t, e, n) {\n                if (\n                  (n && \"boolean\" != typeof n && Go(t, e, n) && (e = n = o),\n                  n === o &&\n                    (\"boolean\" == typeof e\n                      ? ((n = e), (e = o))\n                      : \"boolean\" == typeof t && ((n = t), (t = o))),\n                  t === o && e === o\n                    ? ((t = 0), (e = 1))\n                    : ((t = Vu(t)), e === o ? ((e = t), (t = 0)) : (e = Vu(e))),\n                  t > e)\n                ) {\n                  var r = t;\n                  (t = e), (e = r);\n                }\n                if (n || t % 1 || e % 1) {\n                  var i = Jn();\n                  return Wn(t + i * (e - t + Te(\"1e-\" + ((i + \"\").length - 1))), e);\n                }\n                return wi(t, e);\n              }),\n              (hr.reduce = function(t, e, n) {\n                var r = gu(t) ? en : dn,\n                  i = arguments.length < 3;\n                return r(t, Io(e, 4), n, i, Vr);\n              }),\n              (hr.reduceRight = function(t, e, n) {\n                var r = gu(t) ? nn : dn,\n                  i = arguments.length < 3;\n                return r(t, Io(e, 4), n, i, qr);\n              }),\n              (hr.repeat = function(t, e, n) {\n                return (e = (n ? Go(t, e, n) : e === o) ? 1 : qu(e)), xi(Bu(t), e);\n              }),\n              (hr.replace = function() {\n                var t = arguments,\n                  e = Bu(t[0]);\n                return t.length < 3 ? e : e.replace(t[1], t[2]);\n              }),\n              (hr.result = function(t, e, n) {\n                var r = -1,\n                  i = (e = Wi(e, t)).length;\n                for (i || ((i = 1), (t = o)); ++r < i; ) {\n                  var a = null == t ? o : t[ca(e[r])];\n                  a === o && ((r = i), (a = n)), (t = _u(a) ? a.call(t) : a);\n                }\n                return t;\n              }),\n              (hr.round = Ks),\n              (hr.runInContext = t),\n              (hr.sample = function(t) {\n                return (gu(t) ? Cr : Ci)(t);\n              }),\n              (hr.size = function(t) {\n                if (null == t) return 0;\n                if ($u(t)) return Mu(t) ? Nn(t) : t.length;\n                var e = Fo(t);\n                return e == Y || e == nt ? t.size : ci(t).length;\n              }),\n              (hr.snakeCase = ys),\n              (hr.some = function(t, e, n) {\n                var r = gu(t) ? rn : ji;\n                return n && Go(t, e, n) && (e = o), r(t, Io(e, 3));\n              }),\n              (hr.sortedIndex = function(t, e) {\n                return Ni(t, e);\n              }),\n              (hr.sortedIndexBy = function(t, e, n) {\n                return Mi(t, e, Io(n, 2));\n              }),\n              (hr.sortedIndexOf = function(t, e) {\n                var n = null == t ? 0 : t.length;\n                if (n) {\n                  var r = Ni(t, e);\n                  if (r < n && pu(t[r], e)) return r;\n                }\n                return -1;\n              }),\n              (hr.sortedLastIndex = function(t, e) {\n                return Ni(t, e, !0);\n              }),\n              (hr.sortedLastIndexBy = function(t, e, n) {\n                return Mi(t, e, Io(n, 2), !0);\n              }),\n              (hr.sortedLastIndexOf = function(t, e) {\n                if (null != t && t.length) {\n                  var n = Ni(t, e, !0) - 1;\n                  if (pu(t[n], e)) return n;\n                }\n                return -1;\n              }),\n              (hr.startCase = bs),\n              (hr.startsWith = function(t, e, n) {\n                return (\n                  (t = Bu(t)),\n                  (n = null == n ? 0 : Lr(qu(n), 0, t.length)),\n                  (e = Ii(e)),\n                  t.slice(n, n + e.length) == e\n                );\n              }),\n              (hr.subtract = Js),\n              (hr.sum = function(t) {\n                return t && t.length ? vn(t, Ts) : 0;\n              }),\n              (hr.sumBy = function(t, e) {\n                return t && t.length ? vn(t, Io(e, 2)) : 0;\n              }),\n              (hr.template = function(t, e, n) {\n                var r = hr.templateSettings;\n                n && Go(t, e, n) && (e = o), (t = Bu(t)), (e = Gu({}, e, r, Eo));\n                var i,\n                  a,\n                  u = Gu({}, e.imports, r.imports, Eo),\n                  s = rs(u),\n                  c = $n(u, s),\n                  l = 0,\n                  f = e.interpolate || Yt,\n                  p = \"__p += '\",\n                  h = ee(\n                    (e.escape || Yt).source +\n                      \"|\" +\n                      f.source +\n                      \"|\" +\n                      (f === At ? Ft : Yt).source +\n                      \"|\" +\n                      (e.evaluate || Yt).source +\n                      \"|$\",\n                    \"g\"\n                  ),\n                  d =\n                    \"//# sourceURL=\" +\n                    (\"sourceURL\" in e ? e.sourceURL : \"lodash.templateSources[\" + ++Se + \"]\") +\n                    \"\\n\";\n                t.replace(h, function(e, n, r, o, u, s) {\n                  return (\n                    r || (r = o),\n                    (p += t.slice(l, s).replace(Zt, Cn)),\n                    n && ((i = !0), (p += \"' +\\n__e(\" + n + \") +\\n'\")),\n                    u && ((a = !0), (p += \"';\\n\" + u + \";\\n__p += '\")),\n                    r && (p += \"' +\\n((__t = (\" + r + \")) == null ? '' : __t) +\\n'\"),\n                    (l = s + e.length),\n                    e\n                  );\n                }),\n                  (p += \"';\\n\");\n                var v = e.variable;\n                v || (p = \"with (obj) {\\n\" + p + \"\\n}\\n\"),\n                  (p = (a ? p.replace(yt, \"\") : p).replace(bt, \"$1\").replace(wt, \"$1;\")),\n                  (p =\n                    \"function(\" +\n                    (v || \"obj\") +\n                    \") {\\n\" +\n                    (v ? \"\" : \"obj || (obj = {});\\n\") +\n                    \"var __t, __p = ''\" +\n                    (i ? \", __e = _.escape\" : \"\") +\n                    (a\n                      ? \", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\"\n                      : \";\\n\") +\n                    p +\n                    \"return __p\\n}\");\n                var g = Cs(function() {\n                  return Xt(s, d + \"return \" + p).apply(o, c);\n                });\n                if (((g.source = p), xu(g))) throw g;\n                return g;\n              }),\n              (hr.times = function(t, e) {\n                if ((t = qu(t)) < 1 || t > L) return [];\n                var n = R,\n                  r = Wn(t, R);\n                (e = Io(e)), (t -= R);\n                for (var i = gn(r, e); ++n < t; ) e(n);\n                return i;\n              }),\n              (hr.toFinite = Vu),\n              (hr.toInteger = qu),\n              (hr.toLength = Uu),\n              (hr.toLower = function(t) {\n                return Bu(t).toLowerCase();\n              }),\n              (hr.toNumber = Fu),\n              (hr.toSafeInteger = function(t) {\n                return t ? Lr(qu(t), -L, L) : 0 === t ? t : 0;\n              }),\n              (hr.toString = Bu),\n              (hr.toUpper = function(t) {\n                return Bu(t).toUpperCase();\n              }),\n              (hr.trim = function(t, e, n) {\n                if ((t = Bu(t)) && (n || e === o)) return t.replace(Lt, \"\");\n                if (!t || !(e = Ii(e))) return t;\n                var r = Mn(t),\n                  i = Mn(e);\n                return Ki(r, bn(r, i), wn(r, i) + 1).join(\"\");\n              }),\n              (hr.trimEnd = function(t, e, n) {\n                if ((t = Bu(t)) && (n || e === o)) return t.replace(It, \"\");\n                if (!t || !(e = Ii(e))) return t;\n                var r = Mn(t);\n                return Ki(r, 0, wn(r, Mn(e)) + 1).join(\"\");\n              }),\n              (hr.trimStart = function(t, e, n) {\n                if ((t = Bu(t)) && (n || e === o)) return t.replace(Dt, \"\");\n                if (!t || !(e = Ii(e))) return t;\n                var r = Mn(t);\n                return Ki(r, bn(r, Mn(e))).join(\"\");\n              }),\n              (hr.truncate = function(t, e) {\n                var n = k,\n                  r = A;\n                if (Eu(e)) {\n                  var i = \"separator\" in e ? e.separator : i;\n                  (n = \"length\" in e ? qu(e.length) : n),\n                    (r = \"omission\" in e ? Ii(e.omission) : r);\n                }\n                var a = (t = Bu(t)).length;\n                if (Sn(t)) {\n                  var u = Mn(t);\n                  a = u.length;\n                }\n                if (n >= a) return t;\n                var s = n - Nn(r);\n                if (s < 1) return r;\n                var c = u ? Ki(u, 0, s).join(\"\") : t.slice(0, s);\n                if (i === o) return c + r;\n                if ((u && (s += c.length - s), ju(i))) {\n                  if (t.slice(s).search(i)) {\n                    var l,\n                      f = c;\n                    for (\n                      i.global || (i = ee(i.source, Bu(Ht.exec(i)) + \"g\")), i.lastIndex = 0;\n                      (l = i.exec(f));\n\n                    )\n                      var p = l.index;\n                    c = c.slice(0, p === o ? s : p);\n                  }\n                } else if (t.indexOf(Ii(i), s) != s) {\n                  var h = c.lastIndexOf(i);\n                  h > -1 && (c = c.slice(0, h));\n                }\n                return c + r;\n              }),\n              (hr.unescape = function(t) {\n                return (t = Bu(t)) && Ct.test(t) ? t.replace(xt, Ln) : t;\n              }),\n              (hr.uniqueId = function(t) {\n                var e = ++le;\n                return Bu(t) + e;\n              }),\n              (hr.upperCase = ws),\n              (hr.upperFirst = xs),\n              (hr.each = Ba),\n              (hr.eachRight = za),\n              (hr.first = $a),\n              Ms(\n                hr,\n                (function() {\n                  var t = {};\n                  return (\n                    Gr(hr, function(e, n) {\n                      ce.call(hr.prototype, n) || (t[n] = e);\n                    }),\n                    t\n                  );\n                })(),\n                { chain: !1 }\n              ),\n              (hr.VERSION = \"4.17.10\"),\n              Ge([\"bind\", \"bindKey\", \"curry\", \"curryRight\", \"partial\", \"partialRight\"], function(\n                t\n              ) {\n                hr[t].placeholder = hr;\n              }),\n              Ge([\"drop\", \"take\"], function(t, e) {\n                (mr.prototype[t] = function(n) {\n                  n = n === o ? 1 : zn(qu(n), 0);\n                  var r = this.__filtered__ && !e ? new mr(this) : this.clone();\n                  return (\n                    r.__filtered__\n                      ? (r.__takeCount__ = Wn(n, r.__takeCount__))\n                      : r.__views__.push({\n                          size: Wn(n, R),\n                          type: t + (r.__dir__ < 0 ? \"Right\" : \"\")\n                        }),\n                    r\n                  );\n                }),\n                  (mr.prototype[t + \"Right\"] = function(e) {\n                    return this.reverse()\n                      [t](e)\n                      .reverse();\n                  });\n              }),\n              Ge([\"filter\", \"map\", \"takeWhile\"], function(t, e) {\n                var n = e + 1,\n                  r = n == j || 3 == n;\n                mr.prototype[t] = function(t) {\n                  var e = this.clone();\n                  return (\n                    e.__iteratees__.push({ iteratee: Io(t, 3), type: n }),\n                    (e.__filtered__ = e.__filtered__ || r),\n                    e\n                  );\n                };\n              }),\n              Ge([\"head\", \"last\"], function(t, e) {\n                var n = \"take\" + (e ? \"Right\" : \"\");\n                mr.prototype[t] = function() {\n                  return this[n](1).value()[0];\n                };\n              }),\n              Ge([\"initial\", \"tail\"], function(t, e) {\n                var n = \"drop\" + (e ? \"\" : \"Right\");\n                mr.prototype[t] = function() {\n                  return this.__filtered__ ? new mr(this) : this[n](1);\n                };\n              }),\n              (mr.prototype.compact = function() {\n                return this.filter(Ts);\n              }),\n              (mr.prototype.find = function(t) {\n                return this.filter(t).head();\n              }),\n              (mr.prototype.findLast = function(t) {\n                return this.reverse().find(t);\n              }),\n              (mr.prototype.invokeMap = _i(function(t, e) {\n                return \"function\" == typeof t\n                  ? new mr(this)\n                  : this.map(function(n) {\n                      return ri(n, t, e);\n                    });\n              })),\n              (mr.prototype.reject = function(t) {\n                return this.filter(uu(Io(t)));\n              }),\n              (mr.prototype.slice = function(t, e) {\n                t = qu(t);\n                var n = this;\n                return n.__filtered__ && (t > 0 || e < 0)\n                  ? new mr(n)\n                  : (t < 0 ? (n = n.takeRight(-t)) : t && (n = n.drop(t)),\n                    e !== o && (n = (e = qu(e)) < 0 ? n.dropRight(-e) : n.take(e - t)),\n                    n);\n              }),\n              (mr.prototype.takeRightWhile = function(t) {\n                return this.reverse()\n                  .takeWhile(t)\n                  .reverse();\n              }),\n              (mr.prototype.toArray = function() {\n                return this.take(R);\n              }),\n              Gr(mr.prototype, function(t, e) {\n                var n = /^(?:filter|find|map|reject)|While$/.test(e),\n                  r = /^(?:head|last)$/.test(e),\n                  i = hr[r ? \"take\" + (\"last\" == e ? \"Right\" : \"\") : e],\n                  a = r || /^find/.test(e);\n                i &&\n                  (hr.prototype[e] = function() {\n                    var e = this.__wrapped__,\n                      u = r ? [1] : arguments,\n                      s = e instanceof mr,\n                      c = u[0],\n                      l = s || gu(e),\n                      f = function(t) {\n                        var e = i.apply(hr, tn([t], u));\n                        return r && p ? e[0] : e;\n                      };\n                    l && n && \"function\" == typeof c && 1 != c.length && (s = l = !1);\n                    var p = this.__chain__,\n                      h = !!this.__actions__.length,\n                      d = a && !p,\n                      v = s && !h;\n                    if (!a && l) {\n                      e = v ? e : new mr(this);\n                      var g = t.apply(e, u);\n                      return g.__actions__.push({ func: Va, args: [f], thisArg: o }), new gr(g, p);\n                    }\n                    return d && v\n                      ? t.apply(this, u)\n                      : ((g = this.thru(f)), d ? (r ? g.value()[0] : g.value()) : g);\n                  });\n              }),\n              Ge([\"pop\", \"push\", \"shift\", \"sort\", \"splice\", \"unshift\"], function(t) {\n                var e = ie[t],\n                  n = /^(?:push|sort|unshift)$/.test(t) ? \"tap\" : \"thru\",\n                  r = /^(?:pop|shift)$/.test(t);\n                hr.prototype[t] = function() {\n                  var t = arguments;\n                  if (r && !this.__chain__) {\n                    var i = this.value();\n                    return e.apply(gu(i) ? i : [], t);\n                  }\n                  return this[n](function(n) {\n                    return e.apply(gu(n) ? n : [], t);\n                  });\n                };\n              }),\n              Gr(mr.prototype, function(t, e) {\n                var n = hr[e];\n                if (n) {\n                  var r = n.name + \"\";\n                  (ir[r] || (ir[r] = [])).push({ name: e, func: n });\n                }\n              }),\n              (ir[ho(o, $).name] = [{ name: \"wrapper\", func: o }]),\n              (mr.prototype.clone = function() {\n                var t = new mr(this.__wrapped__);\n                return (\n                  (t.__actions__ = no(this.__actions__)),\n                  (t.__dir__ = this.__dir__),\n                  (t.__filtered__ = this.__filtered__),\n                  (t.__iteratees__ = no(this.__iteratees__)),\n                  (t.__takeCount__ = this.__takeCount__),\n                  (t.__views__ = no(this.__views__)),\n                  t\n                );\n              }),\n              (mr.prototype.reverse = function() {\n                if (this.__filtered__) {\n                  var t = new mr(this);\n                  (t.__dir__ = -1), (t.__filtered__ = !0);\n                } else (t = this.clone()).__dir__ *= -1;\n                return t;\n              }),\n              (mr.prototype.value = function() {\n                var t = this.__wrapped__.value(),\n                  e = this.__dir__,\n                  n = gu(t),\n                  r = e < 0,\n                  i = n ? t.length : 0,\n                  o = (function(t, e, n) {\n                    for (var r = -1, i = n.length; ++r < i; ) {\n                      var o = n[r],\n                        a = o.size;\n                      switch (o.type) {\n                        case \"drop\":\n                          t += a;\n                          break;\n                        case \"dropRight\":\n                          e -= a;\n                          break;\n                        case \"take\":\n                          e = Wn(e, t + a);\n                          break;\n                        case \"takeRight\":\n                          t = zn(t, e - a);\n                      }\n                    }\n                    return { start: t, end: e };\n                  })(0, i, this.__views__),\n                  a = o.start,\n                  u = o.end,\n                  s = u - a,\n                  c = r ? u : a - 1,\n                  l = this.__iteratees__,\n                  f = l.length,\n                  p = 0,\n                  h = Wn(s, this.__takeCount__);\n                if (!n || (!r && i == s && h == s)) return Ui(t, this.__actions__);\n                var d = [];\n                t: for (; s-- && p < h; ) {\n                  for (var v = -1, g = t[(c += e)]; ++v < f; ) {\n                    var m = l[v],\n                      $ = m.iteratee,\n                      y = m.type,\n                      b = $(g);\n                    if (y == N) g = b;\n                    else if (!b) {\n                      if (y == j) continue t;\n                      break t;\n                    }\n                  }\n                  d[p++] = g;\n                }\n                return d;\n              }),\n              (hr.prototype.at = qa),\n              (hr.prototype.chain = function() {\n                return Pa(this);\n              }),\n              (hr.prototype.commit = function() {\n                return new gr(this.value(), this.__chain__);\n              }),\n              (hr.prototype.next = function() {\n                this.__values__ === o && (this.__values__ = Pu(this.value()));\n                var t = this.__index__ >= this.__values__.length;\n                return { done: t, value: t ? o : this.__values__[this.__index__++] };\n              }),\n              (hr.prototype.plant = function(t) {\n                for (var e, n = this; n instanceof vr; ) {\n                  var r = fa(n);\n                  (r.__index__ = 0), (r.__values__ = o), e ? (i.__wrapped__ = r) : (e = r);\n                  var i = r;\n                  n = n.__wrapped__;\n                }\n                return (i.__wrapped__ = t), e;\n              }),\n              (hr.prototype.reverse = function() {\n                var t = this.__wrapped__;\n                if (t instanceof mr) {\n                  var e = t;\n                  return (\n                    this.__actions__.length && (e = new mr(this)),\n                    (e = e.reverse()).__actions__.push({ func: Va, args: [Ea], thisArg: o }),\n                    new gr(e, this.__chain__)\n                  );\n                }\n                return this.thru(Ea);\n              }),\n              (hr.prototype.toJSON = hr.prototype.valueOf = hr.prototype.value = function() {\n                return Ui(this.__wrapped__, this.__actions__);\n              }),\n              (hr.prototype.first = hr.prototype.head),\n              Re &&\n                (hr.prototype[Re] = function() {\n                  return this;\n                }),\n              hr\n            );\n          })();\n          (Me._ = Dn),\n            (i = function() {\n              return Dn;\n            }.call(e, n, e, r)) === o || (r.exports = i);\n        }.call(this));\n      }.call(this, n(38), n(39)(t)));\n    }\n  }\n]);\n"
  },
  {
    "path": "node-server.js",
    "content": "var http = require(\"http\"),\n  url = require(\"url\"),\n  path = require(\"path\"),\n  fs = require(\"fs\");\nport = process.argv[2] || 8888;\n\nhttp\n  .createServer(function(request, response) {\n    var uri = url.parse(request.url).pathname,\n      filename = path.join(process.cwd(), \"docs\", uri);\n\n    var extname = path.extname(filename);\n    var contentType = \"text/html\";\n    switch (extname) {\n      case \".js\":\n        contentType = \"text/javascript\";\n        break;\n      case \".css\":\n        contentType = \"text/css\";\n        break;\n      case \".ico\":\n        contentType = \"image/x-icon\";\n        break;\n      case \".svg\":\n        contentType = \"image/svg+xml\";\n        break;\n    }\n\n    fs.exists(filename, function(exists) {\n      if (!exists) {\n        response.writeHead(404, { \"Content-Type\": \"text/plain\" });\n        response.write(\"404 Not Found\\n\");\n        response.end();\n        return;\n      }\n\n      if (fs.statSync(filename).isDirectory()) filename += \"/index.html\";\n\n      fs.readFile(filename, \"binary\", function(err, file) {\n        if (err) {\n          response.writeHead(500, { \"Content-Type\": \"text/plain\" });\n          response.write(err + \"\\n\");\n          response.end();\n          return;\n        }\n        response.writeHead(200, { \"Content-Type\": contentType });\n        response.write(file, \"binary\");\n        response.end();\n      });\n    });\n  })\n  .listen(parseInt(port, 10));\n\nconsole.log(\"WebUI Aria2 Server is running on http://localhost:\" + port);\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"webui-aria2\",\n  \"version\": \"1.0.0\",\n  \"description\": \"The aim for this project is to create the worlds best and hottest interface to interact with aria2.\",\n  \"homepage\": \"https://github.com/ziahamza/webui-aria2#readme\",\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"dev\": \"webpack -d --watch --progress & node node-server\",\n    \"build\": \"webpack -p --progress\",\n    \"analyze\": \"webpack -p --profile --json > stats.json && webpack-bundle-analyzer stats.json ./docs -p 9999\",\n    \"format\": \"prettier -l --write  \\\"**/*{js,scss}\\\" \"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/ziahamza/webui-aria2.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/ziahamza/webui-aria2/issues\"\n  },\n  \"husky\": {\n    \"hooks\": {\n      \"pre-commit\": \"pretty-quick --staged\"\n    }\n  },\n  \"dependencies\": {\n    \"angular\": \"^1.7.3\",\n    \"angular-translate\": \"^2.18.1\",\n    \"autoprefixer\": \"^9.1.3\",\n    \"bootstrap-sass\": \"^3.3.7\",\n    \"clean-webpack-plugin\": \"^0.1.19\",\n    \"css-loader\": \"^1.0.0\",\n    \"file-loader\": \"^2.0.0\",\n    \"flag-icon-css\": \"^3.0.0\",\n    \"html-webpack-plugin\": \"^3.2.0\",\n    \"jquery\": \"^3.3.1\",\n    \"lodash\": \"^4.17.10\",\n    \"mini-css-extract-plugin\": \"^0.4.2\",\n    \"node-sass\": \"^4.9.3\",\n    \"postcss-loader\": \"^3.0.0\",\n    \"sass-loader\": \"^7.1.0\",\n    \"webpack\": \"^4.17.1\",\n    \"webpack-bundle-analyzer\": \"^2.13.1\",\n    \"webpack-cli\": \"^3.1.0\",\n    \"workbox-webpack-plugin\": \"^3.4.1\"\n  },\n  \"devDependencies\": {\n    \"husky\": \"^1.0.0-rc.13\",\n    \"prettier\": \"1.14.2\",\n    \"pretty-quick\": \"^1.6.0\"\n  }\n}\n"
  },
  {
    "path": "postcss.config.js",
    "content": "module.exports = {\n  plugins: [require(\"autoprefixer\")({ browsers: [\"> 5%\", \"IE 11\", \"last 2 versions\"] })]\n};\n"
  },
  {
    "path": "src/index-template.html",
    "content": "<!doctype html>\n<html>\n\n<!-- {{{ head -->\n<head>\n  <link rel=\"icon\" href=\"../favicon.ico\" />\n\n  <meta charset=\"utf-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <meta name=\"theme-color\" content=\"#0A8476\">\n\n  <title ng-bind=\"$root.pageTitle\">Aria2 WebUI</title>\n\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"https://fonts.googleapis.com/css?family=Lato:400,700\">\n\n</head>\n<!-- }}} -->\n\n<body ng-controller=\"MainCtrl\" ng-cloak>\n\n<!-- {{{ Icons -->\n<svg aria-hidden=\"true\" style=\"position: absolute; width: 0; height: 0; overflow: hidden;\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n  <defs>\n    <symbol id=\"icon-times\" viewBox=\"0 0 22 28\">\n      <title>times</title>\n      <path d=\"M20.281 20.656c0 0.391-0.156 0.781-0.438 1.062l-2.125 2.125c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-4.594-4.594-4.594 4.594c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-2.125-2.125c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l4.594-4.594-4.594-4.594c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.594 4.594-4.594c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062s-0.156 0.781-0.438 1.062l-4.594 4.594 4.594 4.594c0.281 0.281 0.438 0.672 0.438 1.062z\"></path>\n    </symbol>\n    <symbol id=\"icon-power-off\" viewBox=\"0 0 24 28\">\n      <title>power-off</title>\n      <path d=\"M24 14c0 6.609-5.391 12-12 12s-12-5.391-12-12c0-3.797 1.75-7.297 4.797-9.578 0.891-0.672 2.141-0.5 2.797 0.391 0.672 0.875 0.484 2.141-0.391 2.797-2.031 1.531-3.203 3.859-3.203 6.391 0 4.406 3.594 8 8 8s8-3.594 8-8c0-2.531-1.172-4.859-3.203-6.391-0.875-0.656-1.062-1.922-0.391-2.797 0.656-0.891 1.922-1.062 2.797-0.391 3.047 2.281 4.797 5.781 4.797 9.578zM14 2v10c0 1.094-0.906 2-2 2s-2-0.906-2-2v-10c0-1.094 0.906-2 2-2s2 0.906 2 2z\"></path>\n    </symbol>\n    <symbol id=\"icon-cog\" viewBox=\"0 0 24 28\">\n      <title>cog</title>\n      <path d=\"M16 14c0-2.203-1.797-4-4-4s-4 1.797-4 4 1.797 4 4 4 4-1.797 4-4zM24 12.297v3.469c0 0.234-0.187 0.516-0.438 0.562l-2.891 0.438c-0.172 0.5-0.359 0.969-0.609 1.422 0.531 0.766 1.094 1.453 1.672 2.156 0.094 0.109 0.156 0.25 0.156 0.391s-0.047 0.25-0.141 0.359c-0.375 0.5-2.484 2.797-3.016 2.797-0.141 0-0.281-0.063-0.406-0.141l-2.156-1.687c-0.453 0.234-0.938 0.438-1.422 0.594-0.109 0.953-0.203 1.969-0.453 2.906-0.063 0.25-0.281 0.438-0.562 0.438h-3.469c-0.281 0-0.531-0.203-0.562-0.469l-0.438-2.875c-0.484-0.156-0.953-0.344-1.406-0.578l-2.203 1.672c-0.109 0.094-0.25 0.141-0.391 0.141s-0.281-0.063-0.391-0.172c-0.828-0.75-1.922-1.719-2.578-2.625-0.078-0.109-0.109-0.234-0.109-0.359 0-0.141 0.047-0.25 0.125-0.359 0.531-0.719 1.109-1.406 1.641-2.141-0.266-0.5-0.484-1.016-0.641-1.547l-2.859-0.422c-0.266-0.047-0.453-0.297-0.453-0.562v-3.469c0-0.234 0.187-0.516 0.422-0.562l2.906-0.438c0.156-0.5 0.359-0.969 0.609-1.437-0.531-0.75-1.094-1.453-1.672-2.156-0.094-0.109-0.156-0.234-0.156-0.375s0.063-0.25 0.141-0.359c0.375-0.516 2.484-2.797 3.016-2.797 0.141 0 0.281 0.063 0.406 0.156l2.156 1.672c0.453-0.234 0.938-0.438 1.422-0.594 0.109-0.953 0.203-1.969 0.453-2.906 0.063-0.25 0.281-0.438 0.562-0.438h3.469c0.281 0 0.531 0.203 0.562 0.469l0.438 2.875c0.484 0.156 0.953 0.344 1.406 0.578l2.219-1.672c0.094-0.094 0.234-0.141 0.375-0.141s0.281 0.063 0.391 0.156c0.828 0.766 1.922 1.734 2.578 2.656 0.078 0.094 0.109 0.219 0.109 0.344 0 0.141-0.047 0.25-0.125 0.359-0.531 0.719-1.109 1.406-1.641 2.141 0.266 0.5 0.484 1.016 0.641 1.531l2.859 0.438c0.266 0.047 0.453 0.297 0.453 0.562z\"></path>\n    </symbol>\n    <symbol id=\"icon-clock-o\" viewBox=\"0 0 24 28\">\n      <title>clock-o</title>\n      <path d=\"M14 8.5v7c0 0.281-0.219 0.5-0.5 0.5h-5c-0.281 0-0.5-0.219-0.5-0.5v-1c0-0.281 0.219-0.5 0.5-0.5h3.5v-5.5c0-0.281 0.219-0.5 0.5-0.5h1c0.281 0 0.5 0.219 0.5 0.5zM20.5 14c0-4.688-3.813-8.5-8.5-8.5s-8.5 3.813-8.5 8.5 3.813 8.5 8.5 8.5 8.5-3.813 8.5-8.5zM24 14c0 6.625-5.375 12-12 12s-12-5.375-12-12 5.375-12 12-12 12 5.375 12 12z\"></path>\n    </symbol>\n    <symbol id=\"icon-download\" viewBox=\"0 0 26 28\">\n      <title>download</title>\n      <path d=\"M20 21c0-0.547-0.453-1-1-1s-1 0.453-1 1 0.453 1 1 1 1-0.453 1-1zM24 21c0-0.547-0.453-1-1-1s-1 0.453-1 1 0.453 1 1 1 1-0.453 1-1zM26 17.5v5c0 0.828-0.672 1.5-1.5 1.5h-23c-0.828 0-1.5-0.672-1.5-1.5v-5c0-0.828 0.672-1.5 1.5-1.5h7.266l2.109 2.125c0.578 0.562 1.328 0.875 2.125 0.875s1.547-0.313 2.125-0.875l2.125-2.125h7.25c0.828 0 1.5 0.672 1.5 1.5zM20.922 8.609c0.156 0.375 0.078 0.812-0.219 1.094l-7 7c-0.187 0.203-0.453 0.297-0.703 0.297s-0.516-0.094-0.703-0.297l-7-7c-0.297-0.281-0.375-0.719-0.219-1.094 0.156-0.359 0.516-0.609 0.922-0.609h4v-7c0-0.547 0.453-1 1-1h4c0.547 0 1 0.453 1 1v7h4c0.406 0 0.766 0.25 0.922 0.609z\"></path>\n    </symbol>\n    <symbol id=\"icon-arrow-circle-o-down\" viewBox=\"0 0 24 28\">\n      <title>arrow-circle-o-down</title>\n      <path d=\"M17.5 14.5c0 0.141-0.063 0.266-0.156 0.375l-4.984 4.984c-0.109 0.094-0.234 0.141-0.359 0.141s-0.25-0.047-0.359-0.141l-5-5c-0.141-0.156-0.187-0.359-0.109-0.547s0.266-0.313 0.469-0.313h3v-5.5c0-0.281 0.219-0.5 0.5-0.5h3c0.281 0 0.5 0.219 0.5 0.5v5.5h3c0.281 0 0.5 0.219 0.5 0.5zM12 5.5c-4.688 0-8.5 3.813-8.5 8.5s3.813 8.5 8.5 8.5 8.5-3.813 8.5-8.5-3.813-8.5-8.5-8.5zM24 14c0 6.625-5.375 12-12 12s-12-5.375-12-12 5.375-12 12-12v0c6.625 0 12 5.375 12 12z\"></path>\n    </symbol>\n    <symbol id=\"icon-arrow-circle-o-up\" viewBox=\"0 0 24 28\">\n      <title>arrow-circle-o-up</title>\n      <path d=\"M17.469 13.687c-0.078 0.187-0.266 0.313-0.469 0.313h-3v5.5c0 0.281-0.219 0.5-0.5 0.5h-3c-0.281 0-0.5-0.219-0.5-0.5v-5.5h-3c-0.281 0-0.5-0.219-0.5-0.5 0-0.141 0.063-0.266 0.156-0.375l4.984-4.984c0.109-0.094 0.234-0.141 0.359-0.141s0.25 0.047 0.359 0.141l5 5c0.141 0.156 0.187 0.359 0.109 0.547zM12 5.5c-4.688 0-8.5 3.813-8.5 8.5s3.813 8.5 8.5 8.5 8.5-3.813 8.5-8.5-3.813-8.5-8.5-8.5zM24 14c0 6.625-5.375 12-12 12s-12-5.375-12-12 5.375-12 12-12v0c6.625 0 12 5.375 12 12z\"></path>\n    </symbol>\n    <symbol id=\"icon-repeat\" viewBox=\"0 0 24 28\">\n      <title>repeat</title>\n      <path d=\"M24 4v7c0 0.547-0.453 1-1 1h-7c-0.406 0-0.766-0.25-0.922-0.625-0.156-0.359-0.078-0.797 0.219-1.078l2.156-2.156c-1.469-1.359-3.406-2.141-5.453-2.141-4.406 0-8 3.594-8 8s3.594 8 8 8c2.484 0 4.781-1.125 6.312-3.109 0.078-0.109 0.219-0.172 0.359-0.187 0.141 0 0.281 0.047 0.391 0.141l2.141 2.156c0.187 0.172 0.187 0.469 0.031 0.672-2.281 2.75-5.656 4.328-9.234 4.328-6.609 0-12-5.391-12-12s5.391-12 12-12c3.078 0 6.062 1.234 8.266 3.313l2.031-2.016c0.281-0.297 0.719-0.375 1.094-0.219 0.359 0.156 0.609 0.516 0.609 0.922z\"></path>\n    </symbol>\n    <symbol id=\"icon-list\" viewBox=\"0 0 28 28\">\n      <title>list</title>\n      <path d=\"M4 20.5v3c0 0.266-0.234 0.5-0.5 0.5h-3c-0.266 0-0.5-0.234-0.5-0.5v-3c0-0.266 0.234-0.5 0.5-0.5h3c0.266 0 0.5 0.234 0.5 0.5zM4 14.5v3c0 0.266-0.234 0.5-0.5 0.5h-3c-0.266 0-0.5-0.234-0.5-0.5v-3c0-0.266 0.234-0.5 0.5-0.5h3c0.266 0 0.5 0.234 0.5 0.5zM4 8.5v3c0 0.266-0.234 0.5-0.5 0.5h-3c-0.266 0-0.5-0.234-0.5-0.5v-3c0-0.266 0.234-0.5 0.5-0.5h3c0.266 0 0.5 0.234 0.5 0.5zM28 20.5v3c0 0.266-0.234 0.5-0.5 0.5h-21c-0.266 0-0.5-0.234-0.5-0.5v-3c0-0.266 0.234-0.5 0.5-0.5h21c0.266 0 0.5 0.234 0.5 0.5zM4 2.5v3c0 0.266-0.234 0.5-0.5 0.5h-3c-0.266 0-0.5-0.234-0.5-0.5v-3c0-0.266 0.234-0.5 0.5-0.5h3c0.266 0 0.5 0.234 0.5 0.5zM28 14.5v3c0 0.266-0.234 0.5-0.5 0.5h-21c-0.266 0-0.5-0.234-0.5-0.5v-3c0-0.266 0.234-0.5 0.5-0.5h21c0.266 0 0.5 0.234 0.5 0.5zM28 8.5v3c0 0.266-0.234 0.5-0.5 0.5h-21c-0.266 0-0.5-0.234-0.5-0.5v-3c0-0.266 0.234-0.5 0.5-0.5h21c0.266 0 0.5 0.234 0.5 0.5zM28 2.5v3c0 0.266-0.234 0.5-0.5 0.5h-21c-0.266 0-0.5-0.234-0.5-0.5v-3c0-0.266 0.234-0.5 0.5-0.5h21c0.266 0 0.5 0.234 0.5 0.5z\"></path>\n    </symbol>\n    <symbol id=\"icon-check-square-o\" viewBox=\"0 0 26 28\">\n      <title>check-square-o</title>\n      <path d=\"M22 14.531v4.969c0 2.484-2.016 4.5-4.5 4.5h-13c-2.484 0-4.5-2.016-4.5-4.5v-13c0-2.484 2.016-4.5 4.5-4.5h13c0.625 0 1.25 0.125 1.828 0.391 0.141 0.063 0.25 0.203 0.281 0.359 0.031 0.172-0.016 0.328-0.141 0.453l-0.766 0.766c-0.094 0.094-0.234 0.156-0.359 0.156-0.047 0-0.094-0.016-0.141-0.031-0.234-0.063-0.469-0.094-0.703-0.094h-13c-1.375 0-2.5 1.125-2.5 2.5v13c0 1.375 1.125 2.5 2.5 2.5h13c1.375 0 2.5-1.125 2.5-2.5v-3.969c0-0.125 0.047-0.25 0.141-0.344l1-1c0.109-0.109 0.234-0.156 0.359-0.156 0.063 0 0.125 0.016 0.187 0.047 0.187 0.078 0.313 0.25 0.313 0.453zM25.609 6.891l-12.719 12.719c-0.5 0.5-1.281 0.5-1.781 0l-6.719-6.719c-0.5-0.5-0.5-1.281 0-1.781l1.719-1.719c0.5-0.5 1.281-0.5 1.781 0l4.109 4.109 10.109-10.109c0.5-0.5 1.281-0.5 1.781 0l1.719 1.719c0.5 0.5 0.5 1.281 0 1.781z\"></path>\n    </symbol>\n    <symbol id=\"icon-play\" viewBox=\"0 0 22 28\">\n      <title>play</title>\n      <path d=\"M21.625 14.484l-20.75 11.531c-0.484 0.266-0.875 0.031-0.875-0.516v-23c0-0.547 0.391-0.781 0.875-0.516l20.75 11.531c0.484 0.266 0.484 0.703 0 0.969z\"></path>\n    </symbol>\n    <symbol id=\"icon-pause\" viewBox=\"0 0 24 28\">\n      <title>pause</title>\n      <path d=\"M24 3v22c0 0.547-0.453 1-1 1h-8c-0.547 0-1-0.453-1-1v-22c0-0.547 0.453-1 1-1h8c0.547 0 1 0.453 1 1zM10 3v22c0 0.547-0.453 1-1 1h-8c-0.547 0-1-0.453-1-1v-22c0-0.547 0.453-1 1-1h8c0.547 0 1 0.453 1 1z\"></path>\n    </symbol>\n    <symbol id=\"icon-stop\" viewBox=\"0 0 24 28\">\n      <title>stop</title>\n      <path d=\"M24 3v22c0 0.547-0.453 1-1 1h-22c-0.547 0-1-0.453-1-1v-22c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1z\"></path>\n    </symbol>\n    <symbol id=\"icon-chevron-right\" viewBox=\"0 0 19 28\">\n      <title>chevron-right</title>\n      <path d=\"M17.297 13.703l-11.594 11.594c-0.391 0.391-1.016 0.391-1.406 0l-2.594-2.594c-0.391-0.391-0.391-1.016 0-1.406l8.297-8.297-8.297-8.297c-0.391-0.391-0.391-1.016 0-1.406l2.594-2.594c0.391-0.391 1.016-0.391 1.406 0l11.594 11.594c0.391 0.391 0.391 1.016 0 1.406z\"></path>\n    </symbol>\n    <symbol id=\"icon-close-circle\" viewBox=\"0 0 24 28\">\n      <title>close-circle</title>\n      <path d=\"M17.953 17.531c0-0.266-0.109-0.516-0.297-0.703l-2.828-2.828 2.828-2.828c0.187-0.187 0.297-0.438 0.297-0.703s-0.109-0.531-0.297-0.719l-1.406-1.406c-0.187-0.187-0.453-0.297-0.719-0.297s-0.516 0.109-0.703 0.297l-2.828 2.828-2.828-2.828c-0.187-0.187-0.438-0.297-0.703-0.297s-0.531 0.109-0.719 0.297l-1.406 1.406c-0.187 0.187-0.297 0.453-0.297 0.719s0.109 0.516 0.297 0.703l2.828 2.828-2.828 2.828c-0.187 0.187-0.297 0.438-0.297 0.703s0.109 0.531 0.297 0.719l1.406 1.406c0.187 0.187 0.453 0.297 0.719 0.297s0.516-0.109 0.703-0.297l2.828-2.828 2.828 2.828c0.187 0.187 0.438 0.297 0.703 0.297s0.531-0.109 0.719-0.297l1.406-1.406c0.187-0.187 0.297-0.453 0.297-0.719zM24 14c0 6.625-5.375 12-12 12s-12-5.375-12-12 5.375-12 12-12 12 5.375 12 12z\"></path>\n    </symbol>\n    <symbol id=\"icon-question-circle\" viewBox=\"0 0 24 28\">\n      <title>question-circle</title>\n      <path d=\"M14 21.5v-3c0-0.281-0.219-0.5-0.5-0.5h-3c-0.281 0-0.5 0.219-0.5 0.5v3c0 0.281 0.219 0.5 0.5 0.5h3c0.281 0 0.5-0.219 0.5-0.5zM18 11c0-2.859-3-5-5.688-5-2.547 0-4.453 1.094-5.797 3.328-0.141 0.219-0.078 0.5 0.125 0.656l2.063 1.563c0.078 0.063 0.187 0.094 0.297 0.094 0.141 0 0.297-0.063 0.391-0.187 0.734-0.938 1.047-1.219 1.344-1.437 0.266-0.187 0.781-0.375 1.344-0.375 1 0 1.922 0.641 1.922 1.328 0 0.812-0.422 1.219-1.375 1.656-1.109 0.5-2.625 1.797-2.625 3.313v0.562c0 0.281 0.219 0.5 0.5 0.5h3c0.281 0 0.5-0.219 0.5-0.5v0c0-0.359 0.453-1.125 1.188-1.547 1.188-0.672 2.812-1.578 2.812-3.953zM24 14c0 6.625-5.375 12-12 12s-12-5.375-12-12 5.375-12 12-12 12 5.375 12 12z\"></path>\n    </symbol>\n    <symbol id=\"icon-info-circle\" viewBox=\"0 0 24 28\">\n      <title>info-circle</title>\n      <path d=\"M16 21.5v-2.5c0-0.281-0.219-0.5-0.5-0.5h-1.5v-8c0-0.281-0.219-0.5-0.5-0.5h-5c-0.281 0-0.5 0.219-0.5 0.5v2.5c0 0.281 0.219 0.5 0.5 0.5h1.5v5h-1.5c-0.281 0-0.5 0.219-0.5 0.5v2.5c0 0.281 0.219 0.5 0.5 0.5h7c0.281 0 0.5-0.219 0.5-0.5zM14 7.5v-2.5c0-0.281-0.219-0.5-0.5-0.5h-3c-0.281 0-0.5 0.219-0.5 0.5v2.5c0 0.281 0.219 0.5 0.5 0.5h3c0.281 0 0.5-0.219 0.5-0.5zM24 14c0 6.625-5.375 12-12 12s-12-5.375-12-12 5.375-12 12-12 12 5.375 12 12z\"></path>\n    </symbol>\n    <symbol id=\"icon-magnet\" viewBox=\"0 0 24 28\">\n      <title>magnet</title>\n      <path d=\"M24 13v2c0 6.375-5.047 11-12 11s-12-4.625-12-11v-2c0-0.547 0.453-1 1-1h6c0.547 0 1 0.453 1 1v2c0 2.859 3.328 3 4 3s4-0.141 4-3v-2c0-0.547 0.453-1 1-1h6c0.547 0 1 0.453 1 1zM8 3v6c0 0.547-0.453 1-1 1h-6c-0.547 0-1-0.453-1-1v-6c0-0.547 0.453-1 1-1h6c0.547 0 1 0.453 1 1zM24 3v6c0 0.547-0.453 1-1 1h-6c-0.547 0-1-0.453-1-1v-6c0-0.547 0.453-1 1-1h6c0.547 0 1 0.453 1 1z\"></path>\n    </symbol>\n    <symbol id=\"icon-folder-open\" viewBox=\"0 0 29 28\">\n      <title>folder-open</title>\n      <path d=\"M29.359 14.875c0 0.375-0.234 0.75-0.484 1.031l-5.25 6.188c-0.906 1.062-2.75 1.906-4.125 1.906h-17c-0.562 0-1.359-0.172-1.359-0.875 0-0.375 0.234-0.75 0.484-1.031l5.25-6.188c0.906-1.062 2.75-1.906 4.125-1.906h17c0.562 0 1.359 0.172 1.359 0.875zM24 9.5v2.5h-13c-1.953 0-4.375 1.109-5.641 2.609l-5.344 6.281c0-0.125-0.016-0.266-0.016-0.391v-15c0-1.922 1.578-3.5 3.5-3.5h5c1.922 0 3.5 1.578 3.5 3.5v0.5h8.5c1.922 0 3.5 1.578 3.5 3.5z\"></path>\n    </symbol>\n    <symbol id=\"icon-cogs\" viewBox=\"0 0 30 28\">\n      <title>cogs</title>\n      <path d=\"M14 14c0-2.203-1.797-4-4-4s-4 1.797-4 4 1.797 4 4 4 4-1.797 4-4zM26 22c0-1.094-0.906-2-2-2s-2 0.906-2 2c0 1.109 0.906 2 2 2 1.109 0 2-0.906 2-2zM26 6c0-1.094-0.906-2-2-2s-2 0.906-2 2c0 1.109 0.906 2 2 2 1.109 0 2-0.906 2-2zM20 12.578v2.891c0 0.203-0.156 0.438-0.359 0.469l-2.422 0.375c-0.125 0.406-0.297 0.797-0.5 1.188 0.438 0.625 0.906 1.203 1.406 1.797 0.063 0.094 0.109 0.187 0.109 0.313 0 0.109-0.031 0.219-0.109 0.297-0.313 0.422-2.063 2.328-2.516 2.328-0.125 0-0.234-0.047-0.328-0.109l-1.797-1.406c-0.391 0.203-0.781 0.359-1.203 0.484-0.078 0.797-0.156 1.656-0.359 2.422-0.063 0.219-0.25 0.375-0.469 0.375h-2.906c-0.219 0-0.438-0.172-0.469-0.391l-0.359-2.391c-0.406-0.125-0.797-0.297-1.172-0.484l-1.844 1.391c-0.078 0.078-0.203 0.109-0.313 0.109-0.125 0-0.234-0.047-0.328-0.125-0.406-0.375-2.25-2.047-2.25-2.5 0-0.109 0.047-0.203 0.109-0.297 0.453-0.594 0.922-1.172 1.375-1.781-0.219-0.422-0.406-0.844-0.547-1.281l-2.375-0.375c-0.219-0.031-0.375-0.234-0.375-0.453v-2.891c0-0.203 0.156-0.438 0.359-0.469l2.422-0.375c0.125-0.406 0.297-0.797 0.5-1.188-0.438-0.625-0.906-1.203-1.406-1.797-0.063-0.094-0.109-0.203-0.109-0.313s0.031-0.219 0.109-0.313c0.313-0.422 2.063-2.312 2.516-2.312 0.125 0 0.234 0.047 0.328 0.109l1.797 1.406c0.391-0.203 0.781-0.359 1.203-0.5 0.078-0.781 0.156-1.641 0.359-2.406 0.063-0.219 0.25-0.375 0.469-0.375h2.906c0.219 0 0.438 0.172 0.469 0.391l0.359 2.391c0.406 0.125 0.797 0.297 1.172 0.484l1.844-1.391c0.094-0.078 0.203-0.109 0.313-0.109 0.125 0 0.234 0.047 0.328 0.125 0.406 0.375 2.25 2.063 2.25 2.5 0 0.109-0.047 0.203-0.109 0.297-0.453 0.609-0.922 1.172-1.359 1.781 0.203 0.422 0.391 0.844 0.531 1.281l2.375 0.359c0.219 0.047 0.375 0.25 0.375 0.469zM30 20.906v2.188c0 0.234-2.016 0.453-2.328 0.484-0.125 0.297-0.281 0.562-0.469 0.812 0.141 0.313 0.797 1.875 0.797 2.156 0 0.047-0.016 0.078-0.063 0.109-0.187 0.109-1.859 1.109-1.937 1.109-0.203 0-1.375-1.563-1.531-1.797-0.156 0.016-0.313 0.031-0.469 0.031s-0.313-0.016-0.469-0.031c-0.156 0.234-1.328 1.797-1.531 1.797-0.078 0-1.75-1-1.937-1.109-0.047-0.031-0.063-0.078-0.063-0.109 0-0.266 0.656-1.844 0.797-2.156-0.187-0.25-0.344-0.516-0.469-0.812-0.313-0.031-2.328-0.25-2.328-0.484v-2.188c0-0.234 2.016-0.453 2.328-0.484 0.125-0.281 0.281-0.562 0.469-0.812-0.141-0.313-0.797-1.891-0.797-2.156 0-0.031 0.016-0.078 0.063-0.109 0.187-0.094 1.859-1.094 1.937-1.094 0.203 0 1.375 1.547 1.531 1.781 0.156-0.016 0.313-0.031 0.469-0.031s0.313 0.016 0.469 0.031c0.438-0.609 0.906-1.219 1.437-1.75l0.094-0.031c0.078 0 1.75 0.984 1.937 1.094 0.047 0.031 0.063 0.078 0.063 0.109 0 0.281-0.656 1.844-0.797 2.156 0.187 0.25 0.344 0.531 0.469 0.812 0.313 0.031 2.328 0.25 2.328 0.484zM30 4.906v2.187c0 0.234-2.016 0.453-2.328 0.484-0.125 0.297-0.281 0.562-0.469 0.812 0.141 0.313 0.797 1.875 0.797 2.156 0 0.047-0.016 0.078-0.063 0.109-0.187 0.109-1.859 1.109-1.937 1.109-0.203 0-1.375-1.563-1.531-1.797-0.156 0.016-0.313 0.031-0.469 0.031s-0.313-0.016-0.469-0.031c-0.156 0.234-1.328 1.797-1.531 1.797-0.078 0-1.75-1-1.937-1.109-0.047-0.031-0.063-0.078-0.063-0.109 0-0.266 0.656-1.844 0.797-2.156-0.187-0.25-0.344-0.516-0.469-0.812-0.313-0.031-2.328-0.25-2.328-0.484v-2.188c0-0.234 2.016-0.453 2.328-0.484 0.125-0.281 0.281-0.562 0.469-0.812-0.141-0.313-0.797-1.891-0.797-2.156 0-0.031 0.016-0.078 0.063-0.109 0.187-0.094 1.859-1.094 1.937-1.094 0.203 0 1.375 1.547 1.531 1.781 0.156-0.016 0.313-0.031 0.469-0.031s0.313 0.016 0.469 0.031c0.438-0.609 0.906-1.219 1.437-1.75l0.094-0.031c0.078 0 1.75 0.984 1.937 1.094 0.047 0.031 0.063 0.078 0.063 0.109 0 0.281-0.656 1.844-0.797 2.156 0.187 0.25 0.344 0.531 0.469 0.812 0.313 0.031 2.328 0.25 2.328 0.484z\"></path>\n    </symbol>\n    <symbol id=\"icon-upload\" viewBox=\"0 0 26 28\">\n      <title>upload</title>\n      <path d=\"M20 23c0-0.547-0.453-1-1-1s-1 0.453-1 1 0.453 1 1 1 1-0.453 1-1zM24 23c0-0.547-0.453-1-1-1s-1 0.453-1 1 0.453 1 1 1 1-0.453 1-1zM26 19.5v5c0 0.828-0.672 1.5-1.5 1.5h-23c-0.828 0-1.5-0.672-1.5-1.5v-5c0-0.828 0.672-1.5 1.5-1.5h6.672c0.422 1.156 1.531 2 2.828 2h4c1.297 0 2.406-0.844 2.828-2h6.672c0.828 0 1.5 0.672 1.5 1.5zM20.922 9.375c-0.156 0.375-0.516 0.625-0.922 0.625h-4v7c0 0.547-0.453 1-1 1h-4c-0.547 0-1-0.453-1-1v-7h-4c-0.406 0-0.766-0.25-0.922-0.625-0.156-0.359-0.078-0.797 0.219-1.078l7-7c0.187-0.203 0.453-0.297 0.703-0.297s0.516 0.094 0.703 0.297l7 7c0.297 0.281 0.375 0.719 0.219 1.078z\"></path>\n    </symbol>\n    <symbol id=\"icon-arrow-circle-down\" viewBox=\"0 0 24 28\">\n      <title>arrow-circle-down</title>\n      <path d=\"M20.062 14.016c0-0.266-0.094-0.516-0.281-0.703l-1.422-1.422c-0.187-0.187-0.438-0.281-0.703-0.281s-0.516 0.094-0.703 0.281l-2.953 2.953v-7.844c0-0.547-0.453-1-1-1h-2c-0.547 0-1 0.453-1 1v7.844l-2.953-2.953c-0.187-0.187-0.438-0.297-0.703-0.297s-0.516 0.109-0.703 0.297l-1.422 1.422c-0.187 0.187-0.281 0.438-0.281 0.703s0.094 0.516 0.281 0.703l7.078 7.078c0.187 0.187 0.438 0.281 0.703 0.281s0.516-0.094 0.703-0.281l7.078-7.078c0.187-0.187 0.281-0.438 0.281-0.703zM24 14c0 6.625-5.375 12-12 12s-12-5.375-12-12 5.375-12 12-12 12 5.375 12 12z\"></path>\n    </symbol>\n    <symbol id=\"icon-link\" viewBox=\"0 0 26 28\">\n      <title>link</title>\n      <path d=\"M22.75 19c0-0.406-0.156-0.781-0.438-1.062l-3.25-3.25c-0.281-0.281-0.672-0.438-1.062-0.438-0.453 0-0.812 0.172-1.125 0.5 0.516 0.516 1.125 0.953 1.125 1.75 0 0.828-0.672 1.5-1.5 1.5-0.797 0-1.234-0.609-1.75-1.125-0.328 0.313-0.516 0.672-0.516 1.141 0 0.391 0.156 0.781 0.438 1.062l3.219 3.234c0.281 0.281 0.672 0.422 1.062 0.422s0.781-0.141 1.062-0.406l2.297-2.281c0.281-0.281 0.438-0.656 0.438-1.047zM11.766 7.984c0-0.391-0.156-0.781-0.438-1.062l-3.219-3.234c-0.281-0.281-0.672-0.438-1.062-0.438s-0.781 0.156-1.062 0.422l-2.297 2.281c-0.281 0.281-0.438 0.656-0.438 1.047 0 0.406 0.156 0.781 0.438 1.062l3.25 3.25c0.281 0.281 0.672 0.422 1.062 0.422 0.453 0 0.812-0.156 1.125-0.484-0.516-0.516-1.125-0.953-1.125-1.75 0-0.828 0.672-1.5 1.5-1.5 0.797 0 1.234 0.609 1.75 1.125 0.328-0.313 0.516-0.672 0.516-1.141zM25.75 19c0 1.188-0.484 2.344-1.328 3.172l-2.297 2.281c-0.844 0.844-1.984 1.297-3.172 1.297-1.203 0-2.344-0.469-3.187-1.328l-3.219-3.234c-0.844-0.844-1.297-1.984-1.297-3.172 0-1.234 0.5-2.406 1.375-3.266l-1.375-1.375c-0.859 0.875-2.016 1.375-3.25 1.375-1.188 0-2.344-0.469-3.187-1.313l-3.25-3.25c-0.859-0.859-1.313-1.984-1.313-3.187 0-1.188 0.484-2.344 1.328-3.172l2.297-2.281c0.844-0.844 1.984-1.297 3.172-1.297 1.203 0 2.344 0.469 3.187 1.328l3.219 3.234c0.844 0.844 1.297 1.984 1.297 3.172 0 1.234-0.5 2.406-1.375 3.266l1.375 1.375c0.859-0.875 2.016-1.375 3.25-1.375 1.188 0 2.344 0.469 3.187 1.313l3.25 3.25c0.859 0.859 1.313 1.984 1.313 3.187z\"></path>\n    </symbol>\n    <symbol id=\"icon-bars\" viewBox=\"0 0 24 28\">\n      <title>bars</title>\n      <path d=\"M24 21v2c0 0.547-0.453 1-1 1h-22c-0.547 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1zM24 13v2c0 0.547-0.453 1-1 1h-22c-0.547 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1zM24 5v2c0 0.547-0.453 1-1 1h-22c-0.547 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1z\"></path>\n    </symbol>\n    <symbol id=\"icon-cloud-download\" viewBox=\"0 0 30 28\">\n      <title>cloud-download</title>\n      <path d=\"M20 14.5c0-0.281-0.219-0.5-0.5-0.5h-3.5v-5.5c0-0.266-0.234-0.5-0.5-0.5h-3c-0.266 0-0.5 0.234-0.5 0.5v5.5h-3.5c-0.281 0-0.5 0.234-0.5 0.5 0 0.125 0.047 0.266 0.141 0.359l5.5 5.5c0.094 0.094 0.219 0.141 0.359 0.141 0.125 0 0.266-0.047 0.359-0.141l5.484-5.484c0.094-0.109 0.156-0.234 0.156-0.375zM30 18c0 3.313-2.688 6-6 6h-17c-3.859 0-7-3.141-7-7 0-2.719 1.578-5.187 4.031-6.328-0.016-0.234-0.031-0.453-0.031-0.672 0-4.422 3.578-8 8-8 3.25 0 6.172 1.969 7.406 4.969 0.719-0.625 1.641-0.969 2.594-0.969 2.203 0 4 1.797 4 4 0 0.766-0.219 1.516-0.641 2.156 2.719 0.641 4.641 3.063 4.641 5.844z\"></path>\n    </symbol>\n    <symbol id=\"icon-file-text-o\" viewBox=\"0 0 24 28\">\n      <title>file-text-o</title>\n      <path d=\"M22.937 5.938c0.578 0.578 1.062 1.734 1.062 2.562v18c0 0.828-0.672 1.5-1.5 1.5h-21c-0.828 0-1.5-0.672-1.5-1.5v-25c0-0.828 0.672-1.5 1.5-1.5h14c0.828 0 1.984 0.484 2.562 1.062zM16 2.125v5.875h5.875c-0.094-0.266-0.234-0.531-0.344-0.641l-4.891-4.891c-0.109-0.109-0.375-0.25-0.641-0.344zM22 26v-16h-6.5c-0.828 0-1.5-0.672-1.5-1.5v-6.5h-12v24h20zM6 12.5c0-0.281 0.219-0.5 0.5-0.5h11c0.281 0 0.5 0.219 0.5 0.5v1c0 0.281-0.219 0.5-0.5 0.5h-11c-0.281 0-0.5-0.219-0.5-0.5v-1zM17.5 16c0.281 0 0.5 0.219 0.5 0.5v1c0 0.281-0.219 0.5-0.5 0.5h-11c-0.281 0-0.5-0.219-0.5-0.5v-1c0-0.281 0.219-0.5 0.5-0.5h11zM17.5 20c0.281 0 0.5 0.219 0.5 0.5v1c0 0.281-0.219 0.5-0.5 0.5h-11c-0.281 0-0.5-0.219-0.5-0.5v-1c0-0.281 0.219-0.5 0.5-0.5h11z\"></path>\n    </symbol>\n    <symbol id=\"icon-puzzle-piece\" viewBox=\"0 0 26 28\">\n      <title>puzzle-piece</title>\n      <path d=\"M26 17.156c0 1.609-0.922 2.953-2.625 2.953-1.906 0-2.406-1.734-4.125-1.734-1.25 0-1.719 0.781-1.719 1.937 0 1.219 0.5 2.391 0.484 3.594v0.078c-0.172 0-0.344 0-0.516 0.016-1.609 0.156-3.234 0.469-4.859 0.469-1.109 0-2.266-0.438-2.266-1.719 0-1.719 1.734-2.219 1.734-4.125 0-1.703-1.344-2.625-2.953-2.625-1.641 0-3.156 0.906-3.156 2.703 0 1.984 1.516 2.844 1.516 3.922 0 0.547-0.344 1.031-0.719 1.391-0.484 0.453-1.172 0.547-1.828 0.547-1.281 0-2.562-0.172-3.828-0.375-0.281-0.047-0.578-0.078-0.859-0.125l-0.203-0.031c-0.031-0.016-0.078-0.016-0.078-0.031v-16c0.063 0.047 0.984 0.156 1.141 0.187 1.266 0.203 2.547 0.375 3.828 0.375 0.656 0 1.344-0.094 1.828-0.547 0.375-0.359 0.719-0.844 0.719-1.391 0-1.078-1.516-1.937-1.516-3.922 0-1.797 1.516-2.703 3.172-2.703 1.594 0 2.938 0.922 2.938 2.625 0 1.906-1.734 2.406-1.734 4.125 0 1.281 1.156 1.719 2.266 1.719 1.797 0 3.578-0.406 5.359-0.5v0.031c-0.047 0.063-0.156 0.984-0.187 1.141-0.203 1.266-0.375 2.547-0.375 3.828 0 0.656 0.094 1.344 0.547 1.828 0.359 0.375 0.844 0.719 1.391 0.719 1.078 0 1.937-1.516 3.922-1.516 1.797 0 2.703 1.516 2.703 3.156z\"></path>\n    </symbol>\n    <symbol id=\"icon-percent\" viewBox=\"0 0 24 28\">\n      <title>percent</title>\n      <path d=\"M20 20c0-1.094-0.906-2-2-2s-2 0.906-2 2 0.906 2 2 2 2-0.906 2-2zM8 8c0-1.094-0.906-2-2-2s-2 0.906-2 2 0.906 2 2 2 2-0.906 2-2zM24 20c0 3.313-2.688 6-6 6s-6-2.688-6-6 2.688-6 6-6 6 2.688 6 6zM22.5 3c0 0.219-0.078 0.422-0.203 0.594l-16.5 22c-0.187 0.25-0.484 0.406-0.797 0.406h-2.5c-0.547 0-1-0.453-1-1 0-0.219 0.078-0.422 0.203-0.594l16.5-22c0.187-0.25 0.484-0.406 0.797-0.406h2.5c0.547 0 1 0.453 1 1zM12 8c0 3.313-2.688 6-6 6s-6-2.688-6-6 2.688-6 6-6 6 2.688 6 6z\"></path>\n    </symbol>\n  </defs>\n</svg>\n<!-- }}} -->\n\n<!-- {{{ header -->\n<div class=\"navbar main-navbar navbar-static-top\" ng-controller=\"NavCtrl\">\n    <div class=\"container\">\n        <div class=\"navbar-header\">\n            <button type=\"button\" class=\"navbar-toggle collapsed\" ng-click=\"collapsed = !collapsed\">\n              <span class=\"sr-only\">{{ 'Toggle navigation' | translate }}</span>\n              <span class=\"icon-bar\"></span>\n              <span class=\"icon-bar\"></span>\n              <span class=\"icon-bar\"></span>\n            </button>\n            <a class=\"navbar-brand\">\n              <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-down\"></use></svg> {{ name }}\n            </a>\n        </div>\n\n        <form class=\"navbar-form navbar-right\" role=\"search\">\n            <div class=\"form-group\">\n                <input class=\"form-control\" type=\"text\" placeholder=\"{{ 'Search' | translate }}\" ng-model=\"downloadFilter\" autocomplete=\"off\" ng-change=\"onDownloadFilter()\" />\n            </div>\n        </form>\n\n        <!-- {{{ Nav menu -->\n        <div class=\"collapse navbar-collapse\" collapse=\"collapsed\">\n            <ul class=\"nav navbar-nav\">\n                <li class=\"dropdown\" dropdown>\n                    <a class=\"dropdown-toggle\" href=\"#\" dropdown-toggle>\n                      {{ 'Add' | translate }} <span class=\"caret\"></span>\n                    </a>\n                    <ul class=\"dropdown-menu\">\n                        <li>\n                            <a href=\"#\" ng-click=\"addUris()\">\n                              <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-link\"></use></svg> {{ 'By URIs' | translate }}\n                            </a>\n                        </li>\n                        <li ng-show=\"isFeatureEnabled('BitTorrent') && enable.torrent\">\n                            <a href=\"#\" ng-click=\"addTorrents()\">\n                              <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cloud-download\"></use></svg> {{ 'By Torrents' | translate }}\n                            </a>\n                        </li>\n                        <li ng-show=\"isFeatureEnabled('Metalink') && enable.metalink\">\n                            <a href=\"#\" ng-click=\"addMetalinks()\">\n                              <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-file-text-o\"></use></svg> {{ 'By Metalinks' | translate }}\n                            </a>\n                        </li>\n                    </ul>\n                </li>\n\n                <li class=\"dropdown\" dropdown>\n                    <a class=\"dropdown-toggle\" href=\"#\" dropdown-toggle> {{ 'Manage' | translate }} <span class=\"caret\"></span></a>\n                    <ul class=\"dropdown-menu\">\n                        <li>\n                            <a href=\"#\" ng-click=\"forcePauseAll()\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-pause\"></use></svg> {{ 'Pause All' | translate }}</a>\n                        </li>\n                        <li>\n                            <a href=\"#\" ng-click=\"unpauseAll()\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-play\"></use></svg> {{ 'Resume Paused' | translate }}</a>\n                        </li>\n                        <li>\n                            <a href=\"#\" ng-click=\"purgeDownloadResult()\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-close-circle\"></use></svg> {{ 'Purge Completed' | translate }}</a>\n                        </li>\n                        <li>\n                            <a href=\"#\" ng-click=\"shutDownServer()\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-power-off\"></use></svg> {{ 'Shutdown Server' | translate }}</a>\n                        </li>\n                        <!-- not adding remove all as requires many rpc syscalls to finish\n                          <li>\n                            <a\n                              href=\"#\"\n                              ng-click=\"removeAll()\"><span class=\"fa fa-fw fa-fire\">&nbsp;</span> Remove All</a>\n                          </li>\n                          -->\n                    </ul>\n                </li>\n            </ul>\n\n            <ul class=\"nav navbar-nav\">\n                <li class=\"dropdown\" dropdown>\n                    <a href=\"#\" class=\"dropdown-toggle\" dropdown-toggle>{{ 'Settings' | translate }} <span class=\"caret\"></span></a>\n\n                    <ul class=\"dropdown-menu\">\n                        <li>\n                            <a ng-click=\"changeCSettings()\" href=\"#\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cog\"></use></svg> {{ 'Connection Settings' | translate }}</a>\n                        </li>\n\n                        <li>\n                            <a ng-click=\"changeGSettings()\" href=\"#\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cogs\"></use></svg> {{ 'Global Settings' | translate }}</a>\n                        </li>\n\n                        <li>\n                            <a ng-click=\"showServerInfo()\" href=\"#\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-info-circle\"></use></svg> {{ 'Server info' | translate }}</a>\n                        </li>\n\n                        <li>\n                            <a ng-click=\"showAbout()\" href=\"#\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-question-circle\"></use></svg> {{ 'About and contribute' | translate }}</a>\n                        </li>\n                    </ul>\n                </li>\n            </ul>\n\n            <ul class=\"nav navbar-nav pull-right\" ng-show=\"false\">\n                <li class=\"dropdown\" dropdown>\n                    <a class=\"dropdown-toggle\" dropdown-toggle href=\"#\">{{ 'Miscellaneous' | translate }} <span class=\"caret\"></span></a>\n                    <ul class=\"dropdown-menu\">\n                        <li>\n                            <a href=\"#\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-list-alt\"></use></svg> {{ 'Global Statistics' | translate }}</a>\n                        </li>\n                        <li>\n                            <a href=\"#\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-info-circle\"></use></svg> {{ 'About' | translate }}</a>\n                        </li>\n                    </ul>\n                </li>\n            </ul>\n\n            <ul class=\"nav navbar-nav\">\n                <li class=\"dropdown\" dropdown>\n                    <a href=\"#\" class=\"dropdown-toggle\" dropdown-toggle>{{ 'Language' | translate }} <span class=\"caret\"></span></a>\n\n                    <ul class=\"dropdown-menu\">\n                        <li>\n                            <a ng-click=\"changeLanguage('en_US')\" href=\"#\"><span class=\"flag-icon flag-icon-us\">&nbsp;</span> English</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('th_TH')\" href=\"#\"><span class=\"flag-icon flag-icon-th\">&nbsp;</span> ไทย</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('nl_NL')\" href=\"#\"><span class=\"flag-icon flag-icon-nl\">&nbsp;</span> Nederlands</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('zh_CN')\" href=\"#\"><span class=\"flag-icon flag-icon-cn\">&nbsp;</span> 简体中文</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('zh_TW')\" href=\"#\"><span class=\"flag-icon flag-icon-tw\">&nbsp;</span> 繁體中文</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('pl_PL')\" href=\"#\"><span class=\"flag-icon flag-icon-pl\">&nbsp;</span> Polish</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('fr_FR')\" href=\"#\"><span class=\"flag-icon flag-icon-fr\">&nbsp;</span> Français</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('de_DE')\" href=\"#\"><span class=\"flag-icon flag-icon-de\">&nbsp;</span> Deutsch</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('es_ES')\" href=\"#\"><span class=\"flag-icon flag-icon-es\">&nbsp;</span> Español</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('ru_RU')\" href=\"#\"><span class=\"flag-icon flag-icon-ru\">&nbsp;</span> Русский</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('it_IT')\" href=\"#\"><span class=\"flag-icon flag-icon-it\">&nbsp;</span> Italiano</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('tr_TR')\" href=\"#\"><span class=\"flag-icon flag-icon-tr\">&nbsp;</span> Turkish</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('cs_CZ')\" href=\"#\"><span class=\"flag-icon flag-icon-cz\">&nbsp;</span> Czech</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('fa_IR')\" href=\"#\"><span class=\"flag-icon flag-icon-ir\">&nbsp;</span> Farsi</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('id_ID')\" href=\"#\"><span class=\"flag-icon flag-icon-id\">&nbsp;</span> Indonesian</a>\n                        </li>\n                        <li>\n                            <a ng-click=\"changeLanguage('pt_BR')\" href=\"#\"><span class=\"flag-icon flag-icon-br\">&nbsp;</span> Brazilian Portuguese</a>\n                        </li>\n                    </ul>\n                </li>\n            </ul>\n        </div>\n        <!-- }}} -->\n    </div>\n    <!--/.nav-collapse -->\n</div>\n<!-- }}} -->\n\n<!-- {{{ body -->\n<div role=\"main\" class=\"container-fluid\">\n\n<!-- {{{ alerts -->\n<div ng-controller=\"AlertCtrl\" class=\"row-fluid alerts\">\n  <div class=\"alert alert-{{alert.type == 'error' ? 'danger' : alert.type}}\" ng-repeat=\"alert in pendingAlerts\">\n    <button type=\"button\" class=\"close\" ng-click=\"removeAlert($index)\">&times;</button>\n    <span ng-bind-html=\"alert.msg\"></span>\n  </div>\n</div>\n<!-- }}} -->\n\n<div class=\"row-fluid\">\n  <div ng-class=\"{'col-md-3': enable.sidebar.show}\" ng-show=\"enable.sidebar.show\">\n    <!-- {{{ nav side bar -->\n    <div class=\"sidebar-nav\">\n\n      <!-- {{{ global statistics -->\n      <ul class=\"nav nav-list\" ng-if=\"enable.sidebar.stats\">\n        <li class=\"nav-header\" ng-show=\"totalAria2Downloads()\">{{ 'Global Statistics' | translate }}</li>\n        <li>\n          <div\n            id=\"global-graph\"\n            yticks=\"3\"\n            xticks=\"1\"\n            dspeed=\"gstats.downloadSpeed\"\n            uspeed=\"gstats.uploadSpeed\"\n            dgraph ng-show=\"totalAria2Downloads()\"\n            nolabel=\"true\"\n            draw=\"true\">\n          </div>\n        </li>\n        <li>\n          <span title=\"Upload Speed\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-up\"></use></svg>{{gstats.uploadSpeed | bspeed}}</span><br />\n          <span title=\"Download Speed\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-down\"></use></svg>{{gstats.downloadSpeed | bspeed}}</span>\n        </li>\n      </ul>\n      <!-- }}} -->\n\n      <br />\n\n      <!-- {{{ download filters -->\n      <ul id=\"filters\" class=\"clearfix nav nav-list\" ng-show=\"enable.sidebar.filters\">\n        <li class=\"nav-header\">{{ 'Download Filters' | translate }}</li>\n        <li class=\"checkbox\">\n          <label for=\"filter-speed\">\n            <input type=\"checkbox\" ng-model=\"filterSpeed\" ng-change=\"persistFilters()\" id=\"filter-speed\">\n            {{ 'Running' | translate }}\n          </label>\n        </li>\n        <li class=\"active checkbox\">\n          <label for=\"filter-active\">\n            <input type=\"checkbox\" ng-model=\"filterActive\" ng-change=\"persistFilters()\" id=\"filter-active\">\n            {{ 'Active' | translate }}\n          </label>\n        </li>\n        <li class=\"checkbox\">\n          <label for=\"filter-waiting\">\n            <input type=\"checkbox\" ng-model=\"filterWaiting\" ng-change=\"persistFilters()\" id=\"filter-waiting\">\n            {{ 'Waiting' | translate }}\n          </label>\n        </li>\n        <li class=\"checkbox\">\n          <label for=\"filter-complete\">\n            <input type=\"checkbox\" ng-model=\"filterComplete\" ng-change=\"persistFilters()\" id=\"filter-complete\">\n            {{ 'Complete' | translate }}\n          </label>\n        </li>\n        <li class=\"checkbox\">\n          <label for=\"filter-error\">\n            <input type=\"checkbox\" ng-model=\"filterError\" ng-change=\"persistFilters()\" id=\"filter-error\">\n            {{ 'Error' | translate }}\n          </label>\n        </li>\n        <li class=\"checkbox\">\n          <label for=\"filter-paused\">\n            <input type=\"checkbox\" ng-model=\"filterPaused\" ng-change=\"persistFilters()\" id=\"filter-paused\">\n            {{ 'Paused' | translate }}\n          </label>\n        </li>\n        <li class=\"checkbox\">\n          <label for=\"filter-removed\">\n            <input type=\"checkbox\" ng-model=\"filterRemoved\" ng-change=\"persistFilters()\" id=\"filter-removed\">\n            {{ 'Removed' | translate }}\n          </label>\n        </li>\n        <li class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" ng-model=\"hideLinkedMetadata\" id=\"hide-linked-metadata\">\n            {{ 'Hide linked meta-data' | translate }}\n          </label>\n        </li>\n        <li>\n          <p>\n          {{ 'Displaying' | translate }} <strong>{{totalDownloads}}</strong> {{ 'of' | translate }} <em>{{totalAria2Downloads()}}&nbsp;</em> {{ 'downloads' | translate }}\n          </p>\n          <p>\n            <button ng-click=\"toggleStateFilters()\" class=\"btn btn-default btn-xs\">{{ 'Toggle' | translate }}</button>\n            <button ng-click=\"resetFilters()\" class=\"btn btn-default btn-xs\">{{ 'Reset filters' | translate }}</button>\n          </p>\n        </li>\n      </ul>\n      <!-- }}} -->\n\n      <br />\n\n\n      <!-- {{{ starred properties -->\n      <ul class=\"clearfix nav nav-list\" ng-controller=\"StarredPropsCtrl\" ng-show=\"properties.length && enable.sidebar.starredProps\">\n        <li class=\"nav-header\">{{ 'Quick Access Settings' | translate }}</li>\n        <li ng-repeat=\"prop in properties\" class=\"form-group\">\n          <label title=\"{{prop.desc}}\" style=\"width: 100%;\">{{prop.name}}</label>\n          <div class=\"form-group\">\n            <select style=\"width: 100%;\" ng-show=\"prop.options.length && !prop.multiline\" class=\"form-control\" ng-options=\"opt for opt in prop.options\" ng-model=\"prop.val\"></select>\n            <input style=\"width: 100%;\" ng-show=\"!prop.options.length && !prop.multiline\" type=\"text\" class=\"form-control input-large\" ng-model=\"prop.val\"/>\n            <textarea style=\"width: 100%;\" ng-show=\"prop.multiline\" ng-model=\"prop.val\"></textarea>\n          </div>\n        </li>\n        <li>\n          <button ng-disabled=\"!enabled()\" ng-click=\"save()\" class=\"btn btn-default btn-sm\">{{ 'Save settings' | translate }}</button>\n        </li>\n      </ul>\n      <!-- }}} -->\n\n\n    </div>\n    <!-- }}} -->\n  </div>\n\n  <div ng-class=\"{'col-md-9': enable.sidebar.show, 'col-md-12': !enable.sidebar.show }\">\n    <!-- {{{ downloads -->\n    <!-- Bug?? <div ng-show=\"!totalAria2Downloads() && totalAria2Downloads() > getDownloads()\" class=\"hero-unit\">-->\n    <div ng-show=\"!totalAria2Downloads()\" class=\"download-empty\">\n      {{ 'Currently no download in line to display, use the' | translate }} <strong>{{ 'Add' | translate }}</strong> {{ 'download button to start downloading files!' | translate }}\n    </div>\n\n\n    <!-- {{{ download template -->\n\n    <div\n      ng-repeat=\"download in getDownloads()\"\n      class=\"row-fluid download\" data-gid=\"{{download.gid}}\"\n      ng-click=\"toggleCollapsed(download)\">\n    <div class=\"download-name download-item download-controls clearfix\">\n        <!-- {{{ download control buttons -->\n        <div class=\"btn-group\" role=\"group\" ng-click=\"$event.stopPropagation()\">\n            <button\n                ng-if=\"hasStatus(download, ['active', 'waiting'])\"\n                class=\"btn btn-default\"\n                ng-click=\"pause(download)\">\n                <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-pause\"></use></svg>\n            </button>\n\n            <button\n                ng-if=\"hasStatus(download, 'paused')\"\n                class=\"btn btn-default\"\n                ng-click=\"resume(download)\">\n                <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-play\"></use></svg>\n            </button>\n\n            <button\n                ng-if=\"canRestart(download)\"\n                class=\"btn btn-default\"\n                ng-click=\"restart(download)\">\n                <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-repeat\"></use></svg>\n            </button>\n\n            <button\n                class=\"btn btn-default hidden-phone\"\n                ng-click=\"remove(download)\">\n                <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-stop\"></use></svg>\n            </button>\n\n            <button\n                ng-if=\"hasStatus(download, 'paused')\"\n                class=\"btn btn-default\"\n                ng-click=\"selectFiles(download)\">\n                <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-list\"></use></svg>\n            </button>\n\n            <button\n                class=\"btn btn-default hidden-phone\"\n                ng-if=\"['waiting', 'active'].indexOf( getType(download) )!= -1\"\n                ng-click=\"showSettings(download)\">\n                <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cog\"></use></svg>\n            </button>\n            <button\n                ng-if=\"hasStatus(download, 'waiting')\"\n                class=\"btn btn-default hidden-phone\"\n                ng-click=\"moveDown(download)\">\n                <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-down\"></use></svg>\n            </button>\n            <button\n                ng-if=\"hasStatus(download, 'waiting')\"\n                class=\"btn btn-default hidden-phone\"\n                ng-click=\"moveUp(download)\">\n                <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-up\"></use></svg>\n            </button>\n            <div class=\"btn-group\" dropdown>\n                <button class=\"btn btn-default dropdown-toggle\" dropdown-toggle>\n                    <span class=\"caret\"></span>\n                </button>\n                <ul class=\"dropdown-menu pull-right\">\n\n                    <li class=\"visible-phone\">\n                        <a\n                            ng-click=\"showSettings(download)\"\n                            ng-show=\"['waiting', 'active'].indexOf( getType(download) )!= -1\"\n                            href=\"#\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cog\"></use></svg> {{ 'Settings' | translate }}</a>\n                    </li>\n\n                    <li ng-show=\"download.bittorrent && false\">\n                        <a href=\"#\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-list-alt\"></use></svg> {{ 'Peers' | translate }}</a>\n                    </li>\n\n                    <li>\n                        <a ng-click=\"toggleCollapsed(download)\"\n                           href=\"#\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-info-circle\"></use></svg> {{ 'More Info' | translate }}</a>\n                    </li>\n\n                    <li class=\"visible-phone\">\n                        <a ng-click=\"remove(download)\"\n                           href=\"#\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-times\"></use></svg> {{ 'Remove' | translate }}</a>\n                    </li>\n                </ul>\n            </div>\n        </div>\n        <!-- }}} -->\n\n        <div class=\"title\">\n            <svg ng-show=\"download.metadata\" class=\"icon icon-fw\" style=\"fill: red\"><use xlink:href=\"#icon-magnet\"></use></svg>\n            {{download.name}}\n        </div>\n    </div>\n      <div class=\"download-overview download-item clearfix\" ng-switch=\"download.status\">\n        <!-- {{{ statistics -->\n        <ul class=\"stats pull-left\" ng-switch-when=\"active\">\n          <!-- {{{ active download statistics -->\n          <li class=\"label label-active hidden-phone hidden-tablet\">\n            <span title=\"{{ 'Download status' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-play\"></use></svg> {{ 'Active' | translate }}</span>\n          </li>\n\n          <li class=\"label label-default\" ng-class=\"{'label-active': download.downloadSpeed > 2048, 'label-warning': download.downloadSpeed <= 2048}\">\n            <span title=\"{{ 'Download Speed' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-down\"></use></svg> {{download.downloadSpeed | bspeed}}</span>\n          </li>\n\n          <li ng-show=\"download.bittorrent\" class=\"label label-default hidden-phone\" ng-class=\"{'label-info': download.uploadSpeed > 2048}\">\n            <span title=\"{{ 'Upload Speed' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-up\"></use></svg> {{download.uploadSpeed | bspeed}}</span>\n          </li>\n\n          <li class=\"label label-active\">\n            <span title=\"{{ 'Estimated time' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-clock-o\"></use></svg> {{getEta(download) | time}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone\">\n            <span title=\"{{ 'Download Size' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cloud-download\"></use></svg> {{download.fmtTotalLength}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone\">\n            <span title=\"{{ 'Downloaded' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-down\"></use></svg> {{download.fmtCompletedLength}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone\">\n            <span title=\"{{ 'Uploaded' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-upload\"></use></svg> {{download.fmtUploadLength}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone\">\n            <span title=\"{{ 'Ratio' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-percent\"></use></svg> {{ 'Ratio' | translate }}&nbsp;{{getRatio(download)}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone hidden-tablet\">\n            <span title=\"{{ 'Progress' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-chevron-right\"></use></svg> {{getProgress(download)}}%</span>\n          </li>\n\n          <!-- }}} -->\n        </ul>\n\n        <ul class=\"stats pull-left\" ng-switch-when=\"verifying\">\n          <!-- {{{ active download statistics -->\n          <li class=\"label label-warning hidden-phone hidden-tablet\">\n            <span title=\"{{ 'Download status' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-play\"></use></svg> {{ 'Verifying' | translate }}</span>\n          </li>\n\n          <li class=\"label label-default\" ng-class=\"{'label-active': download.downloadSpeed > 2048, 'label-warning': download.downloadSpeed <= 2048}\">\n            <span title=\"{{ 'Download Speed' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-down\"></use></svg> {{download.downloadSpeed | bspeed}}</span>\n          </li>\n\n          <li ng-show=\"download.bittorrent\" class=\"label label-default hidden-phone\" ng-class=\"{'label-info': download.uploadSpeed > 2048}\">\n            <span title=\"{{ 'Upload Speed' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-up\"></use></svg> {{download.uploadSpeed | bspeed}}</span>\n          </li>\n\n          <li class=\"label label-active\">\n            <span title=\"{{ 'Estimated time' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-clock-o\"></use></svg> {{getEta(download) | time}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone\">\n            <span title=\"{{ 'Download Size' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cloud-download\"></use></svg> {{download.fmtTotalLength}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone\">\n            <span title=\"{{ 'Downloaded' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-down\"></use></svg> {{download.fmtCompletedLength}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone hidden-tablet\">\n            <span title=\"{{ 'Progress' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-chevron-right\"></use></svg> {{getProgress(download)}}%</span>\n          </li>\n\n          <!-- }}} -->\n        </ul>\n\n        <ul class=\"stats pull-left\" ng-switch-when=\"verifyPending\">\n          <!-- {{{ active download statistics -->\n          <li class=\"label label-warning hidden-phone hidden-tablet\">\n            <span title=\"{{ 'Download status' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-play\"></use></svg> {{ 'Verify Pending' | translate}}</span>\n          </li>\n\n          <li class=\"label label-default\" ng-class=\"{'label-active': download.downloadSpeed > 2048, 'label-warning': download.downloadSpeed <= 2048}\">\n            <span title=\"{{ 'Download Speed' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-down\"></use></svg> {{download.downloadSpeed | bspeed}}</span>\n          </li>\n\n          <li ng-show=\"download.bittorrent\" class=\"label label-default hidden-phone\" ng-class=\"{'label-info': download.uploadSpeed > 2048}\">\n            <span title=\"{{ 'Upload Speed' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-up\"></use></svg> {{download.uploadSpeed | bspeed}}</span>\n          </li>\n\n          <li class=\"label label-active\">\n            <span title=\"{{ 'Estimated time' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-clock-o\"></use></svg> {{getEta(download) | time}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone\">\n            <span title=\"{{ 'Download Size' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cloud-download\"></use></svg> {{download.fmtTotalLength}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone\">\n            <span title=\"{{ 'Downloaded' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-down\"></use></svg> {{download.fmtCompletedLength}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone hidden-tablet\">\n            <span title=\"{{ 'Progress' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-chevron-right\"></use></svg> {{getProgress(download)}}%</span>\n          </li>\n\n          <!-- }}} -->\n        </ul>\n\n        <ul class=\"stats pull-left\" ng-switch-when=\"paused\">\n          <!-- {{{ paused download statistics -->\n          <li class=\"label label-info\">\n            <span title=\"{{ 'Download status' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-pause\"></use></svg> {{ 'Paused' | translate }}</span>\n          </li>\n\n          <li class=\"label label-info\">\n            <span title=\"{{ 'Download Size' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cloud-download\"></use></svg> {{download.fmtTotalLength}}</span>\n          </li>\n\n          <li class=\"label label-info hidden-phone\">\n            <span title=\"{{ 'Downloaded' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-download\"></use></svg> {{download.fmtCompletedLength}}</span>\n          </li>\n\n          <li class=\"label label-info hidden-phone\">\n            <span title=\"{{ 'Download Path' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-folder-open\"></use></svg> {{download.dir}}</span>\n          </li>\n\n          <!--  }}} -->\n        </ul>\n\n        <ul class=\"stats pull-left\" ng-switch-when=\"waiting\">\n          <!-- {{{ paused download statistics -->\n          <li class=\"label label-default\">\n            <span title=\"{{ 'Download status' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-chevron-right\"></use></svg> {{ 'Waiting' | translate }}</span>\n          </li>\n\n          <li class=\"label label-default\">\n            <span title=\"{{ 'Download Size' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cloud-download\"></use></svg> {{download.fmtTotalLength}}</span>\n          </li>\n\n          <li class=\"label label-default hidden-phone\">\n            <span title=\"{{ 'Downloaded' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-download\"></use></svg> {{download.fmtCompletedLength}}</span>\n          </li>\n\n          <li class=\"label label-default hidden-phone\">\n            <span title=\"{{ 'Download Path' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-folder-open\"></use></svg> {{download.dir}}</span>\n          </li>\n\n          <!--  }}} -->\n        </ul>\n\n        <ul class=\"stats pull-left\" ng-switch-when=\"complete\">\n          <!-- {{{ complete download statistics -->\n\n          <li class=\"label label-success\">\n            <span title=\"{{ 'Download status' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-check-square-o\"></use></svg> {{ 'Complete' | translate }}</span>\n          </li>\n\n          <li class=\"label label-success\">\n            <span title=\"{{ 'Download Size' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cloud-download\"></use></svg> {{download.fmtTotalLength}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone\">\n            <span title=\"{{ 'Uploaded' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-upload\"></use></svg> {{download.fmtUploadLength}}</span>\n          </li>\n\n          <li class=\"label label-active hidden-phone\">\n            <span title=\"{{ 'Ratio' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-percent\"></use></svg> {{ 'Ratio' | translate }}&nbsp;{{getRatio(download)}}</span>\n          </li>\n\n          <li class=\"label label-success hidden-phone\">\n            <span title=\"{{ 'Download Path' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-folder-open\"></use></svg> {{download.dir}}</span>\n          </li>\n\n          <!-- }}} -->\n        </ul>\n\n        <ul class=\"stats pull-left\" ng-switch-when=\"removed\">\n          <!-- {{{ removed download statistics -->\n          <li class=\"label label-warning\">\n            <span title=\"{{ 'Download status' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-times\"></use></svg> {{ 'Removed' | translate }}</span>\n          </li>\n\n          <li class=\"label label-warning\">\n            <span title=\"{{ 'Download Size' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cloud-download\"></use></svg> {{download.fmtTotalLength}}</span>\n          </li>\n\n          <li class=\"label label-warning hidden-phone\">\n            <span title=\"{{ 'Download Path' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-folder-open\"></use></svg> {{download.dir}}</span>\n          </li>\n\n          <!-- }}} -->\n        </ul>\n\n        <ul class=\"stats pull-left\" ng-switch-when=\"error\">\n\n          <!-- {{{ error download statistics -->\n          <li class=\"label label-danger\">\n            <span title=\"{{ 'Error ' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-close-circle\"></use></svg> {{getErrorStatus(download.errorCode)}}</span>\n          </li>\n\n          <li class=\"label label-default\">\n            <span title=\"{{ 'Download Size' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cloud-download\"></use></svg> {{download.fmtTotalLength}}</span>\n          </li>\n\n          <li class=\"label label-default hidden-phone\">\n            <span title=\"{{ 'Download Path' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-folder-open\"></use></svg> {{download.dir}}</span>\n          </li>\n\n          <!-- }}} -->\n        </ul>\n\n        <!-- }}} -->\n      </div>\n      <div class=\"download-progress download-item\">\n        <div class=\"progress\">\n          <div ng-class=\"'progress-bar progress-bar-striped ' + getProgressClass(download)\" style=\"width: {{getProgress(download)}}%;\"></div>\n        </div>\n      </div>\n      <div ng-switch=\"download.collapsed\">\n        <div ng-switch-when=\"false\" collapse=\"download.animCollapsed\">\n          <div class=\"download-item\" ng-show=\"download.numPieces > 1\">\n            <canvas bitfield=\"download.bitfield\" draw=\"!download.collapsed\" pieces=\"download.numPieces\" class=\"progress chunk-canvas\" width=\"1400\" chunkbar></canvas>\n          </div>\n          <ul class=\"stats download-item\">\n            <li class=\"label label-default\" title=\"{{ 'Estimated time' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-clock-o\"></use></svg> <span class=\"download-eta\">{{getEta(download) | time}}</span></li>\n\n            <li class=\"label label-default\" title=\"{{ 'Download Size' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-cloud-download\"></use></svg> <span class=\"download-totalLength\">{{download.fmtTotalLength}}</span></li>\n\n            <li class=\"label label-default\" title=\"{{ 'Downloaded' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-download\"></use></svg> <span class=\"download-completedLength\">{{download.fmtCompletedLength}}</span></li>\n\n            <li class=\"label label-default\" title=\"{{ 'Download Speed' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-down\"></use></svg> <span class=\"download-downloadSpeed\">{{download.fmtDownloadSpeed}}</span></li>\n\n            <li class=\"label label-default\" title=\"{{ 'Upload Speed' | translate }}\" ng-show=\"download.bittorrent\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-arrow-circle-o-up\"></use></svg> <span class=\"download-uploadSpeed\">{{download.fmtUploadSpeed}}</span></li>\n\n            <li class=\"label label-default\" title=\"{{ 'Uploaded' | translate }}\" ng-show=\"download.bittorrent\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-upload\"></use></svg> <span class=\"download-uploadLength\">{{download.fmtUploadLength}}</span></li>\n\n            <li class=\"label label-default\" title=\"{{ 'Ratio' | translate }}\" ng-show=\"download.bittorrent\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-percent\"></use></svg><span title=\"{{ 'Ratio' | translate }}\">{{ 'Ratio' | translate }}&nbsp;{{getRatio(download)}}</span></li>\n\n            <li class=\"label label-default\" title={{download.connectionsTitle}}><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-link\"></use></svg> <span class=\"download-connections\">{{download.connections}}{{download.numSeeders}}</span></li>\n\n            <li class=\"label label-default\" title=\"{{ 'Download GID' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-bars\"></use></svg> <span class=\"download-gid\">{{download.gid}}</span></li>\n            <li class=\"label label-default\" title=\"{{ 'Number of Pieces' | translate }}\">{{ '# of' | translate }} <svg class=\"icon icon-fw\"><use xlink:href=\"#icon-puzzle-piece\"></use></svg> <span class=\"download-numPieces\">{{download.numPieces}}</span></li>\n            <li class=\"label label-default\" title=\"{{ 'Piece Length' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-puzzle-piece\"></use></svg> {{ 'Length' | translate }}&nbsp; <span class=\"download-pieceLength\">{{download.fmtPieceLength}}</span></li>\n            <li class=\"label label-default\" title=\"{{ 'Download Path' | translate }}\"><svg class=\"icon icon-fw\"><use xlink:href=\"#icon-folder-open\"></use></svg> <span class=\"download-dir\">{{download.dir}}</span></li>\n          </ul>\n          <ul class=\"download-files hidden-phone download-item\">\n            <li class=\"label label-default\" ng-repeat=\"file in download.files\" ng-class=\"{'label-success': file.selected}\">\n              <a ng-if=\"hasDirectURL()\" ng-click=\"$event.stopPropagation()\" ng-href=\"{{getDirectURL()}}{{file.relpath | encodeURI}}\" target=\"download\">{{file.relpath}} ({{file.fmtLength}})</a>\n              <span ng-if=\"!hasDirectURL()\">{{file.relpath}} ({{file.fmtLength}})</span>\n            </li>\n          </ul>\n          <div ng-show=\"hasStatus(download, 'active')\" class=\"download-item hidden-phone\">\n            <div class=\"download-graph\" dspeed=\"download.downloadSpeed\" uspeed=\"download.uploadSpeed\" xticks=\"7\" yticks=\"7\"  dgraph draw=\"!download.collapsed\"></div>\n          </div>\n        </div>\n      </div>\n    </div>\n    <!-- }}} -->\n\n    <!-- }}} -->\n  </div>\n\n  <!-- {{{ download pagination -->\n  <div class=\"col-md-offset-3 col-md-9\" ng-show=\"totalDownloads > pageSize\">\n    <div class=\"pagination pull-right\">\n      <pagination\n        total-items=\"totalDownloads\"\n        items-per-page=\"pageSize\"\n        max-size=\"11\"\n        ng-model=\"currentPage\"\n        boundary-links=\"true\"\n        previous-text=\"&lsaquo;\"\n        next-text=\"&rsaquo;\"\n        first-text=\"&laquo;\"\n        last-text=\"&raquo;\"\n        >\n      </pagination>\n    </div>\n  </div>\n  <!-- }}} -->\n</div>\n\n</div>\n\n<!-- }}} -->\n\n<!-- {{{ modals -->\n<div ng-controller=\"ModalCtrl\">\n\n<!--{{{ add uri modal -->\n<script type=\"text/ng-template\" id=\"getUris.html\">\n  <div class=\"modal-header\">\n    <button class=\"close\" ng-click=\"$dismiss()\">&times;</button>\n    <h4>{{ 'Add Downloads By URIs' | translate }}</h4>\n  </div>\n  <form class=\"modal-body\">\n    <fieldset>\n      <p class=\"help-block\">\n    {{ '- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.' | translate }}<br />\n    {{ '- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.' | translate }}<br />\n    {{ '- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.' | translate }}</br>\n      </p>\n      <textarea rows=\"4\" style=\"width: 100%\" ng-model=\"getUris.uris\" autofocus placeholder=\"http://mirror1.com/f1.jpg http://mirror2.com/f1.jpg\\nhttp://mirror1.com/f2.mp4 http://mirror2.com/f2.mp4 --out=file2.mp4\"></textarea>\n      <br /><br />\n\n        <div>\n          <div ng-click=\"getUris.downloadSettingsCollapsed = !getUris.downloadSettingsCollapsed\" class=\"modal-advanced-title\">\n            {{ 'Download settings' | translate }}\n            <span class=\"caret\" ng-class=\"{ 'rotate-90': getUris.downloadSettingsCollapsed }\"></span>\n          </div>\n          <div collapse=\"getUris.downloadSettingsCollapsed\" class=\"form-horizontal modal-advanced-options\">\n            <div class=\"form-group\" ng-repeat=\"(name, set) in getUris.settings\">\n              <label class=\"col-sm-3 control-label\">{{name}}</label>\n\n              <div class=\"col-sm-9 controls\">\n                <select class=\"form-control\" ng-show=\"set.options.length && !set.multiline\" ng-options=\"opt for opt in set.options\" ng-model=\"set.val\">\n                </select>\n                <input ng-show=\"!set.options.length && !set.multiline\" type=\"text\" class=\"form-control input-xxlarge modal-form-input-verylarge\" ng-model=\"set.val\"/>\n                <textarea ng-show=\"set.multiline\" ng-model=\"set.val\"></textarea>\n              </div>\n              <br />\n            </div>\n          </div>\n\n          <br />\n          <div ng-click=\"getUris.advancedSettingsCollapsed = !getUris.advancedSettingsCollapsed\" class=\"modal-advanced-title\">\n            {{ 'Advanced settings' | translate }}\n            <span class=\"caret\" ng-class=\"{ 'rotate-90': getUris.advancedSettingsCollapsed }\"></span>\n          </div>\n          <div collapse=\"getUris.advancedSettingsCollapsed\" class=\"form-horizontal modal-advanced-options\">\n            <div class=\"form-group\" ng-repeat=\"(name, set) in getUris.fsettings\">\n              <p class=\"col-sm-offset-3 col-sm-9 help-block controls\">{{set.desc}}</p>\n\n              <label class=\"col-sm-3 control-label\">{{name}}</label>\n              <div class=\"col-sm-9 controls\">\n                <select class=\"form-control\" ng-show=\"set.options.length && !set.multiline\" ng-options=\"opt for opt in set.options\" ng-model=\"set.val\">\n                </select>\n                <input ng-show=\"!set.options.length && !set.multiline\" type=\"text\" class=\"form-control input-xxlarge modal-form-input-verylarge\" ng-model=\"set.val\"/>\n                <textarea ng-show=\"set.multiline\" ng-model=\"set.val\"></textarea>\n              </div>\n              <br />\n            </div>\n          </div>\n        </div>\n    </fieldset>\n    <div class=\"modal-footer\">\n      <button type=\"button\" class=\"btn btn-default\" ng-click=\"$dismiss()\">{{ 'Cancel' | translate }}</button>\n      <button class=\"btn btn-default btn-primary\" ng-click=\"$close()\">{{ 'Start' | translate }}</button>\n    </div>\n  </form>\n</script>\n<!-- }}} -->\n\n<!-- {{{ add torrent modal -->\n<script type=\"text/ng-template\" id=\"getTorrents.html\">\n  <div class=\"modal-header\">\n    <button class=\"close\" ng-click=\"$dismiss()\">&times;</button>\n    <h4>{{ 'Add Downloads By Torrents' | translate }}</h4>\n  </div>\n  <form class=\"modal-body\">\n    <fieldset>\n      <legend>{{ 'Select Torrents' | translate }}</legend>\n      <p class=\"help-block\">\n    {{ '- Select the torrent from the local filesystem to start the download.' | translate }}<br />\n    {{ '- You can select multiple torrents to start multiple downloads.' | translate }}<br />\n    {{ '- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.' | translate }}\n      </p>\n      <div class=\"form-horizontal form-group\">\n        <label class=\"control-label\" style=\"text-align: left;\"><b>{{ 'Select a Torrent' | translate }}:</b></label>\n        <div class=\"controls\">\n          <input type=\"file\" fselect=\"getTorrents.files\" multiple />\n        </div>\n      </div>\n      <br />\n\n      <div>\n        <div class=\"modal-advanced-title\">\n          {{ 'Download settings' | translate }}\n        </div>\n        <div class=\"form-horizontal modal-advanced-options\">\n          <div class=\"form-group\" ng-repeat=\"(name, set) in getTorrents.settings\">\n            <label class=\"col-sm-3 control-label\">{{name}}</label>\n\n            <div class=\"col-sm-9 controls\">\n              <select class=\"form-control\" ng-show=\"set.options.length && !set.multiline\" ng-options=\"opt for opt in set.options\" ng-model=\"set.val\">\n              </select>\n              <input ng-show=\"!set.options.length && !set.multiline\" type=\"text\" class=\"form-control input-xxlarge modal-form-input-verylarge\" ng-model=\"set.val\"/>\n              <textarea ng-show=\"set.multiline\" ng-model=\"set.val\"></textarea>\n            </div>\n            <br />\n          </div>\n        </div>\n\n        <br />\n        <div ng-click=\"getTorrents.collapsed = !getTorrents.collapsed\" class=\"modal-advanced-title\">\n          {{ 'Advanced settings' | translate }}\n          <span class=\"caret\" ng-class=\"{ 'rotate-90': getTorrents.collapsed }\"></span>\n        </div>\n        <div collapse=\"getTorrents.collapsed\" class=\"form-horizontal modal-advanced-options\">\n          <div class=\"form-group\" ng-repeat=\"(name, set) in getTorrents.fsettings\">\n            <p class=\"col-sm-offset-3 col-sm-9 help-block controls\">{{set.desc}}</p>\n\n            <label class=\"col-sm-3 control-label\">{{name}}</label>\n            <div class=\"col-sm-9 controls\">\n              <select class=\"form-control\" ng-show=\"set.options.length && !set.multiline\" ng-options=\"opt for opt in set.options\" ng-model=\"set.val\">\n              </select>\n              <input ng-show=\"!set.options.length && !set.multiline\" type=\"text\" class=\"form-control input-xxlarge modal-form-input-verylarge\" ng-model=\"set.val\"/>\n              <textarea ng-show=\"set.multiline\" ng-model=\"set.val\"></textarea>\n            </div>\n            <br />\n          </div>\n        </div>\n      </div>\n    </fieldset>\n  </form>\n  <div class=\"modal-footer\">\n    <button class=\"btn btn-default\" ng-click=\"$dismiss()\">{{ 'Cancel' | translate }}</button>\n    <button class=\"btn btn-default btn-primary\" ng-click=\"$close()\">{{ 'Start' | translate }}</button>\n  </div>\n</script>\n<!-- }}} -->\n\n<!-- {{{ add metalink modal -->\n<script type=\"text/ng-template\" id=\"getMetalinks.html\">\n  <div class=\"modal-header\">\n    <button class=\"close\" ng-click=\"$dismiss()\">&times;</button>\n    <h4>{{ 'Add Downloads By Metalinks' | translate }}</h4>\n  </div>\n  <form class=\"modal-body\">\n    <fieldset>\n      <legend>{{ 'Select Metalinks' | translate }}</legend>\n      <p class=\"help-block\">\n    {{ '- Select the Metalink from the local filesystem to start the download.' | translate }}<br />\n    {{ '- You can select multiple Metalinks to start multiple downloads.' | translate }}\n      </p>\n      <div class=\"form-horizontal form-group\">\n        <label class=\"control-label\" style=\"text-align: left;\"><b>{{ 'Select a Metalink' | translate }}:</b></label>\n        <div class=\"controls\">\n          <input type=\"file\" fselect=\"getMetalinks.files\" multiple />\n        </div>\n      </div>\n      <br />\n\n      <div>\n        <div class=\"modal-advanced-title\">\n          {{ 'Download settings' | translate }}\n        </div>\n        <div class=\"form-horizontal modal-advanced-options\">\n          <div class=\"form-group\" ng-repeat=\"(name, set) in getMetalinks.settings\">\n            <label class=\"col-sm-3 control-label\">{{name}}</label>\n\n            <div class=\"col-sm-9 controls\">\n              <select class=\"form-control\" ng-show=\"set.options.length && !set.multiline\" ng-options=\"opt for opt in set.options\" ng-model=\"set.val\">\n              </select>\n              <input ng-show=\"!set.options.length && !set.multiline\" type=\"text\" class=\"form-control input-xxlarge modal-form-input-verylarge\" ng-model=\"set.val\"/>\n              <textarea ng-show=\"set.multiline\" ng-model=\"set.val\"></textarea>\n            </div>\n            <br />\n          </div>\n        </div>\n\n        <br />\n        <div ng-click=\"getMetalinks.collapsed = !getMetalinks.collapsed\" class=\"modal-advanced-title\">\n          {{ 'Advanced settings' | translate }}\n          <span class=\"caret\" ng-class=\"{ 'rotate-90': getMetalinks.collapsed }\"></span>\n        </div>\n        <div collapse=\"getMetalinks.collapsed\" class=\"form-horizontal modal-advanced-options\">\n          <div class=\"form-group\" ng-repeat=\"(name, set) in getMetalinks.fsettings\">\n            <p class=\"col-sm-offset-3 col-sm-9 help-block controls\">{{set.desc}}</p>\n\n            <label class=\"col-sm-3 control-label\">{{name}}</label>\n            <div class=\"col-sm-9 controls\">\n              <select class=\"form-control\" ng-show=\"set.options.length && !set.multiline\" ng-options=\"opt for opt in set.options\" ng-model=\"set.val\">\n              </select>\n              <input ng-show=\"!set.options.length && !set.multiline\" type=\"text\" class=\"form-control input-xxlarge modal-form-input-verylarge\" ng-model=\"set.val\"/>\n              <textarea ng-show=\"set.multiline\" ng-model=\"set.val\"></textarea>\n            </div>\n            <br />\n          </div>\n        </div>\n      </div>\n    </fieldset>\n  </form>\n  <div class=\"modal-footer\">\n    <button class=\"btn btn-default\" ng-click=\"$dismiss()\">{{ 'Cancel' | translate }}</button>\n    <button class=\"btn btn-default btn-primary\" ng-click=\"$close()\">{{ 'Start' | translate }}</button>\n  </div>\n</script>\n<!-- }}} -->\n\n<!-- {{{ select files checkbox modal -->\n<script type=\"text/ng-template\" id=\"selectFilesCheckBox.html\">\n  <div ng-repeat=\"(folderName,folder) in files.dirs\">\n    <!--recursive folder-->\n\n    <div class=\"controls\">\n      <!--click to toggle show the subfolders and files-->\n      <div class=\"checkbox\" data-ng-click=\"folder.show=!folder.show\">\n        <!-- The value of indeterminate=\"\" can be bound to any angular expression -->\n        <input type=\"checkbox\" data-ng-model=\"folder.selected\" data-ng-click=\"$event.stopPropagation()\" indeterminate/>{{folderName}}\n        <span ng-show=\"!folder.show\" class=\"control-label\">{{ 'click the text to expand the folder' | translate }}</span>\n        <span ng-show=\"folder.show\" class=\"control-label\">{{ 'click the text to collapse the folder' | translate }}</span>\n      </div>\n      <div ng-show=\"folder.show\" class=\"form-group selectFiles recursivedir\" ng-include=\"'selectFilesCheckBox.html'\" ng-init=\"files=folder\">\n      </div>\n    </div>\n  </div>\n\n  <div ng-repeat=\"file in files.files\">\n    <!--files-->\n    <label class=\"control-label\">{{ 'Select to download' | translate }}</label>\n\n    <div class=\"controls\">\n      <label class=\"checkbox\">\n        <input type=\"checkbox\" data-ng-model=\"file.selected\" indeterminate=\"false\"/>{{file.relpath}}\n      </label>\n    </div>\n    <br/>\n    <br/>\n  </div>\n</script>\n<!-- }}} -->\n\n<!-- {{{ select file modal -->\n<script type=\"text/ng-template\" id=\"selectFiles.html\">\n  <div class=\"modal-header\">\n    <button class=\"close\" ng-click=\"$dismiss()\">&times;</button>\n    <h4>{{ 'Choose files to start download for' | translate }}</h4>\n  </div>\n\n  <form class=\"form-horizontal modal-body\">\n    <fieldset>\n      <div class=\"form-group selectFiles\" ng-include=\"'selectFilesCheckBox.html'\" ng-init=\"files=selectFiles.groupedFiles\">\n      </div>\n    </fieldset>\n  </form>\n\n  <div class=\"modal-footer\">\n    <button class=\"btn btn-default\" ng-click=\"$dismiss()\">{{ 'Cancel' | translate }}</button>\n    <button class=\"btn btn-default btn-primary\" ng-click=\"$close()\">{{ 'Choose' | translate }}</button>\n  </div>\n</script>\n<!-- }}} -->\n\n<!-- {{{ settings modal -->\n<script type=\"text/ng-template\" id=\"settings.html\">\n  <div class=\"modal-header\">\n    <button class=\"close\" ng-click=\"$dismiss()\">&times;</button>\n    <h4>{{settings.title}}</h4>\n  </div>\n\n  <div class=\"modal-body\">\n    <div class=\"row\">\n      <div class=\"col-md-12 form-group filter-input-group\">\n        <input type=\"text\" class=\"form-control input-xlarge\" ng-model=\"propFilter\" placeholder=\"{{ 'Filter' | translate }}\"/>\n        <span class=\"clear-button\" ng-show=\"propFilter\" ng-click=\"propFilter = ''\">&times;</span>\n      </div>\n    </div>\n    <form class=\"form-horizontal\">                  \n      <fieldset>\n        <div class=\"form-group\" ng-repeat=\"(name, set) in settings.settings | objFilter:propFilter\">\n          <label class=\"col-sm-3 control-label\">{{name}}</label>\n\n          <div class=\"col-sm-9 controls\">\n            <select class=\"form-control\" ng-show=\"set.options.length && !set.multiline\" ng-options=\"opt for opt in set.options\" ng-model=\"set.val\">\n            </select>\n            <input ng-show=\"!set.options.length && !set.multiline\" type=\"text\" class=\"form-control input-xlarge\" ng-model=\"set.val\"/>\n            <textarea ng-show=\"set.multiline\" ng-model=\"set.val\"></textarea>\n            <div class=\"checkbox\" ng-show=\"set.starred != undefined\">\n              <label>\n                <input type=\"checkbox\" ng-model=\"set.starred\"/>\n                {{ 'Quick Access (shown on the main page)' | translate }}\n              </label>\n            </div>\n            <p class=\"help-block\">{{set.desc}}</p>\n          </div>\n        </div>\n      </fieldset>\n    </form>\n  </div>\n\n  <div class=\"modal-footer\">\n    <button class=\"btn btn-default\" ng-click=\"$dismiss()\">{{ 'Cancel' | translate }}</button>\n    <button class=\"btn btn-default btn-primary\" ng-click=\"$close()\">{{settings.actionText}}</button>\n  </div>\n</script>\n<!-- }}} -->\n\n<!--{{{ connection modal -->\n<script type=\"text/ng-template\" id=\"connection.html\">\n  <div class=\"modal-header\">\n    <button class=\"close\" ng-click=\"$dismiss()\">&times;</button>\n    <h4>{{ 'Connection Settings' | translate }}</h4>\n  </div>\n  <div class=\"modal-body\">\n    <form class=\"form-horizontal\">\n      <fieldset>\n        <legend>{{ 'Aria2 RPC host and port' | translate }}</legend>\n        <div class=\"form-group\">\n          <label class=\"col-sm-3 control-label\">{{ 'Enter the host' | translate }}:</label>\n          <div class=\"col-sm-9 controls\">\n            <div class=\"input-group\">\n              <span class=\"input-group-addon\">http(s)://</span>\n              <input type=\"text\" class=\"form-control input-xlarge\"\n                ng-model=\"connection.conf.host\"/>\n            </div>\n            <p class=\"help-block\">\n          {{ 'Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)' | translate }}\n            </p>\n          </div>\n        </div>\n\n        <div class=\"form-group\">\n          <label class=\"col-sm-3 control-label\">{{ 'Enter the port' | translate }}:</label>\n          <div class=\"col-sm-9 controls\">\n            <input type=\"text\" class=\"form-control input-xlarge modal-form-input-number\"\n              ng-model=\"connection.conf.port\"/>\n            <p class=\"help-block\">\n          {{ 'Enter the port of the server on which the RPC for Aria2 is running (default: 6800)' | translate }}\n            </p>\n          </div>\n        </div>\n\n        <div class=\"form-group\">\n          <label class=\"col-sm-3 control-label\">{{ 'Enter the RPC path' | translate }}:</label>\n          <div class=\"col-sm-9 controls\">\n            <div class=\"input-group\">\n\t\t\t  <span class=\"input-group-addon\">http(s)://{{connection.conf.host + ':' + connection.conf.port}}</span>\n              <input type=\"text\" class=\"form-control input-xlarge\"\n                ng-model=\"connection.conf.path\"/>\n            </div>\n            <p class=\"help-block\">\n          {{ 'Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)' | translate }}\n            </p>\n          </div>\n        </div>\n\n        <div class=\"form-group\">\n          <label class=\"col-sm-3 control-label\">{{ 'SSL/TLS encryption' | translate }}:</label>\n          <div class=\"col-sm-9 controls\">\n            <div class=\"checkbox\">\n              <label>\n                <input type=\"checkbox\" ng-model=\"connection.conf.encrypt\"/>\n                {{ 'Enable SSL/TLS encryption' | translate }}\n              </label>\n            </div>\n          </div>\n        </div>\n\n        <div class=\"form-group\">\n          <label class=\"col-sm-3 control-label\">{{ 'Enter the secret token (optional)' | translate }}:</label>\n          <div class=\"col-sm-9 controls\">\n            <label>\n              <input type=\"password\" class=\"form-control input-xlarge\" ng-model=\"connection.conf.auth.token\"/>\n              <p class=\"help-block\">\n          {{ 'Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)' | translate }}\n              </p>\n            </label>\n          </div>\n        </div>\n\n        <div class=\"form-group\">\n          <label class=\"col-sm-3 control-label\">{{ 'Enter the username (optional)' | translate }}:</label>\n          <div class=\"col-sm-9 controls\">\n            <input type=\"text\" class=\"form-control input-xlarge\"\n              ng-model=\"connection.conf.auth.user\"/>\n            <p class=\"help-block\">\n          {{ 'Enter the Aria2 RPC username (empty if authentication not enabled)' | translate }}\n            </p>\n          </div>\n        </div>\n\n        <div class=\"form-group\">\n          <label class=\"col-sm-3 control-label\">{{ 'Enter the password (optional)' | translate }}:</label>\n          <div class=\"col-sm-9 controls\">\n            <input type=\"password\" class=\"form-control input-xlarge\"\n              ng-model=\"connection.conf.auth.pass\"/>\n            <p class=\"help-block\">\n          {{ 'Enter the Aria2 RPC password (empty if authentication not enabled)' | translate }}\n            </p>\n          </div>\n        </div>\n      </fieldset>\n\n      <fieldset>\n        <legend>{{ 'Direct Download' | translate }}</legend>\n        <div class=\"form-group\">\n          <label class=\"col-sm-3 control-label\">{{ 'Enter base URL (optional)' | translate }}:</label>\n          <div class=\"col-sm-9 controls\">\n            <input type=\"text\" class=\"form-control input-xlarge\"\n              ng-model=\"connection.conf.directURL\"/>\n            <p class=\"help-block\">\n              {{ 'If supplied, links will be created to enable direct download from the Aria2 server.' | translate }}<br />\n              {{ '(Requires appropriate webserver to be configured.)' | translate }}\n            </p>\n          </div>\n        </div>\n      </fieldset>\n    </form>\n  </div>\n  <div class=\"modal-footer\">\n    <button href=\"#\" class=\"btn btn-default\" ng-click=\"$dismiss()\">{{ 'Cancel' | translate }}</button>\n    <button href=\"#\" class=\"btn btn-default btn-primary\" ng-click=\"$close()\">\n      {{ 'Save Connection configuration' | translate }}\n    </button>\n  </div>\n</script>\n<!-- }}} -->\n\n\n<!-- {{{ server info modal -->\n<script type=\"text/ng-template\" id=\"server_info.html\">\n  <div class=\"modal-header\">\n    <button class=\"close\" ng-click=\"$dismiss()\">&times;</button>\n    <h4>{{ 'Aria2 server info' | translate }}</h4>\n  </div>\n  <div class=\"modal-body\">\n      <b>{{ 'Aria2 Version' | translate }} {{miscellaneous.version}}</b>\n      <br /><br />\n      <b>{{ 'Features Enabled' | translate }}</b>\n        <ul>\n        <li\n          ng-repeat=\"feature in miscellaneous.enabledFeatures\">\n          <span>{{feature}}</span>\n        </li>\n        </ul>\n  </div>\n  <div class=\"modal-footer\">\n    <button class=\"btn btn-default\" ng-click=\"$dismiss()\">{{ 'Close' | translate }}</button>\n  </div>\n</script>\n<!-- }}} -->\n\n<!-- {{{ about modal -->\n<script type=\"text/ng-template\" id=\"about.html\">\n  <div class=\"modal-header\">\n    <button class=\"close\" ng-click=\"$dismiss()\">&times;</button>\n    <h4>{{ 'About and contribute' | translate }}</h4>\n  </div>\n  <div class=\"modal-body\">\n      <p>\n        {{ 'To download the latest version of the project, add issues or to contribute back, head on to' | translate }}:<br />\n        <a href=\"https://github.com/ziahamza/webui-aria2\" target=\"_blank\">https://github.com/ziahamza/webui-aria2</a>\n        <br /><br />\n        {{ 'Or you can open the latest version in the browser through' | translate }}:<br />\n        <a href=\"https://ziahamza.github.io/webui-aria2\" target=\"_blank\">https://ziahamza.github.io/webui-aria2</a>\n      </p>\n  </div>\n  <div class=\"modal-footer\">\n    <button class=\"btn btn-default\" ng-click=\"$dismiss()\">{{ 'Close' | translate }}</button>\n  </div>\n</script>\n<!-- }}} -->\n\n</div>\n<!-- }}} -->\n\n</body>\n</html>\n"
  },
  {
    "path": "src/js/app.js",
    "content": "// WebUI Aria2 is an angular 1.x application\n// This file imports all the required modules for the application\n\n// Vendor libraries\nimport angular from \"angular\";\nimport angularTranslate from \"angular-translate\";\nrequire(\"libs/angularui-bootstrap-tpls.min\");\nrequire(\"libs/bootstrap-filestyle\");\nrequire(\"libs/jquery.flot.min\");\nrequire(\"libs/jquery.flot.time.min\");\n\n// Stylesheets\nimport \"app.scss\";\n\n// Services\nimport serviceAlerts from \"services/alerts\";\nimport servideBase64 from \"services/base64\";\nimport serviceConfiguration from \"services/configuration\";\nimport serviceDeps from \"services/deps\";\nimport serviceErrors from \"services/errors\";\nimport serviceRpc from \"services/rpc/rpc\";\nimport serviceRpcHelpers from \"services/rpc/helpers\";\nimport serviceRpcJsoncall from \"services/rpc/jsoncall\";\nimport serviceRpcSockcall from \"services/rpc/sockcall\";\nimport serviceRpcSyscall from \"services/rpc/syscall\";\nimport serviceSettings from \"services/settings/settings\";\nimport serviceFilters from \"services/settings/filters\";\nimport serviceModals from \"services/modals\";\nimport serviceUtils from \"services/utils\";\n\n// Filters\nimport filterBytes from \"filters/bytes\";\nimport filterUrl from \"filters/url\";\n\n// Directives\nimport directiveChunkbar from \"directives/chunkbar\";\nimport directiveDgraph from \"directives/dgraph\";\nimport directiveFselect from \"directives/fselect\";\nimport directiveFileselect from \"directives/fileselect\";\nimport directiveTextarea from \"directives/textarea\";\n\n// Controllers\nimport ctrlAlert from \"ctrls/alert\";\nimport ctrlMain from \"ctrls/main\";\nimport ctrlModal from \"ctrls/modal\";\nimport ctrlNav from \"ctrls/nav\";\nimport ctrlProps from \"ctrls/props\";\n\n// Translations\nrequire(\"translate/nl_NL\");\nrequire(\"translate/en_US\");\nrequire(\"translate/th_TH\");\nrequire(\"translate/zh_CN\");\nrequire(\"translate/zh_TW\");\nrequire(\"translate/pl_PL\");\nrequire(\"translate/fr_FR\");\nrequire(\"translate/de_DE\");\nrequire(\"translate/es_ES\");\nrequire(\"translate/ru_RU\");\nrequire(\"translate/it_IT\");\nrequire(\"translate/tr_TR\");\nrequire(\"translate/cs_CZ\");\nrequire(\"translate/fa_IR\");\nrequire(\"translate/id_ID\");\nrequire(\"translate/pt_BR\");\n\nvar webui = angular.module(\"webui\", [\n  serviceUtils,\n  serviceDeps,\n  serviceErrors,\n  servideBase64,\n  serviceConfiguration,\n  serviceRpc,\n  serviceRpcHelpers,\n  serviceRpcJsoncall,\n  serviceRpcSockcall,\n  serviceRpcSyscall,\n  serviceModals,\n  serviceAlerts,\n  serviceSettings,\n  serviceFilters,\n  filterBytes,\n  filterUrl,\n  directiveChunkbar,\n  directiveDgraph,\n  directiveFselect,\n  directiveFileselect,\n  ctrlAlert,\n  ctrlMain,\n  ctrlModal,\n  ctrlNav,\n  ctrlProps,\n  // external deps\n  \"ui.bootstrap\",\n  // translate\n  \"pascalprecht.translate\"\n]);\n\nfunction mergeTranslation(translation, base) {\n  for (var i in base) {\n    if (!base.hasOwnProperty(i)) {\n      continue;\n    }\n\n    if (!translation[i] || !translation[i].length) {\n      translation[i] = base[i];\n    }\n  }\n  return translation;\n}\n\nwebui.config([\n  \"$translateProvider\",\n  \"$locationProvider\",\n  function($translateProvider, $locationProvider) {\n    $translateProvider\n      .translations(\"en_US\", translations.en_US)\n      .translations(\"nl_NL\", mergeTranslation(translations.nl_NL, translations.en_US))\n      .translations(\"th_TH\", mergeTranslation(translations.th_TH, translations.en_US))\n      .translations(\"zh_CN\", mergeTranslation(translations.zh_CN, translations.en_US))\n      .translations(\"zh_TW\", mergeTranslation(translations.zh_TW, translations.en_US))\n      .translations(\"pl_PL\", mergeTranslation(translations.pl_PL, translations.en_US))\n      .translations(\"fr_FR\", mergeTranslation(translations.fr_FR, translations.en_US))\n      .translations(\"de_DE\", mergeTranslation(translations.de_DE, translations.en_US))\n      .translations(\"es_ES\", mergeTranslation(translations.es_ES, translations.en_US))\n      .translations(\"ru_RU\", mergeTranslation(translations.ru_RU, translations.en_US))\n      .translations(\"it_IT\", mergeTranslation(translations.it_IT, translations.en_US))\n      .translations(\"tr_TR\", mergeTranslation(translations.tr_TR, translations.en_US))\n      .translations(\"cs_CZ\", mergeTranslation(translations.cs_CZ, translations.en_US))\n      .translations(\"fa_IR\", mergeTranslation(translations.fa_IR, translations.en_US))\n      .translations(\"id_ID\", mergeTranslation(translations.id_ID, translations.en_US))\n      .translations(\"pt_BR\", mergeTranslation(translations.pt_BR, translations.en_US))\n      .useSanitizeValueStrategy(\"escapeParameters\")\n      .determinePreferredLanguage();\n\n    $locationProvider.html5Mode({\n      enabled: true,\n      requireBase: false\n    });\n  }\n]);\n\nwebui.directive(\"textarea\", directiveTextarea);\n\nif (\"serviceWorker\" in navigator && location.protocol === \"https:\") {\n  window.addEventListener(\"load\", () => {\n    navigator.serviceWorker\n      .register(\"service-worker.js\")\n      .then(registration => {\n        console.log(\"SW registered: \", registration);\n      })\n      .catch(registrationError => {\n        console.log(\"SW registration failed: \", registrationError);\n      });\n  });\n}\n\n$(function() {\n  if (!String.prototype.startsWith) {\n    Object.defineProperty(String.prototype, \"startsWith\", {\n      enumerable: false,\n      configurable: false,\n      writable: false,\n      value: function(searchString, position) {\n        position = position || 0;\n        return this.indexOf(searchString, position) === position;\n      }\n    });\n  }\n  angular.bootstrap(document, [\"webui\"]);\n});\n"
  },
  {
    "path": "src/js/ctrls/alert.js",
    "content": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.ctrls.alert\", [\"webui.services.alerts\"])\n  .controller(\"AlertCtrl\", [\n    \"$scope\",\n    \"$alerts\",\n    \"$sce\",\n    function(scope, alerts, sce) {\n      scope.pendingAlerts = [];\n\n      scope.removeAlert = function(ind) {\n        this.pendingAlerts.splice(ind, 1);\n      };\n\n      alerts.addAlerter(function(msg, type) {\n        type = type || \"warning\";\n        var obj = { msg: sce.trustAsHtml(msg), type: type };\n        scope.pendingAlerts = _.filter(scope.pendingAlerts, function(al) {\n          return !al.expired;\n        });\n        scope.pendingAlerts.push(obj);\n\n        setTimeout(function() {\n          var ind = scope.pendingAlerts.indexOf(obj);\n          if (ind != -1) {\n            scope.pendingAlerts[ind].expired = true;\n\n            // only remove if more notifications are pending in the pipeline\n            if (scope.pendingAlerts.length > 0) scope.removeAlert(ind);\n          }\n        }, type == \"error\" ? 15000 : 5000);\n\n        scope.$digest();\n      });\n    }\n  ]).name;\n"
  },
  {
    "path": "src/js/ctrls/main.js",
    "content": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.ctrls.download\", [\n    \"ui.bootstrap\",\n    \"webui.services.utils\",\n    \"webui.services.rpc\",\n    \"webui.services.rpc.helpers\",\n    \"webui.services.alerts\",\n    \"webui.services.settings\",\n    \"webui.services.modals\",\n    \"webui.services.configuration\",\n    \"webui.services.errors\"\n  ])\n  .controller(\"MainCtrl\", [\n    \"$scope\",\n    \"$name\",\n    \"$enable\",\n    \"$rpc\",\n    \"$rpchelpers\",\n    \"$utils\",\n    \"$alerts\",\n    \"$modals\",\n    \"$fileSettings\",\n    \"$activeInclude\",\n    \"$waitingExclude\",\n    \"$pageSize\",\n    \"$getErrorStatus\",\n    // for document title\n    \"$rootScope\",\n    \"$filter\",\n    function(\n      scope,\n      name,\n      enable,\n      rpc,\n      rhelpers,\n      utils,\n      alerts,\n      modals,\n      fsettings,\n      activeInclude,\n      waitingExclude,\n      pageSize,\n      getErrorStatus,\n      rootScope,\n      filter\n    ) {\n      scope.name = name; // default UI name\n      scope.enable = enable; // UI enable options\n\n      var re_slashes = /\\\\/g;\n      var slash = \"/\";\n      var allStopped = [];\n\n      (scope.active = []), (scope.waiting = []), (scope.stopped = []);\n      scope.gstats = {};\n      scope.hideLinkedMetadata = true;\n      scope.propFilter = \"\";\n\n      // pause the download\n      // d: the download ctx\n      scope.pause = function(d) {\n        rpc.once(\"forcePause\", [d.gid]);\n      };\n\n      // resume the download\n      // d: the download ctx\n      scope.resume = function(d) {\n        rpc.once(\"unpause\", [d.gid]);\n      };\n\n      scope.restart = function(d) {\n        // assumes downloads which are started by URIs, not torrents.\n        // the preferences are also not transferred, just simple restart\n\n        rpc.once(\"getOption\", [d.gid], function(data) {\n          var prefs = data[0];\n          rpc.once(\"getFiles\", [d.gid], function(data) {\n            var files = data[0];\n            var uris = _.chain(files)\n              .map(function(f) {\n                return f.uris;\n              })\n              .filter(function(uris) {\n                return uris && uris.length;\n              })\n              .map(function(uris) {\n                var u = _.chain(uris)\n                  .map(function(u) {\n                    return u.uri;\n                  })\n                  .uniq()\n                  .value();\n                return u;\n              })\n              .value();\n\n            if (uris.length > 0) {\n              console.log(\"adding uris:\", uris, prefs);\n              scope.remove(\n                d,\n                function() {\n                  rhelpers.addUris(uris, prefs);\n                },\n                true\n              );\n            }\n          });\n        });\n      };\n\n      scope.canRestart = function(d) {\n        return [\"active\", \"paused\"].indexOf(d.status) == -1 && !d.bittorrent;\n      };\n\n      // remove the download,\n      // put it in stopped list if active,\n      // otherwise permanantly remove it\n      // d: the download ctx\n      scope.remove = function(d, cb, noConfirm) {\n        // HACK to make sure an angular digest is not running, as only one can happen at a time, and confirm is a blocking\n        // call so an rpc response can also trigger a digest call\n        setTimeout(function() {\n          if (\n            !noConfirm &&\n            !confirm(\n              filter(\"translate\")(\"Remove {{name}} and associated meta-data?\", { name: d.name })\n            )\n          ) {\n            return;\n          }\n\n          var method = \"remove\";\n\n          if (scope.getType(d) == \"stopped\") method = \"removeDownloadResult\";\n\n          if (d.followedFrom) {\n            scope.remove(d.followedFrom, function() {}, true);\n            d.followedFrom = null;\n          }\n          rpc.once(method, [d.gid], cb);\n\n          var lists = [scope.active, scope.waiting, scope.stopped],\n            ind = -1,\n            i;\n          for (var i = 0; i < lists.length; ++i) {\n            var list = lists[i];\n            var idx = list.indexOf(d);\n            if (idx < 0) {\n              continue;\n            }\n            list.splice(idx, 1);\n            return;\n          }\n        }, 0);\n      };\n\n      // start filling in the model of active,\n      // waiting and stopped download\n      rpc.subscribe(\"tellActive\", [], function(data) {\n        scope.$apply(function() {\n          utils.mergeMap(data[0], scope.active, scope.getCtx);\n        });\n      });\n\n      rpc.subscribe(\"tellWaiting\", [0, 1000], function(data) {\n        scope.$apply(function() {\n          utils.mergeMap(data[0], scope.waiting, scope.getCtx);\n        });\n      });\n\n      rpc.subscribe(\"tellStopped\", [0, 1000], function(data) {\n        scope.$apply(function() {\n          if (!scope.hideLinkedMetadata) {\n            utils.mergeMap(data[0], scope.stopped, scope.getCtx);\n            return;\n          }\n          utils.mergeMap(data[0], allStopped, scope.getCtx);\n          var gids = {};\n          _.forEach(allStopped, function(e) {\n            gids[e.gid] = e;\n          });\n          _.forEach(scope.active, function(e) {\n            gids[e.gid] = e;\n          });\n          _.forEach(scope.waiting, function(e) {\n            gids[e.gid] = e;\n          });\n          scope.stopped = _.filter(allStopped, function(e) {\n            if (!e.metadata || !e.followedBy || !(e.followedBy in gids)) {\n              return true;\n            }\n            var linked = gids[e.followedBy];\n            linked.followedFrom = e;\n            return false;\n          });\n        });\n      });\n\n      rootScope.pageTitle = utils.getTitle();\n      rpc.subscribe(\"getGlobalStat\", [], function(data) {\n        scope.$apply(function() {\n          scope.gstats = data[0];\n          rootScope.pageTitle = utils.getTitle(scope.gstats);\n        });\n      });\n\n      rpc.once(\"getVersion\", [], function(data) {\n        scope.$apply(function() {\n          scope.miscellaneous = data[0];\n        });\n      });\n\n      // total number of downloads, updates dynamically as downloads are\n      // stored in scope\n      scope.totalDownloads = 0;\n\n      // download search filter\n      scope.downloadFilter = \"\";\n      scope.downloadFilterCommitted = \"\";\n\n      scope.onDownloadFilter = function() {\n        if (scope.downloadFilterTimer) {\n          clearTimeout(scope.downloadFilterTimer);\n        }\n        scope.downloadFilterTimer = setTimeout(function() {\n          delete scope.downloadFilterTimer;\n          if (scope.downloadFilterCommitted !== scope.downloadFilter) {\n            scope.downloadFilterCommitted = scope.downloadFilter;\n            scope.$digest();\n          }\n        }, 500);\n      };\n\n      scope.filterDownloads = function(downloads) {\n        if (!scope.downloadFilterCommitted) {\n          return downloads;\n        }\n        var filter = scope.downloadFilterCommitted\n          .replace(/[{}()\\[\\]\\\\^$.?]/g, \"\\\\$&\")\n          .replace(/\\*/g, \".*\")\n          .replace(/\\./g, \".\");\n        filter = new RegExp(filter, \"i\");\n        return _.filter(downloads, function(d) {\n          if (filter.test(d.name)) return true;\n          return _.filter(d.files, function(f) {\n            return filter.test(f.relpath);\n          }).length;\n        });\n      };\n\n      scope.clearFilter = function() {\n        scope.downloadFilter = scope.downloadFilterCommitted = \"\";\n      };\n\n      scope.toggleStateFilters = function() {\n        scope.filterSpeed = !scope.filterSpeed;\n        scope.filterActive = !scope.filterActive;\n        scope.filterWaiting = !scope.filterWaiting;\n        scope.filterComplete = !scope.filterComplete;\n        scope.filterError = !scope.filterError;\n        scope.filterPaused = !scope.filterPaused;\n        scope.filterRemoved = !scope.filterRemoved;\n        scope.persistFilters();\n      };\n\n      scope.resetFilters = function() {\n        scope.filterSpeed = scope.filterActive = scope.filterWaiting = scope.filterComplete = scope.filterError = scope.filterPaused = scope.filterRemoved = true;\n        scope.clearFilter();\n        scope.persistFilters();\n      };\n\n      scope.persistFilters = function() {\n        var o = JSON.stringify({\n          s: scope.filterSpeed,\n          a: scope.filterActive,\n          w: scope.filterWaiting,\n          c: scope.filterComplete,\n          e: scope.filterError,\n          p: scope.filterPaused,\n          r: scope.filterRemoved\n        });\n        utils.setCookie(\"aria2filters\", o);\n      };\n\n      scope.loadFilters = function() {\n        var o = JSON.parse(utils.getCookie(\"aria2filters\"));\n        if (!o) {\n          scope.resetFilters();\n          return;\n        }\n        scope.filterSpeed = !!o.s;\n        scope.filterActive = !!o.a;\n        scope.filterWaiting = !!o.w;\n        scope.filterComplete = !!o.c;\n        scope.filterError = !!o.e;\n        scope.filterPaused = !!o.p;\n        scope.filterRemoved = !!o.r;\n      };\n\n      scope.loadFilters();\n\n      scope.toggleCollapsed = function(download) {\n        if (!download.collapsed) {\n          download.animCollapsed = true;\n          // ng-unswitch after half a second.\n          // XXX hacky way, because I'm to lazy right now to wire up proper\n          // transitionend events.\n          setTimeout(function() {\n            scope.$apply(function() {\n              download.collapsed = true;\n            });\n          }, 500);\n          return;\n        }\n\n        download.collapsed = false;\n        setTimeout(function() {\n          scope.$apply(function() {\n            download.animCollapsed = false;\n          });\n        }, 0);\n      };\n\n      // max downloads shown in one page\n      scope.pageSize = pageSize;\n\n      // current displayed page\n      scope.currentPage = 1;\n\n      // total amount of downloads returned by aria2\n      scope.totalAria2Downloads = function() {\n        return scope.active.length + scope.waiting.length + scope.stopped.length;\n      };\n\n      scope.getErrorStatus = function(errorCode) {\n        return getErrorStatus(+errorCode);\n      };\n\n      // actual downloads used by the view\n      scope.getDownloads = function() {\n        var categories = [];\n\n        if (scope.filterActive) {\n          if (!scope.filterSpeed) {\n            categories.push(\n              _.filter(scope.active, function(e) {\n                return !+e.uploadSpeed && !+e.downloadSpeed;\n              })\n            );\n          } else {\n            categories.push(scope.active);\n          }\n        } else if (scope.filterSpeed) {\n          categories.push(\n            _.filter(scope.active, function(e) {\n              return +e.uploadSpeed || +e.downloadSpeed;\n            })\n          );\n        }\n\n        if (scope.filterWaiting) {\n          categories.push(\n            _.filter(scope.waiting, function(e) {\n              return e.status == \"waiting\";\n            })\n          );\n        }\n\n        if (scope.filterPaused) {\n          categories.push(\n            _.filter(scope.waiting, function(e) {\n              return e.status == \"paused\";\n            })\n          );\n        }\n\n        if (scope.filterError) {\n          categories.push(\n            _.filter(scope.stopped, function(e) {\n              return e.status == \"error\";\n            })\n          );\n        }\n\n        if (scope.filterComplete) {\n          categories.push(\n            _.filter(scope.stopped, function(e) {\n              return e.status == \"complete\";\n            })\n          );\n        }\n\n        if (scope.filterRemoved) {\n          categories.push(\n            _.filter(scope.stopped, function(e) {\n              return e.status == \"removed\";\n            })\n          );\n        }\n\n        var downloads = categories\n          .map(function(category) {\n            // sort downloads within category by completness, most completed first\n            return _.sortBy(category, function(e) {\n              return -(e.completedLength / e.totalLength);\n            });\n          })\n          .reduce(function(downloads, category) {\n            return downloads.concat(category);\n          }, []);\n\n        downloads = scope.filterDownloads(downloads);\n\n        scope.totalDownloads = downloads.length;\n\n        downloads = downloads.slice((scope.currentPage - 1) * scope.pageSize);\n        downloads.splice(scope.pageSize);\n\n        return downloads;\n      };\n\n      scope.hasDirectURL = function() {\n        return rpc.getDirectURL() != \"\";\n      };\n\n      scope.getDirectURL = function() {\n        return rpc.getDirectURL();\n      };\n\n      // convert the donwload form aria2 to once used by the view,\n      // minor additions of some fields and checks\n      scope.getCtx = function(d, ctx) {\n        if (!ctx) {\n          ctx = {\n            dir: d.dir,\n            status: d.status,\n            gid: d.gid,\n            followedBy: d.followedBy && d.followedBy.length == 1 ? d.followedBy[0] : null,\n            followedFrom: null,\n            numPieces: d.numPieces,\n            connections: d.connections,\n            connectionsTitle: \"Connections\",\n            numSeeders: d.numSeeders,\n            bitfield: d.bitfield,\n            errorCode: d.errorCode,\n            totalLength: d.totalLength,\n            fmtTotalLength: utils.fmtsize(d.totalLength),\n            completedLength: d.completedLength,\n            fmtCompletedLength: utils.fmtsize(d.completedLength),\n            uploadLength: d.uploadLength,\n            fmtUploadLength: utils.fmtsize(d.uploadLength),\n            pieceLength: d.pieceLength,\n            fmtPieceLength: utils.fmtsize(d.pieceLength),\n            downloadSpeed: d.downloadSpeed,\n            fmtDownloadSpeed: utils.fmtspeed(d.downloadSpeed),\n            uploadSpeed: d.uploadSpeed,\n            fmtUploadSpeed: utils.fmtspeed(d.uploadSpeed),\n            collapsed: true,\n            animCollapsed: true,\n            files: []\n          };\n          if (d.verifiedLength) {\n            ctx.verifiedLength = d.verifiedLength;\n            ctx.status = \"verifying\";\n          }\n          if (d.verifyIntegrityPending) {\n            ctx.verifyIntegrityPending = d.verifyIntegrityPending;\n            ctx.status = \"verifyPending\";\n          }\n        } else {\n          if (ctx.gid !== d.gid) ctx.files = [];\n          ctx.dir = d.dir;\n          ctx.status = d.status;\n          if (d.verifiedLength) ctx.status = \"verifying\";\n          if (d.verifyIntegrityPending) ctx.status = \"verifyPending\";\n          ctx.errorCode = d.errorCode;\n          ctx.gid = d.gid;\n          ctx.followedBy = d.followedBy && d.followedBy.length == 1 ? d.followedBy[0] : null;\n          ctx.followedFrom = null;\n          ctx.numPieces = d.numPieces;\n          ctx.connections = d.connections;\n          if (typeof d.numSeeders === \"undefined\") {\n            ctx.numSeeders = \"\";\n          } else {\n            ctx.connectionsTitle = \"Connections (Seeders)\";\n            ctx.numSeeders = \" (\" + d.numSeeders + \")\";\n          }\n          ctx.bitfield = d.bitfield;\n          if (ctx.totalLength !== d.totalLength) {\n            ctx.totalLength = d.totalLength;\n            ctx.fmtTotalLength = utils.fmtsize(d.totalLength);\n          }\n          if (ctx.completedLength !== d.completedLength) {\n            ctx.completedLength = d.completedLength;\n            ctx.fmtCompletedLength = utils.fmtsize(d.completedLength);\n          }\n          if (!d.verifiedLength) {\n            delete ctx.verifiedLength;\n          } else if (ctx.verifiedLength !== d.verifiedLength) {\n            ctx.verifiedLength = d.verifiedLength;\n          }\n          if (!d.verifyIntegrityPending) {\n            delete ctx.verifyIntegrityPending;\n          } else if (ctx.verifyIntegrityPending !== d.verifyIntegrityPending) {\n            ctx.verifyIntegrityPending = d.verifyIntegrityPending;\n          }\n          if (ctx.uploadLength !== d.uploadLength) {\n            ctx.uploadLength = d.uploadLength;\n            ctx.fmtUploadLength = utils.fmtsize(d.uploadLength);\n          }\n          if (ctx.pieceLength !== d.pieceLength) {\n            ctx.pieceLength = d.pieceLength;\n            ctx.fmtPieceLength = utils.fmtsize(d.pieceLength);\n          }\n          if (ctx.downloadSpeed !== d.downloadSpeed) {\n            ctx.downloadSpeed = d.downloadSpeed;\n            ctx.fmtDownloadSpeed = utils.fmtspeed(d.downloadSpeed);\n          }\n          if (ctx.uploadSpeed !== d.uploadSpeed) {\n            ctx.uploadSpeed = d.uploadSpeed;\n            ctx.fmtUploadSpeed = utils.fmtspeed(d.uploadSpeed);\n          }\n        }\n\n        var dlName;\n        var files = d.files;\n        if (files) {\n          var cfiles = ctx.files;\n          for (var i = 0; i < files.length; ++i) {\n            var cfile = cfiles[i] || (cfiles[i] = {});\n            var file = files[i];\n            if (file.path !== cfile.path) {\n              cfile.index = +file.index;\n              cfile.path = file.path;\n              cfile.length = file.length;\n              cfile.fmtLength = utils.fmtsize(file.length);\n              cfile.relpath = file.path.replace(re_slashes, slash);\n              if (!cfile.relpath) {\n                cfile.relpath = (file.uris && file.uris[0] && file.uris[0].uri) || \"Unknown\";\n              } else if (!cfile.relpath.startsWith(\"[\")) {\n                // METADATA\n                cfile.relpath = cfile.relpath.substr(ctx.dir.length + 1);\n              }\n            }\n            cfile.selected = file.selected === \"true\";\n          }\n          cfiles.length = files.length;\n          if (cfiles.length) {\n            dlName = cfiles[0].relpath;\n          }\n        } else {\n          delete ctx.files;\n        }\n\n        var btName;\n        if (d.bittorrent) {\n          btName = d.bittorrent.info && d.bittorrent.info.name;\n          ctx.bittorrent = true;\n        } else {\n          delete ctx.bittorrent;\n        }\n\n        ctx.name = btName || dlName || \"Unknown\";\n        ctx.metadata = ctx.name.startsWith(\"[METADATA]\");\n        if (ctx.metadata) {\n          ctx.name = ctx.name.substr(10);\n        }\n\n        return ctx;\n      };\n\n      scope.hasStatus = function hasStatus(d, status) {\n        if (_.isArray(status)) {\n          if (status.length == 0) return false;\n          return hasStatus(d, status[0]) || hasStatus(d, status.slice(1));\n        } else {\n          return d.status == status;\n        }\n      };\n\n      // get time left for the download with\n      // current download speed,\n      // could be smarter by different heuristics\n      scope.getEta = function(d) {\n        return (d.totalLength - d.completedLength) / d.downloadSpeed;\n      };\n\n      scope.getProgressClass = function(d) {\n        switch (d.status) {\n          case \"paused\":\n            return \"progress-bar-info\";\n          case \"error\":\n            return \"progress-bar-danger\";\n          case \"removed\":\n            return \"progress-bar-warning\";\n          case \"active\":\n            return \"active\";\n          case \"verifying\":\n            return \"progress-bar-warning\";\n          case \"complete\":\n            return \"progress-bar-success\";\n          default:\n            return \"\";\n        }\n      };\n\n      // gets the progress in percentages\n      scope.getProgress = function(d) {\n        var percentage = 0;\n        if (d.verifiedLength) percentage = (d.verifiedLength / d.totalLength) * 100 || 0;\n        else percentage = (d.completedLength / d.totalLength) * 100 || 0;\n        percentage = percentage.toFixed(2);\n        if (!percentage) percentage = 0;\n\n        return percentage;\n      };\n\n      // gets the upload ratio\n      scope.getRatio = function(d) {\n        var ratio = 0;\n        ratio = d.uploadLength / d.completedLength || 0;\n        ratio = ratio.toFixed(2);\n        if (!ratio) ratio = 0;\n\n        return ratio;\n      };\n\n      // gets the type for the download as classified by the aria2 rpc calls\n      scope.getType = function(d) {\n        var type = d.status;\n        if (type == \"paused\") type = \"waiting\";\n        if ([\"error\", \"removed\", \"complete\"].indexOf(type) != -1) type = \"stopped\";\n        return type;\n      };\n\n      scope.selectFiles = function(d) {\n        console.log(\"got back files for the torrent ...\");\n        modals.invoke(\"selectFiles\", d.files, function(files) {\n          var indexes = \"\";\n          _.forEach(files, function(f) {\n            if (f.selected) {\n              indexes += \",\" + f.index;\n            }\n          });\n\n          indexes = indexes.slice(1);\n          rpc.once(\"changeOption\", [d.gid, { \"select-file\": indexes }], function(res) {\n            console.log(\"changed indexes to:\", indexes, res);\n          });\n        });\n      };\n\n      scope.showSettings = function(d) {\n        var type = scope.getType(d),\n          settings = {};\n\n        rpc.once(\"getOption\", [d.gid], function(data) {\n          var vals = data[0];\n\n          var sets = _.cloneDeep(fsettings);\n          for (var i in sets) {\n            if (type == \"active\" && activeInclude.indexOf(i) == -1) continue;\n\n            if (type == \"waiting\" && waitingExclude.indexOf(i) != -1) continue;\n\n            settings[i] = sets[i];\n            settings[i].val = vals[i] || settings[i].val;\n          }\n          modals.invoke(\"settings\", settings, d.name + \" settings\", \"Change\", function(settings) {\n            var sets = {};\n            for (var i in settings) {\n              sets[i] = settings[i].val;\n            }\n\n            rpc.once(\"changeOption\", [d.gid, sets]);\n          });\n        });\n\n        return false;\n      };\n      scope.moveDown = function(d) {\n        rpc.once(\"changePosition\", [d.gid, 1, \"POS_CUR\"]);\n      };\n      scope.moveUp = function(d) {\n        rpc.once(\"changePosition\", [d.gid, -1, \"POS_CUR\"]);\n      };\n    }\n  ])\n  .filter(\"objFilter\", function() {\n    return function(input, filter) {\n      input = input || {};\n      var out = {};\n\n      for (var key in input) {\n        if (key.startsWith(filter)) {\n          out[key] = input[key];\n        }\n      }\n\n      return out;\n    };\n  }).name;\n"
  },
  {
    "path": "src/js/ctrls/modal.js",
    "content": "import angular from \"angular\";\n\nvar parseFiles = function(files, cb) {\n  var cnt = 0;\n  var txts = [];\n  var onload = function(res) {\n    var txt = res.target.result;\n    txts.push(txt.split(\",\")[1]);\n    cnt--;\n    if (!cnt) {\n      cb(txts);\n    }\n  };\n  _.each(files, function(file) {\n    cnt++;\n    console.log(\"starting file reader\");\n    var reader = new FileReader();\n    reader.onload = onload;\n    reader.onerror = function(err) {\n      // return error\n      // TODO: find a better way to propogate error upstream\n      console.log(\"got back error\", err);\n      cb([]);\n    };\n    reader.readAsDataURL(file);\n  });\n};\n\nexport default angular\n  .module(\"webui.ctrls.modal\", [\n    \"ui.bootstrap\",\n    \"webui.services.deps\",\n    \"webui.services.modals\",\n    \"webui.services.rpc\",\n    \"webui.services.configuration\"\n  ])\n  .controller(\"ModalCtrl\", [\n    \"$_\",\n    \"$scope\",\n    \"$modal\",\n    \"$modals\",\n    \"$rpc\",\n    \"$fileSettings\",\n    \"$downloadProps\",\n    function(_, scope, $modal, modals, rpc, fsettings, dprops) {\n      scope.getUris = {\n        open: function(cb) {\n          var self = this;\n          this.uris = \"\";\n          this.downloadSettingsCollapsed = true;\n          this.advancedSettingsCollapsed = true;\n          this.settings = {};\n          this.fsettings = _.cloneDeep(fsettings);\n          this.cb = cb;\n\n          // fill in default download properties\n          _.forEach(dprops, function(p) {\n            self.settings[p] = self.fsettings[p];\n            delete self.fsettings[p];\n          });\n\n          this.inst = $modal.open({\n            templateUrl: \"getUris.html\",\n            scope: scope,\n            windowClass: \"modal-large\"\n          });\n          this.inst.result.then(\n            function() {\n              delete self.inst;\n              if (self.cb) {\n                var settings = {};\n                // no need to send in default values, just the changed ones\n                for (var i in self.settings) {\n                  if (fsettings[i].val != self.settings[i].val) settings[i] = self.settings[i].val;\n                }\n                for (var i in self.fsettings) {\n                  if (fsettings[i].val != self.fsettings[i].val)\n                    settings[i] = self.fsettings[i].val;\n                }\n\n                console.log(\"sending settings:\", settings);\n                self.cb(self.parse(), settings);\n              }\n            },\n            function() {\n              delete self.inst;\n            }\n          );\n        },\n        parse: function() {\n          return _.chain(this.uris.trim().split(/\\r?\\n/g))\n            .map(function(d) {\n              return _(d)\n                .replace(/[\"'][^\"']*[\"']/g, function(c) {\n                  return c.replace(/%/g, \"%25\").replace(/ /g, \"%20\");\n                })\n                .trim()\n                .split(/\\s+/g)\n                .map(function(c) {\n                  return c\n                    .replace(/%20/g, \" \")\n                    .replace(/%25/g, \"%\")\n                    .replace(/[\"']/g, \"\");\n                });\n            })\n            .filter(function(d) {\n              return d.length;\n            })\n            .value();\n        }\n      };\n\n      scope.settings = {\n        open: function(settings, title, actionText, cb) {\n          var self = this;\n          this.settings = settings;\n          this.title = title;\n          this.actionText = actionText;\n          this.inst = $modal.open({\n            templateUrl: \"settings.html\",\n            scope: scope,\n            windowClass: \"modal-large\"\n          });\n          this.inst.result.then(\n            function() {\n              delete self.inst;\n              if (cb) {\n                cb(self.settings);\n              }\n            },\n            function() {\n              delete self.inst;\n            }\n          );\n        }\n      };\n\n      scope.selectFiles = {\n        open: function(files, cb) {\n          var self = this;\n\n          this.files = _.cloneDeep(files);\n          var groupFiles = function(files) {\n            // sort files alphabetically\n            files.sort(function(a, b) {\n              if (a.relpath < b.relpath) {\n                return -1;\n              } else {\n                return 1;\n              }\n            });\n            function OrganizedFolder() {\n              this.dirs = {};\n              this.files = [];\n              this.show = false;\n              this.selected = true;\n            }\n            var folder = new OrganizedFolder(),\n              tmp;\n            for (var i = 0; i < files.length; i++) {\n              tmp = folder;\n              var str = files[i].relpath;\n              var arr = str.split(\"/\");\n              for (var j = 0; j < arr.length - 1; j++) {\n                if (!tmp.dirs[arr[j]]) {\n                  tmp.dirs[arr[j]] = new OrganizedFolder();\n                }\n                tmp = tmp.dirs[arr[j]];\n              }\n              tmp.files.push(files[i]);\n            }\n            return folder;\n          };\n          this.groupedFiles = groupFiles(this.files);\n          this.inst = $modal.open({\n            templateUrl: \"selectFiles.html\",\n            scope: scope,\n            windowClass: \"modal-large\"\n          });\n\n          this.inst.result.then(\n            function() {\n              delete self.inst;\n\n              if (cb) {\n                cb(self.files);\n              }\n            },\n            function() {\n              delete self.inst;\n            }\n          );\n        }\n      };\n\n      scope.connection = {\n        open: function(defaults, cb) {\n          var self = this;\n\n          // XXX We need to actually clone this!\n          this.conf = rpc.getConfiguration();\n          this.inst = $modal.open({\n            templateUrl: \"connection.html\",\n            scope: scope,\n            windowClass: \"modal-large\"\n          });\n\n          this.inst.result.then(\n            function() {\n              delete self.inst;\n              if (cb) {\n                cb(self.conf);\n              }\n            },\n            function() {\n              delete self.inst;\n            }\n          );\n        }\n      };\n\n      _.each([\"getTorrents\", \"getMetalinks\"], function(name) {\n        scope[name] = {\n          open: function(cb) {\n            var self = this;\n            this.files = [];\n            this.collapsed = true;\n            this.settings = {};\n            this.fsettings = _.cloneDeep(fsettings);\n\n            // fill in default download properties\n            _.forEach(dprops, function(p) {\n              self.settings[p] = self.fsettings[p];\n              delete self.fsettings[p];\n            });\n\n            this.inst = $modal.open({\n              templateUrl: name + \".html\",\n              scope: scope,\n              windowClass: \"modal-large\"\n            });\n\n            this.inst.result.then(\n              function() {\n                delete self.inst;\n                if (cb) {\n                  parseFiles(self.files, function(txts) {\n                    var settings = {};\n\n                    // no need to send in default values, just the changed ones\n                    for (var i in self.settings) {\n                      if (fsettings[i].val != self.settings[i].val)\n                        settings[i] = self.settings[i].val;\n                    }\n                    for (var i in self.fsettings) {\n                      if (fsettings[i].val != self.fsettings[i].val)\n                        settings[i] = self.fsettings[i].val;\n                    }\n\n                    console.log(\"sending settings:\", settings);\n                    cb(txts, settings);\n                  });\n                }\n              },\n              function() {\n                delete self.inst;\n              }\n            );\n          }\n        };\n      });\n\n      _.each([\"about\", \"server_info\"], function(name) {\n        scope[name] = {\n          open: function() {\n            var self = this;\n            this.inst = $modal.open({\n              templateUrl: name + \".html\",\n              scope: scope\n            });\n            this.inst.result.then(\n              function() {\n                delete self.inst;\n              },\n              function() {\n                delete self.inst;\n              }\n            );\n          }\n        };\n      });\n\n      rpc.once(\"getVersion\", [], function(data) {\n        scope.miscellaneous = data[0];\n      });\n\n      _.each(\n        [\n          \"getUris\",\n          \"getTorrents\",\n          \"getMetalinks\",\n          \"selectFiles\",\n          \"settings\",\n          \"connection\",\n          \"server_info\",\n          \"about\"\n        ],\n        function(name) {\n          modals.register(name, function() {\n            if (scope[name].inst) {\n              // Already open.\n              return;\n            }\n            var args = Array.prototype.slice.call(arguments, 0);\n            scope[name].open.apply(scope[name], args);\n          });\n        }\n      );\n    }\n  ]).name;\n"
  },
  {
    "path": "src/js/ctrls/nav.js",
    "content": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.ctrls.nav\", [\n    \"webui.services.configuration\",\n    \"webui.services.modals\",\n    \"webui.services.rpc\",\n    \"webui.services.rpc.helpers\",\n    \"webui.services.settings\",\n    \"webui.services.utils\"\n  ])\n  .controller(\"NavCtrl\", [\n    \"$scope\",\n    \"$modals\",\n    \"$rpc\",\n    \"$rpchelpers\",\n    \"$fileSettings\",\n    \"$globalSettings\",\n    \"$globalExclude\",\n    \"$utils\",\n    \"$translate\",\n    \"$filter\",\n    function(\n      scope,\n      modals,\n      rpc,\n      rhelpers,\n      fsettings,\n      gsettings,\n      gexclude,\n      utils,\n      translate,\n      filter\n    ) {\n      scope.isFeatureEnabled = function(f) {\n        return rhelpers.isFeatureEnabled(f);\n      };\n\n      // initially collapsed in mobile resolution\n      scope.collapsed = true;\n\n      scope.onDownloadFilter = function() {\n        // Forward to MainCtrl.\n        scope.$parent.downloadFilter = scope.downloadFilter;\n        scope.$parent.onDownloadFilter();\n      };\n\n      // manage download functions\n      scope.forcePauseAll = function() {\n        rpc.once(\"forcePauseAll\", []);\n      };\n\n      scope.purgeDownloadResult = function() {\n        rpc.once(\"purgeDownloadResult\", []);\n      };\n\n      scope.unpauseAll = function() {\n        rpc.once(\"unpauseAll\", []);\n      };\n\n      scope.addUris = function() {\n        modals.invoke(\"getUris\", _.bind(rhelpers.addUris, rhelpers));\n      };\n\n      scope.addMetalinks = function() {\n        modals.invoke(\"getMetalinks\", _.bind(rhelpers.addMetalinks, rhelpers));\n      };\n\n      scope.addTorrents = function() {\n        modals.invoke(\"getTorrents\", _.bind(rhelpers.addTorrents, rhelpers));\n      };\n\n      scope.changeCSettings = function() {\n        modals.invoke(\"connection\", rpc.getConfiguration(), _.bind(rpc.configure, rpc));\n      };\n\n      scope.changeGSettings = function() {\n        rpc.once(\"getGlobalOption\", [], function(data) {\n          var starred = utils.getCookie(\"aria2props\");\n          if (!starred || !starred.indexOf) starred = [];\n          var vals = data[0];\n          var settings = {};\n\n          // global settings divided into\n          // file settings + some global specific\n          // settings\n\n          _.forEach([fsettings, gsettings], function(sets) {\n            for (var i in sets) {\n              if (gexclude.indexOf(i) != -1) continue;\n\n              settings[i] = _.cloneDeep(sets[i]);\n              settings[i].starred = starred.indexOf(i) != -1;\n            }\n          });\n\n          for (var i in vals) {\n            if (i in gexclude) continue;\n\n            if (!(i in settings)) {\n              settings[i] = { name: i, val: vals[i], desc: \"\", starred: starred.indexOf(i) != -1 };\n            } else {\n              settings[i].val = vals[i];\n            }\n          }\n\n          modals.invoke(\n            \"settings\",\n            _.cloneDeep(settings),\n            filter(\"translate\")(\"Global Settings\"),\n            filter(\"translate\")(\"Save\"),\n            function(chsettings) {\n              var sets = {};\n              var starred = [];\n              for (var i in chsettings) {\n                // no need to change default values\n                if (settings[i].val != chsettings[i].val) sets[i] = chsettings[i].val;\n\n                if (chsettings[i].starred) {\n                  starred.push(i);\n                }\n              }\n\n              console.log(\"saving aria2 settings:\", sets);\n              console.log(\"saving aria2 starred:\", starred);\n\n              rpc.once(\"changeGlobalOption\", [sets]);\n              utils.setCookie(\"aria2props\", starred);\n            }\n          );\n        });\n      };\n\n      scope.showServerInfo = function() {\n        modals.invoke(\"server_info\");\n      };\n\n      scope.showAbout = function() {\n        modals.invoke(\"about\");\n      };\n\n      scope.changeLanguage = function(langkey) {\n        translate.use(langkey);\n      };\n\n      scope.shutDownServer = function() {\n        rpc.once(\"shutdown\", []);\n      };\n    }\n  ]).name;\n"
  },
  {
    "path": "src/js/ctrls/props.js",
    "content": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.ctrls.props\", [\n    \"webui.services.utils\",\n    \"webui.services.settings\",\n    \"webui.services.deps\",\n    \"webui.services.rpc\",\n    \"webui.services.configuration\"\n  ])\n  .controller(\"StarredPropsCtrl\", [\n    \"$scope\",\n    \"$_\",\n    \"$utils\",\n    \"$rpc\",\n    \"$globalSettings\",\n    \"$fileSettings\",\n    \"$starredProps\",\n    function(scope, _, utils, rpc, gsettings, fsettings, starredProps) {\n      scope._props = [];\n      scope.dirty = true;\n      scope.properties = [];\n      scope.getProps = function() {\n        var props = utils.getCookie(\"aria2props\");\n        if (!props || !props.indexOf) props = starredProps; // default properties starred in the global configuration file\n\n        return props;\n      };\n\n      scope.enabled = function() {\n        for (var i = 0; i < scope.properties.length; i++) {\n          if (scope.properties[i]._val != scope.properties[i].val) return true;\n        }\n\n        return false;\n      };\n\n      scope.save = function() {\n        var sets = {};\n        var found = false;\n        for (var i = 0; i < scope.properties.length; i++) {\n          if (scope.properties[i]._val != scope.properties[i].val) {\n            sets[scope.properties[i].name] = scope.properties[i].val;\n            found = true;\n          }\n        }\n\n        if (found) {\n          rpc.once(\"changeGlobalOption\", [sets]);\n        }\n      };\n\n      rpc.subscribe(\"getGlobalOption\", [], function(data) {\n        var vals = data[0];\n        var props = scope.getProps();\n        var arr = [];\n\n        for (var i = 0; i < props.length; i++) {\n          var set = {};\n          if (props[i] in gsettings) {\n            set = gsettings[props[i]];\n            if (props[i] in vals) {\n              set.val = vals[props[i]];\n            }\n            set.name = props[i];\n            arr.push(set);\n          } else if (props[i] in fsettings) {\n            set = fsettings[props[i]];\n            if (props[i] in vals) {\n              set.val = vals[props[i]];\n            }\n            set.name = props[i];\n            arr.push(set);\n          } else if (props[i] in vals) {\n            arr.push({ name: props[i], val: vals[props[i]] });\n          }\n        }\n\n        utils.mergeMap(arr, scope.properties, function(prop, nprop) {\n          nprop = nprop || {};\n          nprop.name = prop.name;\n          nprop.options = prop.options;\n          nprop.multiline = prop.multiline;\n          if (nprop._val == nprop.val || nprop.val == prop.val) {\n            nprop._val = prop.val;\n            nprop.val = prop.val;\n          } else {\n            nprop._val = prop.val;\n          }\n          nprop.desc = prop.desc;\n          return nprop;\n        });\n      });\n    }\n  ]).name;\n"
  },
  {
    "path": "src/js/directives/chunkbar.js",
    "content": "import angular from \"angular\";\n\nvar draw = function(canvas, chunks, fillStyle) {\n  chunks = chunks || [];\n  if (!canvas.getContext) {\n    console.log(\"use chunk bar on an canvas implementation!\");\n    return;\n  }\n  var ctx = canvas.getContext(\"2d\");\n  ctx.fillStyle = fillStyle || \"#149BDF\";\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  var x = 0,\n    width = canvas.width,\n    height = canvas.height;\n  chunks.forEach(function(c) {\n    var dx = c.ratio * width;\n    if (c.show) ctx.fillRect(x, 0, dx, height);\n    x += dx;\n  });\n};\n// put chunkbar and bitfield attributes in a canvas element\n// to use the directive, draw is optional and canvas is\n// only drawn when it is true if given\nexport default angular\n  .module(\"webui.directives.chunkbar\", [\"webui.services.utils\"])\n  .directive(\"chunkbar\", [\n    \"$utils\",\n    function(utils) {\n      return function(scope, elem, attrs) {\n        var bitfield = \"\",\n          pieces = 0,\n          canDraw = true;\n        var update = function() {\n          if (canDraw) draw(elem[0], utils.getChunksFromHex(bitfield, pieces), attrs.fillStyle);\n        };\n        scope.$watch(attrs.bitfield, function(bf) {\n          bitfield = bf;\n          update();\n        });\n        scope.$watch(attrs.pieces, function(p) {\n          pieces = p;\n          update();\n        });\n\n        if (attrs.draw) {\n          scope.$watch(attrs.draw, function(val) {\n            canDraw = val;\n          });\n        }\n\n        update();\n      };\n    }\n  ]).name;\n"
  },
  {
    "path": "src/js/directives/dgraph.js",
    "content": "import angular from \"angular\";\n\n// graph takes dspeed and uspeed, it queries them every second and draws\n// the last 180 secs, it also takes draw as an optional attribute and only\n// draws the graph when it is true, if not given then graph is always drawn\nexport default angular\n  .module(\"webui.directives.dgraph\", [\"webui.filters.bytes\", \"webui.services.deps\"])\n  .directive(\"dgraph\", [\n    \"$\",\n    \"$filter\",\n    \"$parse\",\n    function($, filter, parse) {\n      var ratio = 0.6;\n      var xfmt = \"%H:%M:%S\";\n      var yTicks = 7; // Number of y-axis ticks (sans 0)\n      var xticks = 10; // Number of x-axis ticks (sans 0)\n      var yTickBase = 10240; // y-axis ticks must be a multiple of this (bytes).\n      try {\n        // Try to detect AM/PM locales.\n        if (!/16/.test(new Date(2000, 0, 1, 16, 7, 9).toLocaleTimeString())) {\n          xfmt = \"%I:%M:%S %P\";\n        }\n      } catch (ex) {\n        // Ignore. Browser does not support toLocaleTimeString.\n      }\n\n      return function(scope, elem, attrs) {\n        var canDraw = false;\n\n        var graphSize = 180,\n          dspeed = 0,\n          uspeed = 0,\n          hasSpeeds = false,\n          dconf = {\n            label: \"DOWN\",\n            data: [],\n            color: \"#00ff00\",\n            lines: { show: true }\n          },\n          uconf = {\n            label: \"UP\",\n            data: [],\n            color: \"#0000ff\",\n            lines: { show: true }\n          };\n\n        // hack for the null height for flot elem\n        elem.height(elem.width() * ratio);\n        var graph = $.plot(elem, [dconf, uconf], {\n          legend: {\n            show: attrs.nolabel == undefined,\n            backgroundOpacity: 0,\n            margin: [10, 20],\n            labelFormatter: function(label, series) {\n              if (!series.data.length) {\n                return label;\n              }\n              return label + \" (\" + filter(\"bspeed\")(series.data[series.data.length - 1][1]) + \")\";\n            },\n            position: \"sw\"\n          },\n          xaxis: {\n            show: true,\n            mode: \"time\",\n            timeformat: xfmt,\n            ticks: +attrs.xticks || xticks, // allow users of the directive to overwride xticks\n            minTickSize: [30, \"second\"] // 180 / 30 == 6\n          },\n          yaxis: {\n            position: \"right\",\n            ticks: function(axis) {\n              var res = [0];\n              var yt = +attrs.yticks || yticks; // allow users of directive to overwride yticks\n\n              var step = yTickBase * Math.max(1, Math.ceil(axis.max / (yt * yTickBase)));\n\n              for (var s = 0; s < yt; s++) {\n                var c = step * s;\n                if (c > axis.max) break;\n\n                res.push(step * s);\n              }\n\n              return res;\n            },\n            tickFormatter: function(val, axis) {\n              return filter(\"bspeed\")(val);\n            },\n            min: 0\n          }\n        });\n\n        var draw = function() {\n          var width = elem.width();\n          if (width == 0) return;\n\n          elem.height(width * ratio);\n\n          graph.setData([dconf, uconf]);\n          graph.resize();\n          graph.setupGrid();\n          graph.draw();\n        };\n\n        function update() {\n          if (!hasSpeeds) {\n            return;\n          }\n\n          // Convoluted way to get the local date timestamp instead of the UTC one.\n          var cnt = new Date();\n          cnt = Date.UTC(\n            cnt.getFullYear(),\n            cnt.getMonth(),\n            cnt.getDate(),\n            cnt.getHours(),\n            cnt.getMinutes(),\n            cnt.getSeconds()\n          );\n\n          if (dconf.data.length === graphSize) dconf.data.shift();\n          dconf.data.push([cnt, dspeed]);\n\n          if (uconf.data.length === graphSize) uconf.data.shift();\n          uconf.data.push([cnt, uspeed]);\n\n          // if any parents is collapsable, then confirm if it isnt\n          if (canDraw) {\n            draw();\n          }\n        }\n\n        scope.$watch(attrs.dspeed, function(val) {\n          if (val === undefined) {\n            return;\n          }\n          hasSpeeds = true;\n          dspeed = parseFloat(val) || 0;\n        });\n\n        scope.$watch(attrs.uspeed, function(val) {\n          if (val === undefined) {\n            return;\n          }\n          hasSpeeds = true;\n          uspeed = parseFloat(val) || 0;\n        });\n\n        scope.$watch(attrs.draw, function(val) {\n          canDraw = val;\n        });\n\n        var interval = setInterval(update, 1000);\n\n        angular.element(window).bind(\"resize\", draw);\n        elem.bind(\"$destroy\", function() {\n          clearInterval(interval);\n        });\n      };\n    }\n  ]).name;\n"
  },
  {
    "path": "src/js/directives/fileselect.js",
    "content": "import angular from \"angular\";\n\n// watches changes in the file upload control (input[file]) and\n// puts the files selected in an attribute\nexport default angular\n  .module(\"webui.directives.fileselect\", [\"webui.services.deps\"])\n  .directive(\"indeterminate\", [\n    \"$parse\",\n    function syncInput(parse) {\n      return {\n        require: \"ngModel\",\n        // Restrict the directive so it can only be used as an attribute\n        restrict: \"A\",\n\n        link: function link(scope, elem, attr, ngModelCtrl) {\n          // Whenever the bound value of the attribute changes we update\n          // use upward emit notification for change to prevent the performance penalty bring by $scope.$watch\n          var getter = parse(attr[\"ngModel\"]);\n          // var setter = getter.assign;\n          var children = []; // cache children input\n          var cacheSelectedSubInputNumber = 0;\n          var cacheNoSelectedSubInputNumber = 0;\n          var get = function() {\n            return getter(scope);\n          };\n          // the internal 'indeterminate' flag on the attached dom element\n          var setIndeterminateState = function(newValue) {\n            elem.prop(\"indeterminate\", newValue);\n          };\n          var setModelValueWithSideEffect = function(newVal) {\n            // will cause to emit corresponding events\n            ngModelCtrl.$setViewValue(newVal);\n            ngModelCtrl.$render();\n          };\n          var passIfIsLeafChild = function(callback) {\n            // ensure to execute callback only when this input has one or more subinputs\n            return function() {\n              if (children.length > 0) {\n                callback.apply(this, arguments);\n              }\n            };\n          };\n          var passIfNotIsLeafChild = function(callback) {\n            // ensure to execute callback only when this input hasn't any subinput\n            return function() {\n              if (children.length === 0) {\n                callback.apply(this, arguments);\n              }\n            };\n          };\n          var passThroughThisScope = function(callback) {\n            // pass through the event from the scope where they sent\n            return function(event) {\n              if (event.targetScope !== event.currentScope) {\n                return callback.apply(this, arguments);\n              }\n            };\n          };\n          var passIfIsIndeterminate = function(callback) {\n            // pass through the event when this input is indeterminate\n            return function() {\n              if (!elem.prop(\"indeterminate\")) {\n                return callback.apply(this, arguments);\n              }\n            };\n          };\n          /* var catchEventOnlyOnce = function (callback) { // only fire once, and stop event's propagation\n                 return function (event) {\n                 callback.apply(this, arguments);\n                 return event.stopPropagation();\n                 };\n                 }; */\n          if (attr[\"indeterminate\"] && parse(attr[\"indeterminate\"]).constant) {\n            setIndeterminateState(scope.$eval(attr[\"indeterminate\"])); // set to default value (set in template)\n          }\n          if (\n            attr[\"indeterminate\"] &&\n            parse(attr[\"indeterminate\"]).constant &&\n            !scope.$eval(attr[\"indeterminate\"])\n          ) {\n            // when this input wont have subinput, they will only receive parent change and emit child change event\n            ngModelCtrl.$viewChangeListeners.push(\n              passIfNotIsLeafChild(function() {\n                scope.$emit(\"childSelectedChange\", get()); // notifies parents to change their state\n              })\n            );\n            scope.$on(\n              \"ParentSelectedChange\",\n              passThroughThisScope(\n                passIfNotIsLeafChild(function(event, newVal) {\n                  setModelValueWithSideEffect(newVal); // set value to parent's value; this will cause listener to emit childChange event; this won't be a infinite loop\n                })\n              )\n            );\n            // init first time and only once\n            scope.$emit(\"i'm child input\", get); // traverses upwards toward the root scope notifying the listeners for keep reference to this input's value\n            scope.$emit(\"childSelectedChange\", get()); // force emitted, and force the parent change their state base on children at first time\n          } else {\n            // establish parent-child's relation\n            // listen for the child emitted token\n            scope.$on(\n              \"i'm child input\",\n              passThroughThisScope(\n                // can't apply pass passIfIsLeafChild, at beginning all has not child input\n                function(event, child) {\n                  children.push(child);\n                }\n              )\n            );\n            var updateBaseOnChildrenState = function(event, newChildValue) {\n              if (cacheSelectedSubInputNumber + cacheNoSelectedSubInputNumber !== children.length) {\n                // cache childern state\n                cacheSelectedSubInputNumber = 0;\n                cacheNoSelectedSubInputNumber = 0;\n                for (var i = 0; i < children.length; i++) {\n                  if (children[i]()) {\n                    cacheSelectedSubInputNumber += 1;\n                  } else {\n                    cacheNoSelectedSubInputNumber += 1;\n                  }\n                }\n              } else {\n                // no need for recalculated children state\n                // just make a few change to cache value\n                if (newChildValue) {\n                  cacheSelectedSubInputNumber++;\n                  cacheNoSelectedSubInputNumber--;\n                } else {\n                  cacheSelectedSubInputNumber--;\n                  cacheNoSelectedSubInputNumber++;\n                }\n              }\n              var allSelected = cacheNoSelectedSubInputNumber === 0; // if doesn't has any no selected input\n              var anySeleted = cacheSelectedSubInputNumber > 0;\n              setIndeterminateState(allSelected !== anySeleted); // if at least one is selected, but not all then set input property indeterminate to true\n              setModelValueWithSideEffect(allSelected); // change binding model value and trigger onchange event\n            };\n            // is not leaf input, Only receive child change and parent change event\n            ngModelCtrl.$viewChangeListeners.push(\n              passIfIsLeafChild(\n                passIfIsIndeterminate(function() {\n                  // emit when input property indeterminate is false, prevent recursively emitting event from parent to children, children to parent\n                  scope.$broadcast(\"ParentSelectedChange\", get());\n                })\n              )\n            );\n            // reset input state base on children inputs\n            scope.$on(\n              \"childSelectedChange\",\n              passThroughThisScope(passIfIsLeafChild(updateBaseOnChildrenState))\n            );\n          }\n        }\n      };\n    }\n  ]).name;\n"
  },
  {
    "path": "src/js/directives/fselect.js",
    "content": "import angular from \"angular\";\n\n// watches changes in the file upload control (input[file]) and\n// puts the files selected in an attribute\nexport default angular\n  .module(\"webui.directives.fselect\", [\"webui.services.deps\"])\n  .directive(\"fselect\", [\n    \"$parse\",\n    function(parse) {\n      return function(scope, elem, attrs) {\n        var setfiles = parse(attrs.fselect || attrs.files).assign;\n        elem\n          .bind(\"change\", function() {\n            setfiles(scope, elem[0].files);\n          })\n          .filestyle({\n            placeholder: \"No file selected\"\n          });\n      };\n    }\n  ]).name;\n"
  },
  {
    "path": "src/js/directives/textarea.js",
    "content": "function textareaDirective() {\n  return {\n    restrict: \"E\",\n    link: function(scope, element) {\n      element\n        .attr(\"placeholder\", function(index, placeholder) {\n          if (placeholder !== undefined) {\n            return placeholder.replace(/\\\\n/g, \"\\n\");\n          } else {\n            return placeholder;\n          }\n        })\n        .bind(\"keydown keypress\", function(event) {\n          if (event.ctrlKey && event.which === 13) {\n            event.preventDefault();\n            scope.$close();\n          }\n        });\n    }\n  };\n}\n\nexport default textareaDirective;\n"
  },
  {
    "path": "src/js/filters/bytes.js",
    "content": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.filters.bytes\", [\"webui.services.utils\"])\n  .filter(\"blength\", [\n    \"$filter\",\n    \"$utils\",\n    function(filter, utils) {\n      return utils.fmtsize;\n    }\n  ])\n  .filter(\"bspeed\", [\n    \"$filter\",\n    \"$utils\",\n    function(filter, utils) {\n      return utils.fmtspeed;\n    }\n  ])\n  .filter(\"time\", function() {\n    function pad(f) {\n      return (\"0\" + f).substr(-2);\n    }\n\n    return function(time) {\n      time = parseInt(time, 10);\n      if (!time || !isFinite(time)) return \"∞\";\n      var secs = time % 60;\n      if (time < 60) return secs + \"s\";\n      var mins = Math.floor((time % 3600) / 60);\n      if (time < 3600) return pad(mins) + \":\" + pad(secs);\n      var hrs = Math.floor((time % 86400) / 3600);\n      if (time < 86400) return pad(hrs) + \":\" + pad(mins) + \":\" + pad(secs);\n      var days = Math.floor(time / 86400);\n      return days + \"::\" + pad(hrs) + \":\" + pad(mins) + \":\" + pad(secs);\n    };\n  }).name;\n"
  },
  {
    "path": "src/js/filters/url.js",
    "content": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.filters.url\", [\"webui.services.utils\"])\n  .filter(\"encodeURI\", function() {\n    return window.encodeURI;\n  }).name;\n"
  },
  {
    "path": "src/js/libs/bootstrap-filestyle.js",
    "content": "/*\n * bootstrap-filestyle\n * doc: http://markusslima.github.io/bootstrap-filestyle/\n * github: https://github.com/markusslima/bootstrap-filestyle\n *\n * Copyright (c) 2014 Markus Vinicius da Silva Lima\n * Version 1.2.1\n * Licensed under the MIT license.\n */\n(function($) {\n  \"use strict\";\n\n  var nextId = 0;\n\n  var Filestyle = function(element, options) {\n    this.options = options;\n    this.$elementFilestyle = [];\n    this.$element = $(element);\n  };\n\n  Filestyle.prototype = {\n    clear: function() {\n      this.$element.val(\"\");\n      this.$elementFilestyle.find(\":text\").val(\"\");\n      this.$elementFilestyle.find(\".badge\").remove();\n    },\n\n    destroy: function() {\n      this.$element.removeAttr(\"style\").removeData(\"filestyle\");\n      this.$elementFilestyle.remove();\n    },\n\n    disabled: function(value) {\n      if (value === true) {\n        if (!this.options.disabled) {\n          this.$element.attr(\"disabled\", \"true\");\n          this.$elementFilestyle.find(\"label\").attr(\"disabled\", \"true\");\n          this.options.disabled = true;\n        }\n      } else if (value === false) {\n        if (this.options.disabled) {\n          this.$element.removeAttr(\"disabled\");\n          this.$elementFilestyle.find(\"label\").removeAttr(\"disabled\");\n          this.options.disabled = false;\n        }\n      } else {\n        return this.options.disabled;\n      }\n    },\n\n    buttonBefore: function(value) {\n      if (value === true) {\n        if (!this.options.buttonBefore) {\n          this.options.buttonBefore = true;\n          if (this.options.input) {\n            this.$elementFilestyle.remove();\n            this.constructor();\n            this.pushNameFiles();\n          }\n        }\n      } else if (value === false) {\n        if (this.options.buttonBefore) {\n          this.options.buttonBefore = false;\n          if (this.options.input) {\n            this.$elementFilestyle.remove();\n            this.constructor();\n            this.pushNameFiles();\n          }\n        }\n      } else {\n        return this.options.buttonBefore;\n      }\n    },\n\n    icon: function(value) {\n      if (value === true) {\n        if (!this.options.icon) {\n          this.options.icon = true;\n          this.$elementFilestyle.find(\"label\").prepend(this.htmlIcon());\n        }\n      } else if (value === false) {\n        if (this.options.icon) {\n          this.options.icon = false;\n          this.$elementFilestyle.find(\".icon-span-filestyle\").remove();\n        }\n      } else {\n        return this.options.icon;\n      }\n    },\n\n    input: function(value) {\n      if (value === true) {\n        if (!this.options.input) {\n          this.options.input = true;\n\n          if (this.options.buttonBefore) {\n            this.$elementFilestyle.append(this.htmlInput());\n          } else {\n            this.$elementFilestyle.prepend(this.htmlInput());\n          }\n\n          this.$elementFilestyle.find(\".badge\").remove();\n\n          this.pushNameFiles();\n\n          this.$elementFilestyle.find(\".group-span-filestyle\").addClass(\"input-group-btn\");\n        }\n      } else if (value === false) {\n        if (this.options.input) {\n          this.options.input = false;\n          this.$elementFilestyle.find(\":text\").remove();\n          var files = this.pushNameFiles();\n          if (files.length > 0 && this.options.badge) {\n            this.$elementFilestyle\n              .find(\"label\")\n              .append(' <span class=\"badge\">' + files.length + \"</span>\");\n          }\n          this.$elementFilestyle.find(\".group-span-filestyle\").removeClass(\"input-group-btn\");\n        }\n      } else {\n        return this.options.input;\n      }\n    },\n\n    size: function(value) {\n      if (value !== undefined) {\n        var btn = this.$elementFilestyle.find(\"label\"),\n          input = this.$elementFilestyle.find(\"input\");\n\n        btn.removeClass(\"btn-lg btn-sm\");\n        input.removeClass(\"input-lg input-sm\");\n        if (value != \"nr\") {\n          btn.addClass(\"btn-\" + value);\n          input.addClass(\"input-\" + value);\n        }\n      } else {\n        return this.options.size;\n      }\n    },\n\n    placeholder: function(value) {\n      if (value !== undefined) {\n        this.options.placeholder = value;\n        this.$elementFilestyle.find(\"input\").attr(\"placeholder\", value);\n      } else {\n        return this.options.placeholder;\n      }\n    },\n\n    buttonText: function(value) {\n      if (value !== undefined) {\n        this.options.buttonText = value;\n        this.$elementFilestyle.find(\"label .buttonText\").html(this.options.buttonText);\n      } else {\n        return this.options.buttonText;\n      }\n    },\n\n    buttonName: function(value) {\n      if (value !== undefined) {\n        this.options.buttonName = value;\n        this.$elementFilestyle.find(\"label\").attr({\n          class: \"btn \" + this.options.buttonName\n        });\n      } else {\n        return this.options.buttonName;\n      }\n    },\n\n    iconName: function(value) {\n      if (value !== undefined) {\n        this.$elementFilestyle.find(\".icon-span-filestyle\").attr({\n          class: \"icon-span-filestyle \" + this.options.iconName\n        });\n      } else {\n        return this.options.iconName;\n      }\n    },\n\n    htmlIcon: function() {\n      if (this.options.icon) {\n        return '<span class=\"icon-span-filestyle ' + this.options.iconName + '\"></span> ';\n      } else {\n        return \"\";\n      }\n    },\n\n    htmlInput: function() {\n      if (this.options.input) {\n        return (\n          '<input type=\"text\" class=\"form-control ' +\n          (this.options.size == \"nr\" ? \"\" : \"input-\" + this.options.size) +\n          '\" placeholder=\"' +\n          this.options.placeholder +\n          '\" disabled> '\n        );\n      } else {\n        return \"\";\n      }\n    },\n\n    // puts the name of the input files\n    // return files\n    pushNameFiles: function() {\n      var content = \"\",\n        files = [];\n      if (this.$element[0].files === undefined) {\n        files[0] = {\n          name: this.$element[0] && this.$element[0].value\n        };\n      } else {\n        files = this.$element[0].files;\n      }\n\n      for (var i = 0; i < files.length; i++) {\n        content += files[i].name.split(\"\\\\\").pop() + \", \";\n      }\n\n      if (content !== \"\") {\n        this.$elementFilestyle.find(\":text\").val(content.replace(/\\, $/g, \"\"));\n      } else {\n        this.$elementFilestyle.find(\":text\").val(\"\");\n      }\n\n      return files;\n    },\n\n    constructor: function() {\n      var _self = this,\n        html = \"\",\n        id = _self.$element.attr(\"id\"),\n        files = [],\n        btn = \"\",\n        clear = \"\",\n        $label;\n\n      if (id === \"\" || !id) {\n        id = \"filestyle-\" + nextId;\n        _self.$element.attr({\n          id: id\n        });\n        nextId++;\n      }\n\n      html =\n        '<div class=\"group-span-filestyle ' +\n        (_self.options.input ? \"input-group-btn\" : \"btn-group\") +\n        '\">';\n      btn =\n        '<label for=\"' +\n        id +\n        '\" class=\"btn ' +\n        _self.options.buttonName +\n        \" \" +\n        (_self.options.size == \"nr\" ? \"\" : \"btn-\" + _self.options.size) +\n        '\" ' +\n        (_self.options.disabled || _self.$element.attr(\"disabled\") ? 'disabled=\"true\"' : \"\") +\n        \">\" +\n        _self.htmlIcon() +\n        '<span class=\"buttonText\">' +\n        _self.options.buttonText +\n        \"</span>\" +\n        \"</label>\";\n      clear =\n        '<button id=\"' +\n        id +\n        '-clear\" class=\"btn btn-default\" aria-label=\"Clear\">' +\n        '<svg class=\"icon icon-fw\"><use xlink:href=\"#icon-times\"></span></button>';\n\n      html = _self.options.buttonBefore\n        ? html + btn + clear + \"</div>\" + _self.htmlInput()\n        : _self.htmlInput() + html + clear + btn + \"</div>\";\n\n      _self.$elementFilestyle = $(\n        '<div class=\"bootstrap-filestyle input-group\">' + html + \"</div>\"\n      );\n      _self.$elementFilestyle\n        .find(\".group-span-filestyle\")\n        .attr(\"tabindex\", \"0\")\n        .keypress(function(e) {\n          if (e.keyCode === 13 || e.charCode === 32) {\n            _self.$elementFilestyle.find(\"label\").click();\n            return false;\n          }\n        });\n      _self.$elementFilestyle.find(\"#\" + id + \"-clear\").click(function(e) {\n        _self.clear();\n      });\n\n      // hidding input file and add filestyle\n      _self.$element\n        .css({\n          position: \"absolute\",\n          clip: \"rect(0px 0px 0px 0px)\" // using 0px for work in IE8\n        })\n        .attr(\"tabindex\", \"-1\")\n        .after(_self.$elementFilestyle);\n\n      if (_self.options.disabled || _self.$element.attr(\"disabled\")) {\n        _self.$element.attr(\"disabled\", \"true\");\n      }\n\n      // Getting input file value\n      _self.$element.change(function() {\n        var files = _self.pushNameFiles();\n\n        if (_self.options.input == false && _self.options.badge) {\n          if (_self.$elementFilestyle.find(\".badge\").length == 0) {\n            _self.$elementFilestyle\n              .find(\"label\")\n              .append(' <span class=\"badge\">' + files.length + \"</span>\");\n          } else if (files.length == 0) {\n            _self.$elementFilestyle.find(\".badge\").remove();\n          } else {\n            _self.$elementFilestyle.find(\".badge\").html(files.length);\n          }\n        } else {\n          _self.$elementFilestyle.find(\".badge\").remove();\n        }\n      });\n\n      // Check if browser is Firefox\n      if (window.navigator.userAgent.search(/firefox/i) > -1) {\n        // Simulating choose file for firefox\n        _self.$elementFilestyle.find(\"label\").click(function() {\n          _self.$element.click();\n          return false;\n        });\n      }\n    }\n  };\n\n  var old = $.fn.filestyle;\n\n  $.fn.filestyle = function(option, value) {\n    var get = \"\",\n      element = this.each(function() {\n        if ($(this).attr(\"type\") === \"file\") {\n          var $this = $(this),\n            data = $this.data(\"filestyle\"),\n            options = $.extend(\n              {},\n              $.fn.filestyle.defaults,\n              option,\n              typeof option === \"object\" && option\n            );\n\n          if (!data) {\n            $this.data(\"filestyle\", (data = new Filestyle(this, options)));\n            data.constructor();\n          }\n\n          if (typeof option === \"string\") {\n            get = data[option](value);\n          }\n        }\n      });\n\n    if (typeof get !== undefined) {\n      return get;\n    } else {\n      return element;\n    }\n  };\n\n  $.fn.filestyle.defaults = {\n    buttonText: \"Choose file\",\n    iconName: \"glyphicon glyphicon-folder-open\",\n    buttonName: \"btn-default\",\n    size: \"nr\",\n    input: true,\n    badge: true,\n    icon: true,\n    buttonBefore: false,\n    disabled: false,\n    placeholder: \"\"\n  };\n\n  $.fn.filestyle.noConflict = function() {\n    $.fn.filestyle = old;\n    return this;\n  };\n\n  $(function() {\n    $(\".filestyle\").each(function() {\n      var $this = $(this),\n        options = {\n          input: $this.attr(\"data-input\") !== \"false\",\n          icon: $this.attr(\"data-icon\") !== \"false\",\n          buttonBefore: $this.attr(\"data-buttonBefore\") === \"true\",\n          disabled: $this.attr(\"data-disabled\") === \"true\",\n          size: $this.attr(\"data-size\"),\n          buttonText: $this.attr(\"data-buttonText\"),\n          buttonName: $this.attr(\"data-buttonName\"),\n          iconName: $this.attr(\"data-iconName\"),\n          badge: $this.attr(\"data-badge\") !== \"false\",\n          placeholder: $this.attr(\"data-placeholder\")\n        };\n\n      $this.filestyle(options);\n    });\n  });\n})(window.jQuery);\n"
  },
  {
    "path": "src/js/services/alerts.js",
    "content": "import angular from \"angular\";\n\nexport default angular.module(\"webui.services.alerts\", [\"webui.services.deps\"]).factory(\"$alerts\", [\n  \"$_\",\n  function(_) {\n    var alerters = [];\n    return {\n      addAlert: function() {\n        var args = Array.prototype.slice.call(arguments, 0);\n        setTimeout(function() {\n          _.each(alerters, function(alt) {\n            alt.apply({}, args);\n          });\n        }, 0);\n      },\n      addAlerter: function(cb) {\n        alerters.push(cb);\n      },\n      // a simple function for debugging\n      log: function(msg) {\n        this.addAlert(msg, \"info\");\n      }\n    };\n  }\n]).name;\n"
  },
  {
    "path": "src/js/services/base64.js",
    "content": "import angular from \"angular\";\n\nexport default angular.module(\"webui.services.base64\", []).factory(\"$base64\", [\n  function() {\n    var obj = {};\n    var a64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",\n      a256 = {\n        indexOf: function(c) {\n          return c.charCodeAt(0);\n        },\n        charAt: String.fromCharCode\n      };\n\n    function code(s, discard, alpha, beta, w1, w2) {\n      s = String(s);\n      var b = 0,\n        x = \"\",\n        i,\n        c,\n        bs = 1,\n        sb = 1,\n        length = s.length,\n        tmp;\n      for (i = 0; i < length || (!discard && sb > 1); i += 1) {\n        b *= w1;\n        bs *= w1;\n        if (i < length) {\n          c = alpha.indexOf(s.charAt(i));\n          if (c <= -1 || c >= w1) {\n            throw new RangeError();\n          }\n          sb *= w1;\n          b += c;\n        }\n        while (bs >= w2) {\n          bs /= w2;\n          if (sb > 1) {\n            tmp = b;\n            b %= bs;\n            x += beta.charAt((tmp - b) / bs);\n            sb /= w2;\n          }\n        }\n      }\n      return x;\n    }\n\n    obj.btoa = function(s) {\n      s = code(s, false, a256, a64, 256, 64);\n      return s + \"====\".slice(s.length % 4 || 4);\n    };\n\n    obj.atob = function(s) {\n      var i;\n      s = String(s).split(\"=\");\n      for (i = s.length - 1; i >= 0; i -= 1) {\n        if (s[i].length % 4 === 1) {\n          throw new RangeError();\n        }\n        s[i] = code(s[i], true, a64, a256, 64, 256);\n      }\n      return s.join(\"\");\n    };\n\n    return obj;\n  }\n]).name;\n"
  },
  {
    "path": "src/js/services/configuration.js",
    "content": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.services.configuration\", [])\n  .constant(\"$name\", \"Aria2 WebUI\") // name used across the entire UI\n  .constant(\"$titlePattern\", \"active: {active} - waiting: {waiting} - stopped: {stopped} — {name}\")\n  .constant(\"$pageSize\", 11) // number of downloads shown before pagination kicks in\n  .constant(\"$authconf\", {\n    // default authentication configuration, never fill it in case the webui is hosted in public IP as it can be compromised\n    host: location.protocol.startsWith(\"http\") ? location.hostname : \"localhost\",\n    path: \"/jsonrpc\",\n    port: 6800,\n    encrypt: false,\n    auth: {\n      // either add the token field or the user and pass field, not both.\n      // token: '$YOUR_SECRET_TOKEN$'\n      /*-----------------------------*/\n      // user: '*YOUR_USERNAME*',\n      // pass: '*YOUR_SECRET_PASS*'\n    },\n    directURL: \"\" // If supplied, links will be created to enable direct download from the aria2 server, requires appropriate webserver to be configured\n  })\n  .constant(\"$enable\", {\n    torrent: true, // bittorrent support only enabled if supported by aria2 build, set to false otherwise to permanently disable it\n\n    metalink: true, // metalink support only enabled if supported by aria2 build, set to false to permanently disable it\n\n    sidebar: {\n      // configuration related to the sidebar next to the list of downloads\n      show: true, // set to false to completely hide the sidebar. Other elements inside will be automatically hidden\n\n      stats: true, // set to false to hide the global statistic section (contains the speed graph for now)\n\n      filters: true, // set to false to hide the  Download Filters\n\n      starredProps: true // only shown when at least one property is added to the starred list, set to false to permanently hide the Quick Access Settings inside the sidebar\n    }\n  })\n  .constant(\"$starredProps\", [\n    // default list of Quick Access Properties. Can be overridden by making modification through the Global Settings dialog\n    // go to Global Settings dialog to see their description\n    \"dir\",\n    \"conf-path\",\n    \"auto-file-renaming\",\n    \"max-connection-per-server\"\n  ])\n  .constant(\"$downloadProps\", [\n    // Similar to starred Quick Access properties but for adding new downloads.\n    // go to Advance Download Options when adding a new download to view the list of possible options\n    \"header\",\n    \"http-user\",\n    \"http-passwd\",\n    \"pause\",\n    \"dir\",\n    \"max-connection-per-server\"\n  ])\n  .constant(\"$globalTimeout\", 1000).name; // interval to update the individual downloads\n"
  },
  {
    "path": "src/js/services/deps.js",
    "content": "import angular from \"angular\";\nimport $ from \"jquery\";\nimport _ from \"lodash\";\n\nexport default angular\n  .module(\"webui.services.deps\", [])\n  .value(\"$\", $)\n  .value(\"$_\", _)\n  .value(\"$json\", JSON).name;\n"
  },
  {
    "path": "src/js/services/errors.js",
    "content": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.services.errors\", [])\n  .value(\"$getErrorStatus\", function(errorCode) {\n    // normalize it to 0\n    errorCode = errorCode - 1;\n    switch (errorCode) {\n      case 0:\n        return \"download was unsuccessful\";\n      case 1:\n        return \"unknown error occurred\";\n      case 2:\n        return \"time out occurred\";\n      case 3:\n        return \"resource was not found\";\n      case 4:\n        return 'aria2 saw the specified number of \"resource not found\" error. See --max-file-not-found option';\n      case 5:\n        return \"download aborted because download speed was too slow. See --lowest-speed-limit option\";\n      case 6:\n        return \"there were unfinished downloads\";\n      case 7:\n        return \"remote server did not support resume when resume was required to complete download\";\n      case 8:\n        return \"not enough disk space available\";\n      case 9:\n        return \"piece length was different from one in .aria2 control\";\n      case 10:\n        return \"downloading same file at that moment\";\n      case 11:\n        return \"downloading same info hash torrent at that moment\";\n      case 12:\n        return \"file already existed\";\n      case 13:\n        return \"renaming file failed\";\n      case 14:\n        return \"could not open existing file\";\n      case 15:\n        return \"could not create new file or truncate existing file\";\n      case 16:\n        return \"file I/O error occurred\";\n      case 17:\n        return \"could not create directory\";\n      case 18:\n        return \"name resolution failed\";\n      case 19:\n        return \"could not parse Metalink document\";\n      case 20:\n        return \"FTP command failed\";\n      case 21:\n        return \"HTTP response header was bad or unexpected\";\n      case 22:\n        return \"too many redirects occurred\";\n      case 23:\n        return \"HTTP authorization failed\";\n      case 24:\n        return \"could not parse bencoded file\";\n      case 25:\n        return ' \".torrent\" file was corrupted or missing information ';\n      case 26:\n        return \"Magnet URI was bad\";\n      case 27:\n        return \"bad/unrecognized option was given or unexpected option argument was given\";\n      case 28:\n        return \"remote server was unable to handle the request due to a temporary overloading or maintenance\";\n      case 29:\n        return \"could not parse JSON-RPC request\";\n    }\n  }).name;\n"
  },
  {
    "path": "src/js/services/modals.js",
    "content": "import angular from \"angular\";\n\nexport default angular.module(\"webui.services.modals\", []).factory(\"$modals\", function() {\n  var modals = {};\n  return {\n    // register a new modal, cb is the function which\n    // will further recieve the args when called through\n    // invoke\n    register: function(name, cb) {\n      modals[name] = cb;\n    },\n    // invoke an already registered modal, false if not found\n    invoke: function(name, cb) {\n      if (!modals[name]) return false;\n      var args = Array.prototype.slice.call(arguments, 1);\n      return modals[name].apply({}, args);\n    }\n  };\n}).name;\n"
  },
  {
    "path": "src/js/services/rpc/helpers.js",
    "content": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.services.rpc.helpers\", [\n    \"webui.services.deps\",\n    \"webui.services.rpc\",\n    \"webui.services.alerts\"\n  ])\n  .factory(\"$rpchelpers\", [\n    \"$_\",\n    \"$rpc\",\n    \"$alerts\",\n    function(_, rpc, alerts) {\n      var miscellaneous = { version: \"\", enabledFeatures: [] };\n      rpc.once(\"getVersion\", [], function(data) {\n        miscellaneous = data[0];\n      });\n      return {\n        isFeatureEnabled: function(feature) {\n          return miscellaneous.enabledFeatures.indexOf(feature) != -1;\n        },\n        getAria2Version: function() {\n          return miscellaneous.version;\n        },\n        addUris: function(uris, settings, cb) {\n          _.each(uris, function(uri) {\n            var uri_parsed = [];\n            // parse options passed in the URIs. E.g. http://ex1.com/f1.jpg --out=image.jpg --check-integrity\n            var uriSettings = _.cloneDeep(settings);\n            _.each(uri, function(uri_element) {\n              if (uri_element.startsWith(\"--\")) {\n                var uri_options = uri_element.split(/--|=(.*)/);\n                if (uri_options.length > 2) {\n                  uriSettings[uri_options[2]] = uri_options[3] || \"true\";\n                }\n              } else {\n                uri_parsed.push(uri_element);\n              }\n            });\n            // passing true to batch all the addUri calls\n            rpc.once(\"addUri\", [uri_parsed, uriSettings], cb, true);\n          });\n\n          // now dispatch all addUri syscalls\n          rpc.forceUpdate();\n        },\n        addTorrents: function(txts, settings, cb) {\n          _.each(txts, function(txt) {\n            // passing true to batch all the addUri calls\n            rpc.once(\"addTorrent\", [txt, [], settings], cb, true);\n          });\n\n          // now dispatch all addUri syscalls\n          rpc.forceUpdate();\n        },\n        addMetalinks: function(txts, settings, cb) {\n          _.each(txts, function(txt) {\n            // passing true to batch all the addUri calls\n            rpc.once(\"addMetalink\", [txt, settings], cb, true);\n          });\n\n          // now dispatch all addUri syscalls\n          rpc.forceUpdate();\n        }\n      };\n    }\n  ]).name;\n"
  },
  {
    "path": "src/js/services/rpc/jsoncall.js",
    "content": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.services.rpc.jsoncall\", [\"webui.services.deps\", \"webui.services.base64\"])\n  .factory(\"$jsoncall\", [\n    \"$\",\n    \"$json\",\n    \"$base64\",\n    function($, JSON, base64) {\n      return {\n        init: function(conf) {\n          this.avgTimeout = 2000;\n          this.serverConf = conf;\n        },\n        ariaRequest: function(url, funcName, params, success, error) {\n          var startTime = new Date();\n          var conn = this;\n          $.post({\n            url: url,\n            timeout: this.avgTimeout,\n            contentType: \"application/json\",\n            data: JSON.stringify({\n              jsonrpc: 2.0,\n              id: \"webui\",\n              method: funcName,\n              params: params\n            }),\n            success: function(data) {\n              conn.avgTimeout = 2000 + 3 * (new Date() - startTime);\n              return success(data);\n            },\n            error: error\n          });\n        },\n        invoke: function(opts) {\n          var rpc = this;\n          var scheme = rpc.serverConf.encrypt ? \"https\" : \"http\";\n          rpc.ariaRequest(\n            scheme +\n              \"://\" +\n              rpc.serverConf.host +\n              \":\" +\n              rpc.serverConf.port +\n              (rpc.serverConf.path || \"/jsonrpc\"),\n            opts.name,\n            opts.params,\n            opts.success,\n            function() {\n              // check if authentication details are given, if yes then use a hack to support\n              // http authentication otherwise emit error\n              if (!rpc.serverConf.auth || !rpc.serverConf.auth.user) {\n                console.log(\"jsonrpc disconnect!!!\");\n                return opts.error();\n              }\n\n              var authUrl =\n                scheme +\n                \"://\" +\n                rpc.serverConf.auth.user +\n                \":\" +\n                rpc.serverConf.auth.pass +\n                \"@\" +\n                rpc.serverConf.host +\n                \":\" +\n                rpc.serverConf.port +\n                (rpc.serverConf.path || \"/jsonrpc\");\n\n              // hack is to basically inject an image with same uri as the aria2 rpc url,\n              // most browsers will then cache the authentication details and we dont have\n              // to give them next time we make a request\n              var img = $(\"<img/>\").attr(\"src\", authUrl);\n              $(\"body\").append(img);\n              img.remove();\n\n              // timeout to let the image load and then make a request,\n              setTimeout(function() {\n                rpc.ariaRequest(authUrl, opts.name, opts.params, opts.success, function() {\n                  console.log(\"jsonrpc disconnect!!!\");\n                  return opts.error();\n                });\n              }, rpc.avgTimeout);\n            }\n          );\n        }\n      };\n    }\n  ]).name;\n"
  },
  {
    "path": "src/js/services/rpc/rpc.js",
    "content": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.services.rpc\", [\n    \"webui.services.rpc.syscall\",\n    \"webui.services.configuration\",\n    \"webui.services.alerts\",\n    \"webui.services.utils\"\n  ])\n  .factory(\"$rpc\", [\n    \"$syscall\",\n    \"$globalTimeout\",\n    \"$alerts\",\n    \"$utils\",\n    \"$rootScope\",\n    \"$location\",\n    \"$authconf\",\n    \"$filter\",\n    function(syscall, globalTimeout, alerts, utils, rootScope, uri, authconf, filter) {\n      var subscriptions = [],\n        configurations = [authconf],\n        currentConf = {},\n        currentToken,\n        timeout = null,\n        forceNextUpdate = false;\n\n      var cookieConf = utils.getCookie(\"aria2conf\");\n      // try at the start, so that it is presistant even when default authconf works\n      if (cookieConf) configurations.unshift(cookieConf);\n\n      if (uri.search().host) {\n        configurations.unshift(uri.search());\n        configurations[0].auth = {\n          token: configurations[0].token,\n          user: configurations[0].username,\n          pass: configurations[0].password\n        };\n      }\n\n      if ([\"http\", \"https\"].indexOf(uri.protocol()) != -1 && uri.host() != \"localhost\") {\n        configurations.push(\n          {\n            host: uri.host(),\n            path: \"/jsonrpc\",\n            port: 6800,\n            encrypt: false\n          },\n          {\n            host: uri.host(),\n            port: uri.port(),\n            path: \"/jsonrpc\",\n            encrypt: uri.protocol() == \"https\"\n          },\n          {\n            host: uri.host(),\n            port: uri.port(),\n            path: authconf.path,\n            encrypt: uri.protocol() == \"https\"\n          }\n        );\n      }\n\n      // set if we got error on connection. This will cause another connection attempt.\n      var needNewConnection = true;\n\n      // update is implemented such that\n      // only one syscall at max is ongoing\n      // (i.e. serially) so should be private\n      // to maintain that invariant\n      var update = function() {\n        clearTimeout(timeout);\n        timeout = null;\n\n        subscriptions = _.filter(subscriptions, function(e) {\n          return !!e && e.once !== 2;\n        });\n        var subs = subscriptions.slice();\n        if (!subs.length) {\n          timeout = setTimeout(update, globalTimeout);\n          return;\n        }\n\n        if (syscall.state == \"initializing\") {\n          console.log(\"Syscall is initializing, waiting\");\n          timeout = setTimeout(update, globalTimeout);\n          return;\n        }\n\n        if (needNewConnection && configurations.length) {\n          needNewConnection = false;\n          currentConf = configurations[0];\n          if (currentConf && currentConf.auth && currentConf.auth.token) {\n            currentToken = currentConf.auth.token;\n          } else {\n            currentToken = null;\n          }\n          syscall.init(currentConf);\n          timeout = setTimeout(update, globalTimeout);\n          return;\n        }\n\n        var params = _.map(subs, function(s) {\n          var p = s.params;\n          if (currentToken) {\n            p = [\"token:\" + currentToken].concat(p || []);\n          }\n          return {\n            methodName: s.name,\n            params: p && p.length ? p : undefined\n          };\n        });\n\n        var error = function() {\n          needNewConnection = true;\n          var ind = configurations.indexOf(currentConf);\n          if (ind != -1) configurations.splice(ind, 1);\n\n          // If some proposed configurations are still in the pipeline then retry\n          if (configurations.length) {\n            alerts.log(\n              filter(\"translate\")(\n                \"The last connection attempt was unsuccessful. Trying another configuration\"\n              )\n            );\n            timeout = setTimeout(update, 0);\n          } else {\n            alerts.addAlert(\n              \"<strong>\" +\n                filter(\"translate\")(\"Oh Snap!\") +\n                \"</strong> \" +\n                filter(\"translate\")(\n                  \"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\"\n                ),\n              \"error\"\n            );\n            timeout = setTimeout(update, globalTimeout);\n          }\n        };\n\n        syscall.invoke({\n          name: \"system.multicall\",\n          params: [params],\n          success: function(data) {\n            var failed = _.some(data.result, function(d) {\n              return d.code && d.message === \"Unauthorized\";\n            });\n\n            if (failed) {\n              needNewConnection = true;\n              alerts.addAlert(\n                \"<strong>\" +\n                  filter(\"translate\")(\"Oh Snap!\") +\n                  \"</strong> \" +\n                  filter(\"translate\")(\n                    \"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\",\n                    \"error\"\n                  )\n              );\n              timeout = setTimeout(update, globalTimeout);\n              return;\n            }\n\n            if (configurations.length) {\n              // configuration worked, save it in cookie for next time and\n              // delete the pipelined configurations!!\n              if (currentToken)\n                alerts.addAlert(\n                  filter(\"translate\")(\"Successfully connected to Aria2 through its remote RPC …\"),\n                  \"success\"\n                );\n              else\n                alerts.addAlert(\n                  filter(\"translate\")(\n                    \"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)\"\n                  )\n                );\n              configurations = [];\n            }\n\n            utils.setCookie(\"aria2conf\", currentConf);\n\n            var cbs = [];\n            _.each(data.result, function(d, i) {\n              var handle = subs[i];\n              if (handle) {\n                if (d.code) {\n                  console.error(handle, d);\n                  alerts.addAlert(d.message, \"error\");\n                }\n                // run them later as the cb itself can mutate the subscriptions\n                cbs.push({ cb: handle.cb, data: d });\n                if (handle.once) {\n                  handle.once = 2;\n                }\n              }\n            });\n\n            _.each(cbs, function(hnd) {\n              hnd.cb(hnd.data);\n            });\n\n            rootScope.$digest();\n\n            if (forceNextUpdate) {\n              forceNextUpdate = false;\n              timeout = setTimeout(update, 0);\n            } else {\n              timeout = setTimeout(update, globalTimeout);\n            }\n          },\n          error: error\n        });\n      };\n\n      // initiate the update loop\n      timeout = setTimeout(update, globalTimeout);\n\n      return {\n        // conf can be configuration or array of configurations,\n        // each one will be tried one after the other till success,\n        // for all options for one conf read rpc/syscall.js\n        configure: function(conf) {\n          alerts.addAlert(\n            filter(\"translate\")(\n              \"Trying to connect to aria2 using the new connection configuration\"\n            ),\n            \"info\"\n          );\n\n          if (conf instanceof Array) configurations = conf;\n          else configurations = [conf];\n\n          if (timeout) {\n            clearTimeout(timeout);\n            timeout = setTimeout(update, 0);\n          }\n        },\n\n        // get current configuration being used\n        getConfiguration: function() {\n          return currentConf;\n        },\n\n        // get currently configured directURL\n        getDirectURL: function() {\n          return currentConf.directURL;\n        },\n\n        // syscall is done only once, delay is optional\n        // and pass true to only dispatch it in the global timeout\n        // which can be used to batch up once calls\n        once: function(name, params, cb, delay) {\n          cb = cb || angular.noop;\n          params = params || [];\n\n          subscriptions.push({\n            once: true,\n            name: \"aria2.\" + name,\n            params: params,\n            cb: cb\n          });\n\n          if (!delay) {\n            this.forceUpdate();\n          }\n        },\n\n        // callback is called each time with updated syscall data\n        // after the global timeout, delay is optional and pass it\n        // true to dispatch the first syscall also on global timeout\n        // which can be used to batch the subscribe calls\n        subscribe: function(name, params, cb, delay) {\n          cb = cb || angular.noop;\n          params = params || [];\n\n          var handle = {\n            once: false,\n            name: \"aria2.\" + name,\n            params: params,\n            cb: cb\n          };\n          subscriptions.push(handle);\n\n          if (!delay) this.forceUpdate();\n          return handle;\n        },\n\n        // remove the subscribed callback by passing\n        // the returned handle bysubscribe\n        unsubscribe: function(handle) {\n          var ind = subscriptions.indexOf(handle);\n          subscriptions[ind] = null;\n        },\n\n        // force the global syscall update\n        forceUpdate: function() {\n          if (timeout) {\n            clearTimeout(timeout);\n            timeout = setTimeout(update, 0);\n          } else {\n            // a batch call is already in progress,\n            // wait till it returns and force the next one\n            forceNextUpdate = true;\n          }\n        }\n      };\n    }\n  ]).name;\n"
  },
  {
    "path": "src/js/services/rpc/sockcall.js",
    "content": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.services.rpc.sockcall\", [\n    \"webui.services.deps\",\n    \"webui.services.utils\",\n    \"webui.services.base64\",\n    \"webui.services.alerts\"\n  ])\n  .factory(\"$sockcall\", [\n    \"$_\",\n    \"$json\",\n    \"$name\",\n    \"$utils\",\n    \"$alerts\",\n    function(_, JSON, name, utils, alerts) {\n      var sockRPC = {\n        // true when sockrpc is ready to be used,\n        // false when either initializing\n        // or no support for web sockets\n        initialized: false,\n\n        // ongoing connection handles containing connection id and callbacks\n        handles: [],\n\n        // websocket connection socket used for all connections\n        sock: null,\n\n        // connection configuration\n        conf: null,\n\n        // socket connection scheme, default to unencrypted connection\n        scheme: \"ws\",\n\n        // called when a connection error occurs\n        onerror: function(ev) {\n          _.each(sockRPC.handles, function(h) {\n            h.error();\n          });\n          sockRPC.handles = [];\n          sockRPC.initialized = false;\n          if (sockRPC.onready) {\n            sockRPC.onready();\n            sockRPC.onready = null;\n          }\n        },\n        onclose: function(ev) {\n          if (sockRPC.handles && sockRPC.handles.length)\n            sockRPC.onerror(\"Connection reset while calling aria2\");\n          sockRPC.initialized = false;\n          if (sockRPC.onready) {\n            sockRPC.onready();\n            sockRPC.onready = null;\n          }\n        },\n\n        // when connection opens\n        onopen: function() {\n          console.log(\"websocket initialized!!!\");\n          sockRPC.initialized = true;\n          if (sockRPC.onready) {\n            sockRPC.onready();\n            sockRPC.onready = null;\n          }\n        },\n\n        // when message is recieved\n        onmessage: function(message) {\n          var data = JSON.parse(message.data);\n\n          // reverse loop because we are deleting elements\n          // while looping over the old items\n          for (var i = sockRPC.handles.length - 1; i >= 0; i--) {\n            if (sockRPC.handles[i].id === data.id) {\n              sockRPC.handles[i].success(data);\n              sockRPC.handles.splice(i, 1);\n              return;\n            }\n          }\n        },\n\n        // call to use the rpc\n        invoke: function(opts) {\n          var data = {\n            jsonrpc: 2.0,\n            id: utils.uuid(),\n            method: opts.name,\n            params: opts.params && opts.params.length ? opts.params : undefined\n          };\n\n          if (data.params && !data.params.length) data.params = undefined;\n\n          sockRPC.handles.push({\n            success: opts.success || angular.noop,\n            error: opts.error || angular.noop,\n            id: data.id\n          });\n          sockRPC.sock.send(JSON.stringify(data));\n        },\n\n        // should be called initially to start using the sock rpc\n        // onready is called when initial connection is resolved\n        init: function(conf, onready) {\n          sockRPC.initialized = false;\n          if (sockRPC.onready) {\n            // make previous call is resolved\n            sockRPC.onready();\n            sockRPC.onready = null;\n          }\n\n          if (typeof WebSocket == \"undefined\") {\n            alerts.addAlert(\"Web sockets are not supported! Falling back to JSONP.\", \"info\");\n            onready();\n            return;\n          }\n          sockRPC.conf = conf || sockRPC.conf;\n\n          sockRPC.scheme = sockRPC.conf.encrypt ? \"wss\" : \"ws\";\n\n          if (sockRPC.sock) {\n            sockRPC.sock.onopen = sockRPC.sock.onmessage = sockRPC.sock.onerror = sockRPC.sock.onclose = null;\n            sockRPC.onerror({ message: \"Changing the websocket aria2 server details\" });\n          }\n\n          try {\n            var authUrl =\n              sockRPC.scheme + \"://\" + conf.host + \":\" + conf.port + (conf.path || \"/jsonrpc\");\n            if (sockRPC.conf.auth && sockRPC.conf.auth.user && sockRPC.conf.auth.pass) {\n              authUrl =\n                sockRPC.scheme +\n                \"://\" +\n                sockRPC.conf.auth.user +\n                \":\" +\n                sockRPC.conf.auth.pass +\n                \"@\" +\n                sockRPC.conf.host +\n                \":\" +\n                sockRPC.conf.port +\n                (conf.path || \"/jsonrpc\");\n            }\n\n            sockRPC.sock = new WebSocket(authUrl);\n            sockRPC.sock.onopen = sockRPC.onopen;\n            sockRPC.sock.onclose = sockRPC.onclose;\n            sockRPC.sock.onerror = sockRPC.onerror;\n            sockRPC.sock.onmessage = sockRPC.onmessage;\n            sockRPC.onready = onready;\n          } catch (ex) {\n            // ignoring IE security exception on local ip addresses\n            console.log(\"not using websocket for aria2 rpc due to: \", ex);\n            alerts.addAlert(\"Web sockets not working due to \" + ex.message, \"info\");\n            onready();\n          }\n        }\n      };\n\n      return sockRPC;\n    }\n  ]).name;\n"
  },
  {
    "path": "src/js/services/rpc/syscall.js",
    "content": "import angular from \"angular\";\r\n\r\nexport default angular\r\n  .module(\"webui.services.rpc.syscall\", [\r\n    \"webui.services.rpc.jsoncall\",\r\n    \"webui.services.rpc.sockcall\",\r\n    \"webui.services.utils\",\r\n    \"webui.services.alerts\"\r\n  ])\r\n  .factory(\"$syscall\", [\r\n    \"$log\",\r\n    \"$jsoncall\",\r\n    \"$sockcall\",\r\n    \"$alerts\",\r\n    function(log, jsonRPC, sockRPC, alerts) {\r\n      return {\r\n        state: \"none\",\r\n        // called to initialize the rpc interface, call everytime configuration changes\r\n        // conf has the following structure:\r\n        // {\r\n        //   host (string): host for the aria2 server\r\n        //   port (number): port number for the aria2 server\r\n        //   encrypt (boolean, optional): true if encryption is enabled in the aria2 server\r\n        //   auth (optional): {\r\n        //     token (string): secret token for authentication (--rpc-secret)\r\n        //     user (string): username for http authentication if enabled\r\n        //     pass (string): password for the http authentication if enabled\r\n        //   }\r\n        init: function(conf) {\r\n          console.log(\"Syscall is initializing to\", conf);\r\n          this.state = \"initializing\";\r\n          jsonRPC.init(conf);\r\n          var syscall = this;\r\n          sockRPC.init(conf, function() {\r\n            console.log(\"Syscall is ready\");\r\n            syscall.state = \"ready\";\r\n          });\r\n        },\r\n\r\n        // call this to start an rpc call, opts has the following structure:\r\n        // {\r\n        //   name (string): name of the actual aria2 syscall\r\n        //   success (function): callback called with (parsed) data if rpc is successfull\r\n        //   error (function): callback called when an error occurs\r\n        //   params (array, optional): the params for some syscall (like multicall) and is optional for others\r\n        // }\r\n        invoke: function(opts) {\r\n          opts.success = opts.success || angular.noop;\r\n          opts.error = opts.error || angular.noop;\r\n\r\n          if (sockRPC.initialized) {\r\n            return sockRPC.invoke(opts);\r\n          } else {\r\n            return jsonRPC.invoke(opts);\r\n          }\r\n        }\r\n      };\r\n    }\r\n  ]).name;\r\n"
  },
  {
    "path": "src/js/services/settings/filters.js",
    "content": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.services.settings.filters\", [])\n  .value(\"$globalsettingsexclude\", [\"checksum\", \"index-out\", \"out\", \"pause\", \"select-file\"])\n  .value(\"$waitingsettingsexclude\", [\n    \"dry-run\",\n    \"metalink-base-uri\",\n    \"parameterized-uri\",\n    \"pause\",\n    \"piece-length\"\n  ])\n  .value(\"$activesettingsfilter\", [\n    \"bt-max-peers\",\n    \"bt-request-peer-speed-limit\",\n    \"bt-remove-unselected-file\",\n    \"max-download-limit\",\n    \"max-upload-limit\"\n  ]).name;\n"
  },
  {
    "path": "src/js/services/settings/settings.js",
    "content": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.services.settings\", [])\n  .value(\"$fileSettings\", {\n    // {{{ settings (for files)\n    \"all-proxy\": {\n      val: \"\",\n      desc:\n        '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].'\n    },\n\n    \"all-proxy-passwd\": {\n      val: \"\",\n      desc: \"Set password for all-proxy option.\"\n    },\n\n    \"all-proxy-user\": {\n      val: \"\",\n      desc: \"Set user for all-proxy option.\"\n    },\n\n    \"allow-overwrite\": {\n      val: false,\n      options: [\"true\", \"false\"],\n      desc:\n        \"Restart download from scratch if the corresponding control file doesn't exist. See also auto-file-renaming option. Default: false\"\n    },\n\n    \"allow-piece-length-change\": {\n      val: false,\n      options: [\"true\", \"false\"],\n      desc:\n        \"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\"\n    },\n\n    \"always-resume\": {\n      val: true,\n      options: [\"true\", \"false\"],\n      desc:\n        \"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\"\n    },\n\n    \"async-dns\": {\n      val: true,\n      options: [\"true\", \"false\"],\n      desc: \"Enable asynchronous DNS. Default: true\"\n    },\n\n    \"auto-file-renaming\": {\n      val: true,\n      options: [\"true\", \"false\"],\n      desc:\n        \"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\"\n    },\n\n    \"bt-detach-seed-only\": {\n      desc:\n        \"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\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"bt-enable-hook-after-hash-check\": {\n      desc:\n        \"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\",\n      val: true,\n      options: [\"true\", \"false\"]\n    },\n\n    \"bt-enable-lpd\": {\n      desc:\n        \"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\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"bt-exclude-tracker\": {\n      val: \"\",\n      desc:\n        \"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.\"\n    },\n\n    \"bt-external-ip\": {\n      val: \"\",\n      desc:\n        \"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.\"\n    },\n\n    \"bt-force-encryption\": {\n      desc:\n        \"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\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"bt-hash-check-seed\": {\n      desc:\n        \"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\",\n      val: true,\n      options: [\"true\", \"false\"]\n    },\n\n    \"bt-max-open-files\": {\n      val: 100,\n      desc: \"Specify maximum number of files to open in each BitTorrent download. Default: 100\"\n    },\n\n    \"bt-max-peers\": {\n      val: 55,\n      desc:\n        \"Specify the maximum number of peers per torrent. 0 means unlimited. See also bt-request-peer-speed-limit option. Default: 55\"\n    },\n\n    \"bt-metadata-only\": {\n      desc:\n        \"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\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"bt-min-crypto-level\": {\n      desc:\n        \"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\",\n      val: \"plain\",\n      options: [\"plain\", \"arc4\"]\n    },\n\n    \"bt-prioritize-piece\": {\n      val: \"\",\n      desc:\n        \"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.\"\n    },\n\n    \"bt-request-peer-speed-limit\": {\n      val: \"50K\",\n      desc:\n        \"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\"\n    },\n\n    \"bt-require-crypto\": {\n      desc:\n        \"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\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"bt-save-metadata\": {\n      desc:\n        \"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\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"bt-seed-unverified\": {\n      desc: \"Seed previously downloaded files without verifying piece hashes. Default: false\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"bt-stop-timeout\": {\n      val: 0,\n      desc:\n        \"Stop BitTorrent download if download speed is 0 in consecutive SEC seconds. If 0 is given, this feature is disabled. Default: 0\"\n    },\n\n    \"bt-tracker\": {\n      val: \"\",\n      desc:\n        \"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.\"\n    },\n\n    \"bt-tracker-connect-timeout\": {\n      val: 60,\n      desc:\n        \"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\"\n    },\n\n    \"bt-tracker-interval\": {\n      val: 0,\n      desc:\n        \"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\"\n    },\n\n    \"bt-tracker-timeout\": {\n      val: 60,\n      desc: \"Set timeout in seconds. Default: 60\"\n    },\n\n    \"bt-remove-unselected-file\": {\n      desc:\n        \"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\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"check-certificate\": {\n      desc:\n        \"Verify the peer using certificates specified in --ca-certificate option. Default: true\",\n      val: true,\n      options: [\"true\", \"false\"]\n    },\n\n    \"check-integrity\": {\n      desc:\n        \"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\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"conditional-get\": {\n      desc:\n        \"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\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"connect-timeout\": {\n      val: 60,\n      desc:\n        \"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\"\n    },\n\n    continue: {\n      desc:\n        \"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.\",\n      val: true,\n      options: [\"true\", \"false\"]\n    },\n\n    daemon: {\n      desc:\n        \"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\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"deferred-input\": {\n      desc:\n        \"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\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    dir: {\n      val: \"\",\n      desc: \"The directory to store the downloaded file.\"\n    },\n\n    \"disable-ipv6\": {\n      desc:\n        \"Disable IPv6. This is useful if you have to use broken DNS and want to avoid terribly slow AAAA record lookup. Default: false\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"dry-run\": {\n      desc:\n        \"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\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"enable-async-dns6\": {\n      desc:\n        \"Enable IPv6 name resolution in asynchronous DNS resolver. This option will be ignored when --async-dns=false. Default: false\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"enable-color\": {\n      desc: \"Enable color output for a terminal. Default: true\",\n      val: true,\n      options: [\"true\", \"false\"]\n    },\n\n    \"enable-dht\": {\n      desc:\n        \"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\",\n      val: true,\n      options: [\"true\", \"false\"]\n    },\n\n    \"enable-dht6\": {\n      desc:\n        \"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.\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"enable-http-keep-alive\": {\n      desc: \"Enable HTTP/1.1 persistent connection. Default: true\",\n      val: true,\n      options: [\"true\", \"false\"]\n    },\n\n    \"enable-http-pipelining\": {\n      desc: \"Enable HTTP/1.1 pipelining. Default: false\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"enable-peer-exchange\": {\n      desc:\n        \"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\",\n      val: true,\n      options: [\"true\", \"false\"]\n    },\n\n    \"enable-mmap\": {\n      desc:\n        \"Map files into memory. This option may not work if the file space is not pre-allocated. See --file-allocation. Default: false\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"enable-rpc\": {\n      desc:\n        \"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\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"file-allocation\": {\n      desc:\n        \"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\",\n      val: undefined,\n      options: [\"none\", \"prealloc\", \"falloc\", \"trunc\"]\n    },\n\n    \"follow-metalink\": {\n      desc:\n        \"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\",\n      val: true,\n      options: [\"true\", \"false\"]\n    },\n\n    \"follow-torrent\": {\n      desc:\n        \"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\",\n      val: true,\n      options: [\"true\", \"false\"]\n    },\n\n    \"force-save\": {\n      desc:\n        \"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\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"ftp-passwd\": {\n      val: \"ARIA2USER@\",\n      desc:\n        \"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@\"\n    },\n\n    \"ftp-pasv\": {\n      desc:\n        \"Use the passive mode in FTP. If false is given, the active mode will be used. Default: true\",\n      val: true,\n      options: [\"true\", \"false\"]\n    },\n\n    \"ftp-proxy\": {\n      val: \"\",\n      desc:\n        '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].'\n    },\n\n    \"ftp-proxy-passwd\": {\n      val: \"\",\n      desc: \"Set password for --ftp-proxy option.\"\n    },\n\n    \"ftp-proxy-user\": {\n      val: \"\",\n      desc: \"Set user for --ftp-proxy option.\"\n    },\n\n    \"ftp-reuse-connection\": {\n      desc: \"Reuse connection in FTP. Default: true.\",\n      val: true,\n      options: [\"true\", \"false\"]\n    },\n\n    \"ftp-type\": {\n      desc: \"Set FTP transfer type. TYPE is either binary or ascii. Default: binary\",\n      val: \"binary\",\n      options: [\"binary\", \"ascii\"]\n    },\n\n    \"ftp-user\": {\n      val: \"anonymous\",\n      desc: \"Set FTP user. This affects all URIs. Default: anonymous\"\n    },\n\n    header: {\n      val: \"\",\n      desc: \"Append HEADER to HTTP request header.\",\n      multiline: true\n    },\n\n    \"http-accept-gzip\": {\n      desc:\n        \"Send Accept: deflate, gzip request header and inflate response if remote server responds with Content-Encoding: gzip or Content-Encoding: deflate. Default: false\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"http-auth-challenge\": {\n      desc:\n        \"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\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"http-no-cache\": {\n      desc:\n        \"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\",\n      val: true,\n      options: [\"true\", \"false\"]\n    },\n\n    \"http-user\": {\n      val: \"\",\n      desc: \"Set HTTP username.\"\n    },\n\n    \"http-passwd\": {\n      val: \"\",\n      desc: \"Set HTTP password.\"\n    },\n\n    \"http-proxy\": {\n      val: \"\",\n      desc:\n        '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].'\n    },\n\n    \"http-proxy-passwd\": {\n      val: \"\",\n      desc: \"Set password for --http-proxy option.\"\n    },\n\n    \"http-proxy-user\": {\n      val: \"\",\n      desc: \"Set user for --http-proxy option.\"\n    },\n\n    \"human-readable\": {\n      desc:\n        \"Print sizes and speed in human readable format (e.g., 1.2Ki, 3.4Mi) in the console readout. Default: true\",\n      val: true,\n      options: [\"true\", \"false\"]\n    },\n\n    \"index-out\": {\n      val: undefined,\n      desc:\n        \"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.\"\n    },\n\n    \"lowest-speed-limit\": {\n      val: \"0\",\n      desc:\n        \"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\"\n    },\n\n    \"max-connection-per-server\": {\n      val: 1,\n      desc: \"The maximum number of connections to one server for each download. Default: 1\"\n    },\n\n    \"max-download-limit\": {\n      val: \"0\",\n      desc:\n        \"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\"\n    },\n\n    \"max-file-not-found\": {\n      val: 0,\n      desc:\n        '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'\n    },\n\n    \"max-resume-failure-tries\": {\n      val: 0,\n      desc:\n        \"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\"\n    },\n\n    \"max-tries\": {\n      val: 0,\n      desc: \"Set number of tries. 0 means unlimited. See also --retry-wait. Default: 5\"\n    },\n\n    \"max-upload-limit\": {\n      val: \"0\",\n      desc:\n        \"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\"\n    },\n\n    \"metalink-enable-unique-protocol\": {\n      desc:\n        \"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\",\n      val: true,\n      options: [\"true\", \"false\"]\n    },\n\n    \"metalink-language\": {\n      val: \"\",\n      desc: \"The language of the file to download.\"\n    },\n\n    \"metalink-location\": {\n      val: \"\",\n      desc:\n        \"The location of the preferred server. A comma-delimited list of locations is acceptable, for example, jp,us.\"\n    },\n\n    \"metalink-os\": {\n      val: \"\",\n      desc: \"The operating system of the file to download.\"\n    },\n\n    \"metalink-version\": {\n      val: \"\",\n      desc: \"The version of the file to download.\"\n    },\n\n    \"min-split-size\": {\n      val: \"20M\",\n      desc:\n        \"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\"\n    },\n\n    \"no-conf\": {\n      desc: \"Disable loading aria2.conf file.\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"no-file-allocation-limit\": {\n      val: \"5M\",\n      desc:\n        \"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\"\n    },\n\n    \"no-netrc\": {\n      desc:\n        \"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.\",\n      val: true,\n      options: [\"true\", \"false\"]\n    },\n\n    \"no-proxy\": {\n      val: \"\",\n      desc:\n        \"Specify comma separated hostnames, domains and network address with or without CIDR block where proxy should not be used.\"\n    },\n\n    out: {\n      val: \"\",\n      desc:\n        \"The file name of the downloaded file. When --force-sequential option is used, this option is ignored.\"\n    },\n\n    \"parameterized-uri\": {\n      desc:\n        \"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\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"pause-metadata\": {\n      desc:\n        \"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\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"proxy-method\": {\n      desc:\n        \"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\",\n      val: \"get\",\n      options: [\"get\", \"tunnel\"]\n    },\n\n    quiet: {\n      desc: \"Make aria2 quiet (no console output). Default: false\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"realtime-chunk-checksum\": {\n      desc:\n        \"Validate chunk of data by calculating checksum while downloading a file if chunk checksums are provided. Default: true\",\n      val: true,\n      options: [\"true\", \"false\"]\n    },\n\n    referer: {\n      val: \"\",\n      desc: \"Set Referer. This affects all URIs.\"\n    },\n\n    \"remote-time\": {\n      desc:\n        \"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\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"remove-control-file\": {\n      desc:\n        \"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.\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"reuse-uri\": {\n      desc: \"Reuse already used URIs if no unused URIs are left. Default: true\",\n      val: true,\n      options: [\"true\", \"false\"]\n    },\n\n    \"seed-ratio\": {\n      val: 0.0,\n      desc:\n        \"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\"\n    },\n\n    \"seed-time\": {\n      val: 0,\n      desc:\n        \"Specify seeding time in minutes. Also see the --seed-ratio option. Note Specifying --seed-time=0 disables seeding after download completed.\"\n    },\n\n    \"select-file\": {\n      val: \"\",\n      desc:\n        \"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 .\"\n    },\n\n    split: {\n      val: 5,\n      desc:\n        \"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\"\n    },\n\n    timeout: {\n      val: 60,\n      desc: \"Set timeout in seconds. Default: 60\"\n    },\n\n    \"use-head\": {\n      desc: \"Use HEAD method for the first request to the HTTP server. Default: false\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"user-agent\": {\n      val: \"aria2/$VERSION\",\n      desc:\n        \"Set user agent for HTTP(S) downloads. Default: aria2/$VERSION, $VERSION is replaced by package version.\"\n    },\n\n    \"retry-wait\": {\n      val: 0,\n      desc:\n        \"Set the seconds to wait between retries. With SEC > 0, aria2 will retry download when the HTTP server returns 503 response. Default: 0.\"\n    },\n\n    \"metalink-base-uri\": {\n      val: \"\",\n      desc:\n        \"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 /.\"\n    },\n\n    pause: {\n      desc:\n        \"Pause download after added. This option is effective only when --enable-rpc=true is given. Default: false\",\n      val: \"false\",\n      options: [\"true\", \"false\"]\n    },\n\n    \"rpc-allow-origin-all\": {\n      desc:\n        \"Add Access-Control-Allow-Origin header field with value * to the RPC response. Default: false\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"rpc-listen-all\": {\n      desc:\n        \"Listen incoming JSON-RPC/XML-RPC requests on all network interfaces. If false is given, listen only on local loopback interface. Default: false\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"rpc-secure\": {\n      desc:\n        \"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.\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"stream-piece-selector\": {\n      desc:\n        \"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\",\n      val: \"default\",\n      options: [\"default\", \"inorder\", \"geom\"]\n    },\n\n    \"show-console-readout\": {\n      desc: \"Show console readout. Default: true\",\n      val: true,\n      options: [\"true\", \"false\"]\n    },\n\n    \"show-files\": {\n      desc:\n        \"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.\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    \"truncate-console-readout\": {\n      desc: \"Truncate console readout to fit in a single line. Default: true\",\n      val: true,\n      options: [\"true\", \"false\"]\n    },\n\n    \"hash-check-only\": {\n      desc:\n        \"If true is given, after hash check using --check-integrity option, abort download whether or not download is complete. Default: false\",\n      val: false,\n      options: [\"true\", \"false\"]\n    },\n\n    checksum: {\n      val: undefined,\n      desc:\n        \"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.\"\n    },\n\n    \"piece-length\": {\n      val: \"1M\",\n      desc:\n        \"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\"\n    },\n\n    \"uri-selector\": {\n      desc:\n        \"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\",\n      val: \"feedback\",\n      options: [\"inorder\", \"feedback\", \"adaptive\"]\n    }\n    //}}}\n  })\n  .value(\"$globalSettings\", {\n    // {{{ settings (global)\n    \"download-result\": {\n      desc:\n        \"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\",\n      val: \"default\",\n      options: [\"default\", \"full\"]\n    },\n    log: {\n      val: \"\",\n      desc:\n        '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.'\n    },\n    \"log-level\": {\n      desc:\n        \"Set log level to output. LEVEL is either debug, info, notice, warn or error. Default: debug.\",\n      val: \"debug\",\n      options: [\"debug\", \"info\", \"notice\", \"warn\", \"error\"]\n    },\n    \"max-concurrent-downloads\": {\n      val: 5,\n      desc:\n        \"Set maximum number of parallel downloads for every static (HTTP/FTP) URI, torrent and metalink. See also --split option. Default: 5\"\n    },\n    \"max-download-result\": {\n      val: 1000,\n      desc:\n        \"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\"\n    },\n    \"max-overall-download-limit\": {\n      val: \"0\",\n      desc:\n        \"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.\"\n    },\n    \"max-overall-upload-limit\": {\n      val: \"0\",\n      desc:\n        \"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.\"\n    },\n    \"save-cookies\": {\n      val: \"\",\n      desc:\n        \"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.\"\n    },\n    \"save-session\": {\n      val: \"\",\n      desc:\n        \"Save error/unfinished downloads to FILE on exit. You can pass this output file to aria2c with --input-file option on restart.\"\n    },\n    \"server-stat-of\": {\n      val: \"\",\n      desc:\n        \"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.\"\n    }\n    // }}}\n  })\n  .value(\"$globalExclude\", [\"checksum\", \"index-out\", \"out\", \"pause\", \"select-file\"])\n  .value(\"$waitingExclude\", [\n    \"dry-run\",\n    \"metalink-base-uri\",\n    \"parameterized-uri\",\n    \"pause\",\n    \"piece-length\"\n  ])\n  .value(\"$activeInclude\", [\n    \"bt-max-peers\",\n    \"bt-request-peer-speed-limit\",\n    \"bt-remove-unselected-file\",\n    \"max-download-limit\",\n    \"max-upload-limit\"\n  ]).name;\n"
  },
  {
    "path": "src/js/services/utils.js",
    "content": "import angular from \"angular\";\n\nexport default angular\n  .module(\"webui.services.utils\", [\"webui.services.configuration\"])\n  .factory(\"$utils\", [\n    \"$filter\",\n    \"$name\",\n    \"$titlePattern\",\n    function(filter, $name, $titlePattern) {\n      var rnd16 = (function() {\n        \"use strict\";\n        var rndBuffer = new Uint8Array(16);\n        var rnd16Weak = function() {\n          for (var i = 0, r; i < 16; i++) {\n            if (!(i % 0x3)) r = (Math.random() * 0x100000000) | 0;\n            rndBuffer[i] = (r >>> ((i & 0x3) << 0x3)) & 0xff;\n          }\n          return rndBuffer;\n        };\n\n        if (!window.crypto || !crypto.getRandomValues) {\n          return rnd16Weak;\n        }\n        return function() {\n          try {\n            crypto.getRandomValues(rndBuffer);\n            return rndBuffer;\n          } catch (ex) {\n            // Entropy might be exhausted\n            return rnd16Weak();\n          }\n        };\n      })();\n\n      var utils = {\n        fmtsize: function(len) {\n          len = +len; // coerce to number\n          if (len <= 1024) {\n            return len.toFixed(0) + \" B\";\n          }\n          len /= 1024;\n          if (len <= 1024) {\n            return len.toFixed(1) + \" KB\";\n          }\n          len /= 1024;\n          if (len <= 1024) {\n            return len.toFixed(2) + \" MB\";\n          }\n          len /= 1024;\n          return len.toFixed(3) + \" GB\";\n        },\n\n        fmtspeed: function(speed) {\n          return utils.fmtsize(speed) + \"/s\";\n        },\n        // saves the key value pair in cookies\n        setCookie: function(key, value) {\n          var exdate = new Date();\n          exdate.setDate(exdate.getDate() + 30 * 12);\n          var cvalue = escape(JSON.stringify(value)) + \"; expires=\" + exdate.toUTCString();\n          document.cookie = key + \"=\" + cvalue;\n        },\n        // gets a value for a key stored in cookies\n        getCookie: function(key) {\n          var chunks = document.cookie.split(\";\");\n          for (var i = 0; i < chunks.length; i++) {\n            var ckey = chunks[i].substr(0, chunks[i].indexOf(\"=\")).replace(/^\\s+|\\s+$/g, \"\");\n            var cvalue = chunks[i].substr(chunks[i].indexOf(\"=\") + 1);\n            if (key == ckey) {\n              return JSON.parse(unescape(cvalue));\n            }\n          }\n\n          return null;\n        },\n        getFileName: function(path) {\n          var seed = path.split(/[/\\\\]/);\n          return seed[seed.length - 1];\n        },\n        uuid: (function() {\n          var bt = [];\n          for (var i = 0; i < 0x100; ++i) {\n            bt.push((i + 0x100).toString(16).substr(1));\n          }\n          Object.freeze(bt);\n\n          return function() {\n            var r = rnd16();\n            r[6] = (r[6] & 0xf) | 0x40; // Version 4\n            r[8] = (r[8] & 0x3f) | 0x80; // Version 4y\n            return (\n              bt[r[0]] +\n              bt[r[1]] +\n              bt[r[2]] +\n              bt[r[3]] +\n              \"-\" +\n              bt[r[4]] +\n              bt[r[5]] +\n              \"-\" +\n              bt[r[6]] +\n              bt[r[7]] +\n              \"-\" +\n              bt[r[8]] +\n              bt[r[9]] +\n              \"-\" +\n              bt[r[10]] +\n              bt[r[11]] +\n              bt[r[12]] +\n              bt[r[13]] +\n              bt[r[14]] +\n              bt[r[15]]\n            );\n          };\n        })(),\n        randStr: function() {\n          return utils.uuid();\n        },\n\n        // maps the array in place to the destination\n        // arr, dest (optional): array\n        // func: a merge mapping  func, see ctrls/download.js\n        mergeMap: function(arr, dest, func) {\n          if (!dest) {\n            dest = [];\n          }\n\n          for (var i = 0, e = Math.min(arr.length, dest.length); i < e; ++i) {\n            func(arr[i], dest[i]);\n          }\n\n          // Insert newly created downloads\n          while (i < arr.length) {\n            dest.push(func(arr[i++]));\n          }\n\n          // Truncate if necessary.\n          dest.length = arr.length;\n\n          return dest;\n        },\n        // get info title from global statistics\n        getTitle: function(stats) {\n          if (!stats) {\n            stats = {};\n          }\n          return $titlePattern\n            .replace(\"{active}\", stats.numActive || \"⌛\")\n            .replace(\"{waiting}\", stats.numWaiting || \"⌛\")\n            .replace(\"{download_speed}\", utils.fmtspeed(stats.downloadSpeed) || \"⌛\")\n            .replace(\"{upload_speed}\", utils.fmtspeed(stats.uploadSpeed) || \"⌛\")\n            .replace(\"{stopped}\", stats.numStopped || \"⌛\")\n            .replace(\"{name}\", $name);\n        },\n\n        // get download chunks from aria2 bitfield\n        getChunksFromHex: function(bitfield, numOfPieces) {\n          var chunks = [],\n            len = 0,\n            numPieces = parseInt(numOfPieces);\n          if (!bitfield) return [];\n\n          var totalDownloaded = 0;\n          if (numPieces > 1) {\n            var chunk_ratio = 1 / numPieces;\n            var piecesProcessed = 0;\n            for (var i = 0; i < bitfield.length; i++) {\n              var hex = parseInt(bitfield[i], 16);\n              for (var j = 1; j <= 4; j++) {\n                var bit = hex & (1 << (4 - j));\n                if (bit) totalDownloaded++;\n                var prog = !!bit;\n                if (len >= 1 && chunks[len - 1].show == prog) {\n                  chunks[len - 1].ratio += chunk_ratio;\n                } else {\n                  chunks.push({\n                    ratio: chunk_ratio,\n                    show: prog\n                  });\n                  len++;\n                }\n                piecesProcessed++;\n                if (piecesProcessed == numPieces) return chunks;\n              }\n            }\n          }\n          return chunks;\n        }\n      };\n      return utils;\n    }\n  ]).name;\n"
  },
  {
    "path": "src/js/translate/cs_CZ.js",
    "content": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.cs_CZ = {\n  // header\n  Search: \"Hledat\",\n  // Nav menu\n  Add: \"Přidat\",\n  \"By URIs\": \"Z URI\",\n  \"By Torrents\": \"Z torrentu\",\n  \"By Metalinks\": \"Z metalinku\",\n  Manage: \"Spravovat\",\n  \"Pause All\": \"Zastavit vše\",\n  \"Resume Paused\": \"Obnovit zastavené\",\n  \"Purge Completed\": \"Odstranit hotové\",\n  \"Shutdown Server\": \"Vypnout server\",\n  Settings: \"Nastavení\",\n  \"Connection Settings\": \"Nastavení připojení\",\n  \"Global Settings\": \"Obecné nastavení\",\n  \"Server info\": \"Informace o serveru\",\n  \"About and contribute\": \"Informace\",\n  \"Toggle navigation\": \"Přepnout ovládání\",\n  // body\n  // nav side bar\n  Miscellaneous: \"Různé\",\n  \"Global Statistics\": \"Globální statistika\",\n  About: \"Informace\",\n  Displaying: \"Zobrazuji\",\n  of: \"z\",\n  downloads: \"stahování\",\n  Language: \"Jazyk\",\n  // download filters\n  \"Download Filters\": \"Filtry stahování\",\n  Running: \"Stahují se\",\n  Active: \"Aktivní\",\n  Waiting: \"Čekající\",\n  Complete: \"Hotové\",\n  Error: \"Chyba\",\n  Paused: \"Zastavené\",\n  Removed: \"Odstraněné\",\n  \"Hide linked meta-data\": \"Skrýt připojená meta-data\",\n  Toggle: \"Prohodit\",\n  \"Reset filters\": \"Smazat filtry\",\n  // download status\n  Verifying: \"Ověřování\",\n  \"Verify Pending\": \"Čekání na ověření\",\n  // starred properties\n  \"Quick Access Settings\": \"Rychlé nastavení\",\n  Save: \"Uložit\",\n  \"Save settings\": \"Uložit nastavení\",\n  \"Currently no download in line to display, use the\": \"Není co zobrazit, použijte\",\n  \"download button to start downloading files!\": \"tlačítko pro stáhnutí souborů!\",\n  Peers: \"Zdroje\",\n  \"More Info\": \"Víc informací\",\n  Remove: \"Odstranit\",\n  \"# of\": \"# z\",\n  Length: \"Délka\",\n  // modals\n  \"Add Downloads By URIs\": \"Přidat stahování z URI\",\n  \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n    \"- Můžete začít stahovat více souborů v jeden okamžik, tak že na každý řádek dáte jinou URI\",\n  \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n    \"- Také můžete přidat více URI (Zrcadel) pro *stejný* soubor, tak že je dáte na jeden řádek oddělené mezerou \",\n  \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\": \"- URI může být HTTP(S)/FTP/BitTorrent-Magnet.\",\n  \"Download settings\": \"Nastavení stahování\",\n  \"Advanced settings\": \"Pokročilé nastavení\",\n  Cancel: \"Zrušit\",\n  Start: \"Spustit\",\n  Choose: \"Zvolit\",\n  \"Quick Access (shown on the main page)\": \"Rychlý přístup (Zobrazení na hlavní stránce)\",\n  // add torrent modal\n  \"Add Downloads By Torrents\": \"Přidat stahování z torrentu\",\n  \"- Select the torrent from the local filesystem to start the download.\":\n    \"- Pro stahování vyberte torrent soubor z disku\",\n  \"- You can select multiple torrents to start multiple downloads.\":\n    \" - Můžete zvolit víc torrentů pro spuštění více stahování\",\n  \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n    '- Pro stahování pomocí BitTorrent-Magnet URL, použijte možnost \"Z URI\"',\n  \"Select Torrents\": \"Vyberte torrenty\",\n  \"Select a Torrent\": \"Vyberte torrent\",\n  // add metalink modal\n  \"Add Downloads By Metalinks\": \"Přidat stahovní pomocí metalinku\",\n  \"Select Metalinks\": \"Výběr metalinků\",\n  \"- Select the Metalink from the local filesystem to start the download.\":\n    \"- Pro stahování vyberte metalink soubor z disku\",\n  \"- You can select multiple Metalinks to start multiple downloads.\":\n    \"- Můžete zvolit víc mentalinků pro spuštění více stahování\",\n  \"Select a Metalink\": \"Vyberte metalink\",\n  // select file modal\n  \"Choose files to start download for\": \"Vyberte soubory pro stažení\",\n  \"Select to download\": \"Vyberte ke stažení\",\n  // settings modal\n  \"Aria2 RPC host and port\": \"Aria2 RPC host a port\",\n  \"Enter the host\": \"Zadejte hosta\",\n  \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n    \"Zadejte IP nebo DNS jméno serveru na kterém běží Aria2 RPC (výchozí: localhost)\",\n  \"Enter the port\": \"Zadejte port\",\n  \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n    \"Zadejte port serveru na kterém běží Aria2 RPC (výchozí: 6800)\",\n  \"Enter the RPC path\": \"Zadejte cestu k RPC\",\n  \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n    \"Zadejte cestu k endpointu Aria2 RPC (výchozí: /jsonrpc)\",\n  \"SSL/TLS encryption\": \"SSL/TLS šifrování\",\n  \"Enable SSL/TLS encryption\": \"Zapnout SSL/TLS šifrování\",\n  \"Enter the secret token (optional)\": \"Zadejte bezpečnostní token (volitelné)\",\n  \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n    \"Zadejte bezpečnostní token k Aria2 RPC (nechte prázné pokud autentifikace není nastavena)\",\n  \"Enter the username (optional)\": \"Zadejte uživatelské jméno (volitelné)\",\n  \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n    \"Zadejte uživatelské jméno pro Aria2 RPC (nechte prázné pokud autentifikace není nastavena)\",\n  \"Enter the password (optional)\": \"Zadejte heslo (volitelné)\",\n  \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n    \"Zadej heslo k Aria2 RPC (nechte prázné pokud autentifikace není nastavena)\",\n  \"Enter base URL (optional)\": \"Zadejte kořenovou URL serveru (volitelné)\",\n  \"Direct Download\": \"Přímé stažení\",\n  \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n    \"Jestliže je nastaveno, je možné stáhnout soubor přímo z Aria2 serveru.\",\n  \"(Requires appropriate webserver to be configured.)\":\n    \"(Je třeba udělat patřičnou konfiguraci webserveru)\",\n  \"Save Connection configuration\": \"Uložit nastavení\",\n  Filter: \"Filtr\",\n  // server info modal\n  \"Aria2 server info\": \"Informace o Aria2 serveru\",\n  \"Aria2 Version\": \"Verze Aria2\",\n  \"Features Enabled\": \"Zapnuté funkce\",\n  // about modal\n  \"To download the latest version of the project, add issues or to contribute back, head on to\":\n    \"Ke stažení aktuální verze, nahlášení problému či přispění, zamiřte na\",\n  \"Or you can open the latest version in the browser through\":\n    \"Nebo můžete spustit aktuální verzi pomocí:\",\n  Close: \"Zavřít\",\n  // labels\n  \"Download status\": \"Stav stahování\",\n  \"Download Speed\": \"Rychlost stahování\",\n  \"Upload Speed\": \"Rychlost nahrávání\",\n  \"Estimated time\": \"Odhadovaný čas\",\n  \"Download Size\": \"Velikost\",\n  Downloaded: \"Staženo\",\n  Progress: \"Průběh\",\n  \"Download Path\": \"Cesta\",\n  Uploaded: \"Nahráno\",\n  \"Download GID\": \"GID\",\n  \"Number of Pieces\": \"Počet fragmentů\",\n  \"Piece Length\": \"Délka fragmentu\",\n\n  //alerts\n  \"The last connection attempt was unsuccessful. Trying another configuration\":\n    \"Poslední pokus o připojení se nezdařil. Zkuste jiné nastavení\",\n  \"Oh Snap!\": \"A sakra!\",\n  \"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\":\n    \"Nemohu se připojit k Aria2 RPC serveru. Zkusím to znovu za 10 sekund. Možná by se to chtělo podívat do Nastavení > Nastavení připojení\",\n  \"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\":\n    \"Během připojování k Aria2 RPC serveru selhala autentifikace. Zkusím to znovu za 10 sekund. Možná by se to chtělo podívat do Nastavení > Nastavení připojení\",\n  \"Successfully connected to Aria2 through its remote RPC …\":\n    \"Úspěšně připojeno k Aria2 pomocí RPC...\",\n  \"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)\":\n    \"Úspěšně připojeno k Aria2 pomocí RPC, ale připojení není zabezpečené. Pro úplné zabezpečení přidejte bezpečnostní token při spuštění Aria2 (pomocí možnosti --rpc-secret) \",\n  \"Trying to connect to aria2 using the new connection configuration\":\n    \"Zkouším se připojit k Aria2 za pomocí nového nastavení\",\n  // {{name}} refers to the download name, do not modify.\n  \"Remove {{name}} and associated meta-data?\": \"Odstranit {{name}} a příslušná meta-data?\"\n};\n"
  },
  {
    "path": "src/js/translate/de_DE.js",
    "content": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.de_DE = {\n  // header\n  Search: \"Suche\",\n  // Nav menu\n  Add: \"Hinzufügen\",\n  \"By URIs\": \"mit URIs\",\n  \"By Torrents\": \"mit Torrents\",\n  \"By Metalinks\": \"mit Metalinks\",\n  Manage: \"Verwalten\",\n  \"Pause All\": \"Alle anhalten\",\n  \"Resume Paused\": \"Angehaltene fortsetzen\",\n  \"Purge Completed\": \"Fertige entfernen\",\n  Settings: \"Einstellungen\",\n  \"Connection Settings\": \"Verbindungseinstellungen\",\n  \"Global Settings\": \"Globale Einstellungen\",\n  \"Server info\": \"Server Information\",\n  \"About and contribute\": \"Über webui-aria2\",\n  \"Toggle navigation\": \"Navigation an/ausschalten\",\n  // body\n  // nav side bar\n  Miscellaneous: \"Verschiedenes\",\n  \"Global Statistics\": \"Globale Statistiken\",\n  About: \"Über\",\n  Displaying: \"Anzeige\",\n  of: \"von\",\n  downloads: \"Downloads\",\n  Language: \"Sprache\",\n  // download filters\n  \"Download Filters\": \"Download Filter\",\n  Running: \"Laufende\",\n  Active: \"Aktive\",\n  Waiting: \"Wartende\",\n  Complete: \"Fertige\",\n  Error: \"Fehler\",\n  Paused: \"Angehaltene\",\n  Removed: \"Gelöschte\",\n  \"Hide linked meta-data\": \"Blende verlinkte Meta-Daten aus\",\n  Toggle: \"Umschalten\",\n  \"Reset filters\": \"Filter zurücksetzen\",\n  // starred properties\n  \"Quick Access Settings\": \"Ausgewählte Einstellungen\",\n  \"Save settings\": \"Einstellungen speichern\",\n  \"Currently no download in line to display, use the\":\n    \"Aktuell sind keine Downloads vorhanden, bitte benutz den\",\n  \"download button to start downloading files!\":\n    \"Download Link um den Download von Dateien zu beginnen!\",\n  Peers: \"Peers\",\n  \"More Info\": \"Mehr Infos\",\n  Remove: \"Entfernen\",\n  \"# of\": \"# von\",\n  Length: \"Länge\",\n  // modals\n  \"Add Downloads By URIs\": \"Downloads anhand von URIs hinzufügen\",\n  \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n    \"- Es können mehrere Downloads (Dateien) gleichzeitig hinzugefügt werden, indem jede URI in eine separate Zeile eingegeben wird.\",\n  \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n    \"- Es können auch mehrere URIs (Spiegelserver) für *dieselbe* Datei durch Leerzeichen getrennt angegeben werden.\",\n  \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\":\n    \"- Eine URI kann folgende Protokolle besitzen: HTTP(S)/FTP/BitTorrent-Magnet.\",\n  \"Download settings\": \"Download Einstellungen\",\n  \"Advanced settings\": \"Erweiterte Einstellungen\",\n  Cancel: \"Abbrechen\",\n  Start: \"Beginnen\",\n  Choose: \"Auswählen\",\n  \"Quick Access (shown on the main page)\": \"Schnellzugriff (Anzeige auf der Hauptseite)\",\n  // add torrent modal\n  \"Add Downloads By Torrents\": \"Downloads mit Torrents hinzufügen\",\n  \"- Select the torrent from the local filesystem to start the download.\":\n    \"- Wähle ein Torrent vom lokalen Dateisystem um den Download zu starten\",\n  \"- You can select multiple torrents to start multiple downloads.\":\n    \"- Es können mehrere Torrents ausgewählt werden um mehrere Downloads zu starten\",\n  \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n    \"- Für BitTorrent-Magnet URLs benutz die Option 'Mit URIs hinzufügen'\",\n  \"Select Torrents\": \"Wähle Torrents\",\n  \"Select a Torrent\": \"Wähle ein Torrent\",\n  // add metalink modal\n  \"Add Downloads By Metalinks\": \"Download mit Metalinks hinzufügen\",\n  \"Select Metalinks\": \"Wähle Metalinks\",\n  \"- Select the Metalink from the local filesystem to start the download.\":\n    \"- Wähle ein Metalink vom lokalen Dateisystem um den Download zu starten\",\n  \"- You can select multiple Metalinks to start multiple downloads.\":\n    \"- Es können mehrere Metalinks ausgewählt werden um mehrere Downloads zu starten\",\n  \"Select a Metalink\": \"Wähle einen Metalink\",\n  // select file modal\n  \"Choose files to start download for\": \"Wähle Dateien für den Download aus\",\n  \"Select to download\": \"Wähle zum Download\",\n  // settings modal\n  \"Aria2 RPC host and port\": \"Aria2 RPC host und port\",\n  \"Enter the host\": \"Host\",\n  \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n    \"Gib die IP oder den DNS Namen des Servers ein, auf dem Aria2 läuft und mit dem du eine RPC-Verbindung etablieren willst (Standard: localhost)\",\n  \"Enter the port\": \"Port\",\n  \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n    \"Gib den Port des Servers ein, auf dem der RPC-Dienst von Aria2 läuft (Standard: 6800)\",\n  \"Enter the RPC path\": \"RPC Pfad\",\n  \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n    \"Gib den Pfad zum Aria2 RPC Endpunkt an (Standard: /jsonrpc)\",\n  \"SSL/TLS encryption\": \"SSL/TLS\",\n  \"Enable SSL/TLS encryption\": \"Aktiviere SSL/TLS Verschlüsselung\",\n  \"Enter the secret token (optional)\": \"Secret Token (optional)\",\n  \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n    \"Gib den Aria2 RPC secret Token ein (leer lassen falls keine Authentifizierung aktiv)\",\n  \"Enter the username (optional)\": \"Benutzername (optional)\",\n  \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n    \"Gib den Aria2 RPC Benutzernamen ein (leer lassen falls keine Authentifizierung aktiv)\",\n  \"Enter the password (optional)\": \"Passwort (optional)\",\n  \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n    \"Gib das Aria2 RPC Passwort ein (leer lassen falls keine Authentifizierung aktiv)\",\n  \"Enter base URL (optional)\": \"Base URL (optional)\",\n  \"Direct Download\": \"Direkter Download\",\n  \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n    \"Falls angegeben, werden Links erstellt um einen direkten Download vom Aria2 Server zu ermöglichen\",\n  \"(Requires appropriate webserver to be configured.)\":\n    \"(Es wird ein entsprechend konfigurierter WebServer benötigt.)\",\n  \"Save Connection configuration\": \"Speichern der Verbindungseinstellung\",\n  Filter: \"Filter\",\n  // server info modal\n  \"Aria2 server info\": \"Aria2 Server Info\",\n  \"Aria2 Version\": \"Aria2 Version\",\n  \"Features Enabled\": \"Aktive Funktionen\",\n  // about modal\n  \"To download the latest version of the project, add issues or to contribute back, head on to\":\n    \"Um die neuste Version des Projects zu laden, Fehler zu melden oder sich zu beteiligen, besuch\",\n  \"Or you can open the latest version in the browser through\":\n    \"Oder du kannst die neueste Version direkt in deinem Browser verwenden\",\n  Close: \"Schließen\",\n  // lables\n  \"Download status\": \"Download Status\",\n  \"Download Speed\": \"Download Geschwindigkeit\",\n  \"Upload Speed\": \"Upload Geschwindigkeit\",\n  \"Estimated time\": \"Geschätzte Zeit\",\n  \"Download Size\": \"Download Größe\",\n  Downloaded: \"Heruntergeladen\",\n  Progress: \"Fortschritt\",\n  \"Download Path\": \"Download Pfad\",\n  Uploaded: \"Hochgeladen\",\n  \"Download GID\": \"Download GID\",\n  \"Number of Pieces\": \"Anzahl der Stücken\",\n  \"Piece Length\": \"Größe der Stücken\"\n};\n"
  },
  {
    "path": "src/js/translate/en_US.js",
    "content": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.en_US = {\n  // header\n  Search: \"Search\",\n  // Nav menu\n  Add: \"Add\",\n  \"By URIs\": \"By URIs\",\n  \"By Torrents\": \"By Torrents\",\n  \"By Metalinks\": \"By Metalinks\",\n  Manage: \"Manage\",\n  \"Pause All\": \"Pause All\",\n  \"Resume Paused\": \"Resume Paused\",\n  \"Purge Completed\": \"Purge Completed\",\n  Settings: \"Settings\",\n  \"Connection Settings\": \"Connection Settings\",\n  \"Global Settings\": \"Global Settings\",\n  \"Server info\": \"Server info\",\n  \"About and contribute\": \"About and contribute\",\n  \"Toggle navigation\": \"Toggle navigation\",\n  // body\n  // nav side bar\n  Miscellaneous: \"Miscellaneous\",\n  \"Global Statistics\": \"Global Statistics\",\n  About: \"About\",\n  Displaying: \"Displaying\",\n  of: \"of\",\n  downloads: \"downloads\",\n  Language: \"Language\",\n  // download filters\n  \"Download Filters\": \"Download Filters\",\n  Running: \"Running\",\n  Active: \"Active\",\n  Waiting: \"Waiting\",\n  Complete: \"Complete\",\n  Error: \"Error\",\n  Paused: \"Paused\",\n  Removed: \"Removed\",\n  \"Hide linked meta-data\": \"Hide linked meta-data\",\n  Toggle: \"Toggle\",\n  \"Reset filters\": \"Reset filters\",\n  // download status\n  Verifying: \"Verifying\",\n  \"Verify Pending\": \"Verify Pending\",\n  // starred properties\n  \"Quick Access Settings\": \"Quick Access Settings\",\n  Save: \"Save\",\n  \"Save settings\": \"Save settings\",\n  \"Currently no download in line to display, use the\":\n    \"Currently no download in line to display, use the\",\n  \"download button to start downloading files!\": \"download button to start downloading files!\",\n  Peers: \"Peers\",\n  \"More Info\": \"More Info\",\n  Remove: \"Remove\",\n  \"# of\": \"# of\",\n  Length: \"Length\",\n  // modals\n  \"Add Downloads By URIs\": \"Add Downloads By URIs\",\n  \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n    \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\",\n  \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n    \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\",\n  \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\": \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\",\n  \"Download settings\": \"Download settings\",\n  \"Advanced settings\": \"Advanced settings\",\n  Cancel: \"Cancel\",\n  Start: \"Start\",\n  Choose: \"Choose\",\n  \"Quick Access (shown on the main page)\": \"Quick Access (shown on the main page)\",\n  // add torrent modal\n  \"Add Downloads By Torrents\": \"Add Downloads By Torrents\",\n  \"- Select the torrent from the local filesystem to start the download.\":\n    \"- Select the torrent from the local filesystem to start the download.\",\n  \"- You can select multiple torrents to start multiple downloads.\":\n    \"- You can select multiple torrents to start multiple downloads.\",\n  \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n    \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\",\n  \"Select Torrents\": \"Select Torrents\",\n  \"Select a Torrent\": \"Select a Torrent\",\n  // add metalink modal\n  \"Add Downloads By Metalinks\": \"Add Downloads By Metalinks\",\n  \"Select Metalinks\": \"Select Metalinks\",\n  \"- Select the Metalink from the local filesystem to start the download.\":\n    \"- Select the Metalink from the local filesystem to start the download.\",\n  \"- You can select multiple Metalinks to start multiple downloads.\":\n    \"- You can select multiple Metalinks to start multiple downloads.\",\n  \"Select a Metalink\": \"Select a Metalink\",\n  // select file modal\n  \"Choose files to start download for\": \"Choose files to start download for\",\n  \"Select to download\": \"Select to download\",\n  // settings modal\n  \"Aria2 RPC host and port\": \"Aria2 RPC host and port\",\n  \"Enter the host\": \"Enter the host\",\n  \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n    \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\",\n  \"Enter the port\": \"Enter the port\",\n  \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n    \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\",\n  \"Enter the RPC path\": \"Enter the RPC path\",\n  \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n    \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\",\n  \"SSL/TLS encryption\": \"SSL/TLS encryption\",\n  \"Enable SSL/TLS encryption\": \"Enable SSL/TLS encryption\",\n  \"Enter the secret token (optional)\": \"Enter the secret token (optional)\",\n  \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n    \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\",\n  \"Enter the username (optional)\": \"Enter the username (optional)\",\n  \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n    \"Enter the Aria2 RPC username (empty if authentication not enabled)\",\n  \"Enter the password (optional)\": \"Enter the password (optional)\",\n  \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n    \"Enter the Aria2 RPC password (empty if authentication not enabled)\",\n  \"Enter base URL (optional)\": \"Enter base URL (optional)\",\n  \"Direct Download\": \"Direct Download\",\n  \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n    \"If supplied, links will be created to enable direct download from the Aria2 server.\",\n  \"(Requires appropriate webserver to be configured.)\":\n    \"(Requires appropriate webserver to be configured.)\",\n  \"Save Connection configuration\": \"Save Connection configuration\",\n  Filter: \"Filter\",\n  // server info modal\n  \"Aria2 server info\": \"Aria2 server info\",\n  \"Aria2 Version\": \"Aria2 Version\",\n  \"Features Enabled\": \"Features Enabled\",\n  // about modal\n  \"To download the latest version of the project, add issues or to contribute back, head on to\":\n    \"To download the latest version of the project, add issues or to contribute back, head on to\",\n  \"Or you can open the latest version in the browser through\":\n    \"Or you can open the latest version in the browser through\",\n  Close: \"Close\",\n  // lables\n  \"Download status\": \"Download status\",\n  \"Download Speed\": \"Download Speed\",\n  \"Upload Speed\": \"Upload Speed\",\n  \"Estimated time\": \"Estimated time\",\n  \"Download Size\": \"Download Size\",\n  Downloaded: \"Downloaded\",\n  Progress: \"Progress\",\n  \"Download Path\": \"Download Path\",\n  Uploaded: \"Uploaded\",\n  \"Download GID\": \"Download GID\",\n  \"Number of Pieces\": \"Number of Pieces\",\n  \"Piece Length\": \"Piece Length\",\n  \"Shutdown Server\": \"Shutdown Server\",\n\n  \"The last connection attempt was unsuccessful. Trying another configuration\":\n    \"The last connection attempt was unsuccessful. Trying another configuration\",\n  \"Oh Snap!\": \"Oh Snap!\",\n  \"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\":\n    \"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\",\n  \"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\":\n    \"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\",\n  \"Successfully connected to Aria2 through its remote RPC …\":\n    \"Successfully connected to Aria2 through its remote RPC …\",\n  \"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)\":\n    \"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)\",\n  \"Trying to connect to aria2 using the new connection configuration\":\n    \"Trying to connect to aria2 using the new connection configuration\",\n  \"Remove {{name}} and associated meta-data?\": \"Remove {{name}} and associated meta-data?\"\n};\n"
  },
  {
    "path": "src/js/translate/es_ES.js",
    "content": "// This text is a template of translation list.\n\n// pre: ll_CC, locale name, examples: en_US, zh_CN\n// 1. Copy and rename to ll_CC.js, translate these words.\n// 2. in js/init.js:\n//    Add '.translations('ll_CC', translations.ll_CC)' before '.determinePreferredLanguage();'\n// 3. in index.html\n//    Add '<script src=\"js/translate/ll_CC.js\"></script>' after '<script src=\"js/libs/angular-translate.js\"></script>'\n// 4. To add Language to changeLanguage button, see \"{{ 'Language' | translate }}\" in index.html.\n//    flag-icon usage:\n//    https://github.com/lipis/flag-icon-css\n// 5. Browser determining preferred language automatically.\n//    http://angular-translate.github.io/docs/en/#/guide/07_multi-language\n\nif (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.es_ES = {\n  // replace en_US to ll_CC, examples: zh_CN, de_AT.\n  // header\n  Search: \"Buscar\",\n  // Nav menu\n  Add: \"Añadir\",\n  \"By URIs\": \"URIs\",\n  \"By Torrents\": \"Torrents\",\n  \"By Metalinks\": \"Metalinks\",\n  Manage: \"Administrar\",\n  \"Pause All\": \"Pausar Todos\",\n  \"Resume Paused\": \"Reanudar Pausados\",\n  \"Purge Completed\": \"Purgar Completados\",\n  \"Shutdown Server\": \"Desactivar servidor\",\n  Settings: \"Ajustes\",\n  \"Connection Settings\": \"Ajustes de Conexión\",\n  \"Global Settings\": \"Ajustes Globales\",\n  \"Server info\": \"Info de Servidor\",\n  \"About and contribute\": \"Acerca y Colaborar\",\n  \"Toggle navigation\": \"Conmutar Navegación\",\n  // body\n  // nav side bar\n  Miscellaneous: \"Otros\",\n  \"Global Statistics\": \"Estadísticas Globales\",\n  About: \"Acerca de\",\n  Displaying: \"Mostrando\",\n  of: \"de\",\n  downloads: \"descargas\",\n  Language: \"Idioma\",\n  // download filters\n  \"Download Filters\": \"Filtros de Descargas\",\n  Running: \"Procesando\",\n  Active: \"Activo\",\n  Waiting: \"Esperando\",\n  Complete: \"Completo\",\n  Error: \"Error\",\n  Paused: \"En Pausa\",\n  Removed: \"Eliminado\",\n  \"Hide linked meta-data\": \"Ocultar metadatos adjuntos\",\n  Toggle: \"Conmutar\",\n  \"Reset filters\": \"Restablecer Filtros\",\n  // download status\n  Verifying: \"Verificando\",\n  \"Verify Pending\": \"Pendiente de verificación\",\n  // starred properties\n  \"Quick Access Settings\": \"Ajustes Rápidos\",\n  Save: \"Guardar\",\n  \"Save settings\": \"Guardar Ajustes\",\n  \"Currently no download in line to display, use the\":\n    \"En este momento no hay descargas para mostrar. ¡Use la opción\",\n  \"download button to start downloading files!\": \"para empezar a descargar sus archivos!\",\n  Peers: \"Pares\",\n  \"More Info\": \"Mas Info\",\n  Remove: \"Eliminar\",\n  \"# of\": \"# de\",\n  Length: \"Longitud\",\n  // modals\n  \"Add Downloads By URIs\": \"Añadir descargas por URIs\",\n  \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n    \"Añada varias descargas colocando la URI de cada descarga en una línea separada.\",\n  \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n    \"Puede añadir URIs de espejo para *el mismo* archivo. Separe cada URI con un espacio.\",\n  \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\":\n    \"Una URI puede ser HTTP(S), FTP, BitTorrent o Magnet.\",\n  \"Download settings\": \"Ajustes de Descargas\",\n  \"Advanced settings\": \"Ajustes Avanzados\",\n  Cancel: \"Cancelar\",\n  Start: \"Iniciar\",\n  Choose: \"Escoja\",\n  \"Quick Access (shown on the main page)\": \"Acceso Rápido (Se muestra en la pág principal)\",\n  // add torrent modal\n  \"Add Downloads By Torrents\": \"Añadir descargas Torrent\",\n  \"- Select the torrent from the local filesystem to start the download.\":\n    \"Seleccione el archivo Torrent de su equipo para iniciar la descarga\",\n  \"- You can select multiple torrents to start multiple downloads.\":\n    \"Puede seleccionar varios torrents\",\n  \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n    \"Para los enlaces Magnet, salga de este cuadro y use la opción Añadir  URI\",\n  \"Select Torrents\": \"Escoja los Torrents\",\n  \"Select a Torrent\": \"Escoja el Torrent\",\n  // add metalink modal\n  \"Add Downloads By Metalinks\": \"Añadir descargas Metalink\",\n  \"Select Metalinks\": \"Seleccione el Metalink\",\n  \"- Select the Metalink from the local filesystem to start the download.\":\n    \"Escoja el archivo Metalink de su equipo para iniciar la descarga\",\n  \"- You can select multiple Metalinks to start multiple downloads.\":\n    \"Puede escoger varios archivos Metalink\",\n  \"Select a Metalink\": \"Escoja el archivo Metalink\",\n  // select file modal\n  \"Choose files to start download for\": \"Escoja los archivos que desea descargar\",\n  \"Select to download\": \"Escoja que descargar\",\n  // settings modal\n  \"Aria2 RPC host and port\": \"Servidor Aria2 y puerto\",\n  \"Enter the host\": \"Escriba la dirección\",\n  \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n    \"Escriba la dirección o nombre DNS del servidor Aria2 (por defecto: localhost)\",\n  \"Enter the port\": \"Escriba el puerto\",\n  \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n    \"Escriba el número del puerto del servidor Aria2 (por defecto: 6800)\",\n  \"Enter the RPC path\": \"Escriba la ruta RPC\",\n  \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n    \"Escriba la ruta de acceso RPC de Aria2 (por defecto: /jsonrpc)\",\n  \"SSL/TLS encryption\": \"Cifrado SSL/TLS\",\n  \"Enable SSL/TLS encryption\": \"Habilitar Cifrado SSL/TLS\",\n  \"Enter the secret token (optional)\": \"Escriba la frase Token (opcional)\",\n  \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n    \"Escriba la frase Token secreta (vacío si la autenticación está deshabilitada)\",\n  \"Enter the username (optional)\": \"Usuario (opcional)\",\n  \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n    \"Escriba el nombre de usuario (vacío si la autenticación está deshabilitada)\",\n  \"Enter the password (optional)\": \"Escriba la contraseña\",\n  \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n    \"Escriba la contraseña RPC (vacío si la autenticación está deshabilitada)\",\n  \"Enter base URL (optional)\": \"Escriba la URL base (opcional)\",\n  \"Direct Download\": \"Descarga Directa\",\n  \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n    \"Esto permite crear enlaces de descarga de los archivos desde el servidor Aria2\",\n  \"(Requires appropriate webserver to be configured.)\":\n    \"(Requiere configuración apropiada del servidor web)\",\n  \"Save Connection configuration\": \"Guardar Configuración\",\n  Filter: \"Filrar\",\n  // server info modal\n  \"Aria2 server info\": \"Información de servidor Aria2\",\n  \"Aria2 Version\": \"Aria2 versión\",\n  \"Features Enabled\": \"Funcionalidad disponible\",\n  // about modal\n  \"To download the latest version of the project, add issues or to contribute back, head on to\":\n    \"Para obtener la última versión del proyecto, reportar problemas o colaborar, vaya a\",\n  \"Or you can open the latest version in the browser through\":\n    \"Puede abrir la última versión en su navegador, directamente\",\n  Close: \"Cerrar\",\n  // labels\n  \"Download status\": \"Estado de descarga\",\n  \"Download Speed\": \"Velocidad de descarga\",\n  \"Upload Speed\": \"Vel. Subida\",\n  \"Estimated time\": \"Tiempo estimado\",\n  \"Download Size\": \"Tamaño de descarga\",\n  Downloaded: \"Descargado\",\n  Progress: \"Progreso\",\n  \"Download Path\": \"Carpeta de descarga\",\n  Uploaded: \"Subido\",\n  \"Download GID\": \"GID de Descarga\",\n  \"Number of Pieces\": \"N° de Piezas\",\n  \"Piece Length\": \"Tamaño de pieza\",\n  //alerts\n  \"The last connection attempt was unsuccessful. Trying another configuration\":\n    \"El último intento de conexión falló. Probando otra configuración\",\n  \"Oh Snap!\": \"Rayos…\",\n  \"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\":\n    \"No se pudo establecer una conexión al servidor Aria2. Reintentando en 10 segundos. Pruebe revisando la configuración en Ajustes > Ajustes de Conexión\",\n  \"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\":\n    \"Autenticación fallida con el servior Aria2 RPC. Reintentando en 10 segundos. Puede que sea necesario revisar su info de autenticación en Ajustes > Ajustes de Conexión\",\n  \"Successfully connected to Aria2 through its remote RPC …\":\n    \"Conexión exitosa con el servidor Aria2 mediante la interfaz RPC\",\n  \"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)\":\n    \"Conexión exitosa con el servidor Aria2 mediante la interfaz RPC, sin embargo la conexión no es segura. Para mejorar la seguridad, añada un token de autorización al iniciar Aria2 (con la opción --rpc-secret)\",\n  \"Trying to connect to aria2 using the new connection configuration\":\n    \"Intentando conectar con el servidor Aria2 usando los nuevos Ajustes de Conexión\"\n};\n"
  },
  {
    "path": "src/js/translate/fa_IR.js",
    "content": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.fa_IR = {\n  // header\n  Search: \"جستجو\",\n  // Nav menu\n  Add: \"اضافه کردن\",\n  \"By URIs\": \"بر اساس مسیر سایت\",\n  \"By Torrents\": \"بر اساس تورنت\",\n  \"By Metalinks\": \"بر اساس متا لینک\",\n  Manage: \"مدیریت\",\n  \"Pause All\": \"توقف همه\",\n  \"Resume Paused\": \"ادامه متوقف شده ها\",\n  \"Purge Completed\": \"حذف تکمیل شده ها\",\n  \"Shutdown Server\": \"خاموش کردن سرور\",\n  Settings: \"تنظیمات\",\n  \"Connection Settings\": \"تنظیمات ارتباط\",\n  \"Global Settings\": \"تنظیمات سراسری\",\n  \"Server info\": \"اطلاعات سرور\",\n  \"About and contribute\": \"درباره و مشارکت\",\n  \"Toggle navigation\": \"تغییر ناوبری\",\n  // body\n  // nav side bar\n  Miscellaneous: \"متفرقه\",\n  \"Global Statistics\": \"آمار سراسری\",\n  About: \"درباره\",\n  Displaying: \"نمایش\",\n  of: \"از\",\n  downloads: \"دانلودها\",\n  Language: \"زبان\",\n  // download filters\n  \"Download Filters\": \"دانلود فیلترها\",\n  Running: \"در حال اجرا\",\n  Active: \"فعال\",\n  Waiting: \"در انتظار\",\n  Complete: \"تمام شده\",\n  Error: \"خطا\",\n  Paused: \"متوقف شده\",\n  Removed: \"حذف شده\",\n  \"Hide linked meta-data\": \"مخفی کردن متا داده مرتبط\",\n  Toggle: \"تغییر وضعیت\",\n  \"Reset filters\": \"حذف فیلترها\",\n  // download status\n  Verifying: \"تأیید کردن\",\n  \"Verify Pending\": \"تأیید کردن در انتظارها\",\n  // starred properties\n  \"Quick Access Settings\": \"تنظیمات دسترسی سریع\",\n  Save: \"ذخیره\",\n  \"Save settings\": \"ذخیره تنظیمات\",\n  \"Currently no download in line to display, use the\":\n    \"در حال حاضر هیچ دانلودی برای نمایش وجود ندارد، استفاده از\",\n  \"download button to start downloading files!\": \"دکمه دانلود برای شروع دانلود فایل ها!\",\n  Peers: \"همتایان\",\n  \"More Info\": \"اطلاعات بیشتر\",\n  Remove: \"حذف\",\n  \"# of\": \"از #\",\n  Length: \"طول\",\n  // modals\n  \"Add Downloads By URIs\": \"اضافه کردن دانلود توسط لینک ها\",\n  \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n    \"- شما می توانید چند بار دانلود (فایل ها) را همزمان با قرار دادن URI ها برای هر فایل در یک خط جداگانه اضافه کنید.\",\n  \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n    \"- شما همچنین می توانید URI های متعدد (آینه ها) را برای فایل *همان* اضافه کنید. برای انجام این کار، URI ها را با یک فضای جداگانه جدا کنید.\",\n  \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\":\n    \"- یک URI می تواند HTTP (S) / FTP / BitTorrent-Magnet باشد.\",\n  \"Download settings\": \"تنظیمات دانلود\",\n  \"Advanced settings\": \"تنظیمات پیشرفته\",\n  Cancel: \"لغو\",\n  Start: \"شروع\",\n  Choose: \"انتخاب\",\n  \"Quick Access (shown on the main page)\": \"دسترسی سریع (نشان داده شده در صفحه اصلی)\",\n  // add torrent modal\n  \"Add Downloads By Torrents\": \"اضافه کردن دانلود توسط تورنت\",\n  \"- Select the torrent from the local filesystem to start the download.\":\n    \"- تورنت را از سیستم فایل محلی انتخاب کنید تا دانلود را شروع کنید.\",\n  \"- You can select multiple torrents to start multiple downloads.\":\n    \"- شما می توانید چندین تورنت را برای شروع بارگیری چندگانه انتخاب کنید.\",\n  \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n    \"- برای اضافه کردن URL BitTorrent-Magnet، از گزینه بر اساس مسیر سایت استفاده کنید و آن را در آنجا اضافه کنید.\",\n  \"Select Torrents\": \"تورنت ها را انتخاب کنید\",\n  \"Select a Torrent\": \"تورنتی را انتخاب کنید\",\n  // add metalink modal\n  \"Add Downloads By Metalinks\": \"متالینک ها را انتخاب کنید\",\n  \"Select Metalinks\": \"Metalinks را انتخاب کنید\",\n  \"- Select the Metalink from the local filesystem to start the download.\":\n    \"- Metalink را از سیستم فایل محلی انتخاب کنید تا دانلود را شروع کنید.\",\n  \"- You can select multiple Metalinks to start multiple downloads.\":\n    \"- شما می توانید چندین Metalinks را برای شروع چندین بار انتخاب کنید.\",\n  \"Select a Metalink\": \"Metalink را انتخاب کنید\",\n  // select file modal\n  \"Choose files to start download for\": \"فایل را برای شروع دانلود انتخاب کنید\",\n  \"Select to download\": \"برای دانلود انتخاب کنید\",\n  // settings modal\n  \"Aria2 RPC host and port\": \"میزبان و پورت Aria2 RPC\",\n  \"Enter the host\": \"میزبان را وارد کنید\",\n  \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n    \"نام IP یا DNS سرور که RPC برای Aria2 در حال اجرا است را وارد کنید (به طور پیش فرض: localhost)\",\n  \"Enter the port\": \"پورت را وارد کنید\",\n  \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n    \"پورت سرور که RPC برای Aria2 اجرا می شود را وارد کنید (به طور پیش فرض: 6800)\",\n  \"Enter the RPC path\": \"مسیر RPC را وارد کنید\",\n  \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n    \"مسیر نقطه پایانی Aria2 RPC را وارد کنید (default: / jsonrpc)\",\n  \"SSL/TLS encryption\": \"SSL / TLS رمزگذاری\",\n  \"Enable SSL/TLS encryption\": \"SSL / TLS رمزگذاری را فعال کنید\",\n  \"Enter the secret token (optional)\": \"رمز نشانه (اختیاری) را وارد کنید\",\n  \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n    \"کد مخفی Aria2 RPC را وارد کنید (اگر احراز هویت فعال نمی شود خالی بگذارید)\",\n  \"Enter the username (optional)\": \"نام کاربری (اختیاری) را وارد کنید\",\n  \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n    \"نام کاربری Aria2 RPC را وارد کنید (خالی اگر احراز هویت غیر فعال شود)\",\n  \"Enter the password (optional)\": \"رمز عبور را وارد کنید (اختیاری)\",\n  \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n    \"گذرواژه Aria2 RPC را وارد کنید (اگر احراز هویت فعال نمی شود خالی بگذارید)\",\n  \"Enter base URL (optional)\": \"URL پایه را وارد کنید (اختیاری)\",\n  \"Direct Download\": \"دانلود مستقیم\",\n  \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n    \"در صورت عرضه، لینک برای ایجاد مستقیم دانلود از سرور Aria2 ایجاد خواهد شد.\",\n  \"(Requires appropriate webserver to be configured.)\": \"(نیاز به وب سرور مناسب برای پیکربندی.)\",\n  \"Save Connection configuration\": \"ذخیره پیکربندی اتصال\",\n  Filter: \"فیلتر\",\n  // server info modal\n  \"Aria2 server info\": \"مشخصات سرور Aria2\",\n  \"Aria2 Version\": \"نسخه Aria2\",\n  \"Features Enabled\": \"ویژگی های فعال\",\n  // about modal\n  \"To download the latest version of the project, add issues or to contribute back, head on to\":\n    \"برای دانلود آخرين نسخه پروژه، مسائل را اضافه کنيد يا به پشتيبانی بپردازيد بروید به\",\n  \"Or you can open the latest version in the browser through\":\n    \"یا شما می توانید آخرین نسخه را از طریق مرورگر باز کنید\",\n  Close: \"بستن\",\n  // labels\n  \"Download status\": \"وضعیت دانلود\",\n  \"Download Speed\": \"سرعت دانلود\",\n  \"Upload Speed\": \"سرعت آپلود\",\n  \"Estimated time\": \"زمان تخمین زده شده\",\n  \"Download Size\": \"اندازه دانلود\",\n  Downloaded: \"دانلود شده\",\n  Progress: \"پیشرفت\",\n  \"Download Path\": \"مسیر دانلود\",\n  Uploaded: \"آپلود شده\",\n  \"Download GID\": \"دانلود GID\",\n  \"Number of Pieces\": \"تعداد قطعات\",\n  \"Piece Length\": \"طول قطعه\",\n\n  //alerts\n  \"The last connection attempt was unsuccessful. Trying another configuration\":\n    \"آخرین تلاش اتصال ناموفق بود. تلاش برای تنظیم دیگر\",\n  \"Oh Snap!\": \"اوه نه!\",\n  \"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\":\n    \"نمی توان به سرور aria2 RPC متصل شد. در 10 ثانیه دوباره تلاش خواهیم کرد ممکن است بخواهید تنظیمات اتصال را با رفتن به تنظیمات > تنظیمات اتصال بررسی کنید\",\n  \"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\":\n    \"در هنگام اتصال به سرور Aria2 RPC تأییدیه شکست خورد. در 10 ثانیه دوباره تلاش خواهیم کرد ممکن است بخواهید جزئیات احراز هویت خود را با رفتن به تنظیمات > تنظیمات اتصال تایید کنید\",\n  \"Successfully connected to Aria2 through its remote RPC …\":\n    \"با موفقیت از طریق RPC از راه دور به Aria2 متصل شد ...\",\n  \"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)\":\n    \"با موفقیت به Aria2 از طریق RPC راه دور متصل شد، اما اتصال هنوز ناامن است. برای امنیت کامل سعی کنید مجوز نشانه مجوز را در هنگام شروع Aria2 (از طریق پرچم --rpc-secret)\",\n  \"Trying to connect to aria2 using the new connection configuration\":\n    \"تلاش برای اتصال به aria2 با استفاده از پیکربندی اتصال جدید\",\n  \"Remove {{name}} and associated meta-data?\": \"حذف {{name}} و متا داده های مرتبط\"\n};\n"
  },
  {
    "path": "src/js/translate/fr_FR.js",
    "content": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.fr_FR = {\n  // header\n  Search: \"Rechercher\",\n  // Nav menu\n  Add: \"Ajouter\",\n  \"By URIs\": \"Par URIs\",\n  \"By Torrents\": \"Par Torrents\",\n  \"By Metalinks\": \"Par Metaliens\",\n  Manage: \"Gérer\",\n  \"Pause All\": \"Tout suspendre\",\n  \"Resume Paused\": \"Reprendre\",\n  \"Purge Completed\": \"Nettoyer les fichiers complétés\",\n  Settings: \"Paramètres\",\n  \"Connection Settings\": \"Paramètres de connexion\",\n  \"Global Settings\": \"Paramètres globaux\",\n  \"Server info\": \"Informations serveur\",\n  \"About and contribute\": \"À propos et contribuer\",\n  \"Toggle navigation\": \"Basculer la navigation\",\n  // body\n  // nav side bar\n  Miscellaneous: \"Autres\",\n  \"Global Statistics\": \"Statistiques globales\",\n  About: \"À propos\",\n  Displaying: \"Affichage de\",\n  of: \"parmi\",\n  downloads: \"téléchargements\",\n  Language: \"Langue\",\n  // download filters\n  \"Download Filters\": \"Filtres de téléchargement\",\n  Running: \"En cours\",\n  Active: \"Actifs\",\n  Waiting: \"En attente\",\n  Complete: \"Complétés\",\n  Error: \"Erreurs\",\n  Paused: \"En pause\",\n  Removed: \"Supprimés\",\n  \"Hide linked meta-data\": \"Cacher les métadonnées liées\",\n  Toggle: \"Basculer\",\n  \"Reset filters\": \"Réinitialiser les filtres\",\n  // download status\n  Verifying: \"Vérification\",\n  \"Verify Pending\": \"Vérification en attente\",\n  // starred properties\n  \"Quick Access Settings\": \"Paramètres d'accès rapide\",\n  Save: \"Sauvegarder\",\n  \"Save settings\": \"Sauvegarder les paramètres\",\n  \"Currently no download in line to display, use the\":\n    \"Aucun téléchargement dans la file d'attente, utilisez le bouton de téléchargement\",\n  \"download button to start downloading files!\": \"pour commencer à télécharger des fichiers !\",\n  Peers: \"Pairs\",\n  \"More Info\": \"Plus d'infos\",\n  Remove: \"Supprimer\",\n  \"# of\": \"# parmi\",\n  Length: \"Longueur\",\n  // modals\n  \"Add Downloads By URIs\": \"Ajouter des téléchargements depuis des URIs\",\n  \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n    \"Vous pouvez ajouter plusieurs téléchargements (fichiers) en même temps, en mettant une URI pour chaque fichier sur une nouvelle ligne\",\n  \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n    \"Vous pouvez aussi ajouter plusieurs URIs (mirroirs) pour le *même* fichier. Pour ce faire, séparez les URIs par un espace.\",\n  \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\":\n    \"Une URI peut être HTTP(S)/FTP/BitTorrent-Magnet.\",\n  \"Download settings\": \"Paramètres de téléchargement\",\n  \"Advanced settings\": \"Paramètres avancés\",\n  Cancel: \"Annuler\",\n  Start: \"Démarrer\",\n  Choose: \"Choisir\",\n  \"Quick Access (shown on the main page)\": \"Accès rapide (affiché sur la page principale\",\n  // add torrent modal\n  \"Add Downloads By Torrents\": \"Ajouter des téléchargements à partir de fichiers Torrent\",\n  \"- Select the torrent from the local filesystem to start the download.\":\n    \"- Sélectionnez le torrent depuis votre système de fichier local pour commencer le téléchargement.\",\n  \"- You can select multiple torrents to start multiple downloads.\":\n    \"Vous pouvez sélectionner plusieurs torrents pour commencer plusieurs téléchargements.\",\n  \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n    \"Pour ajouter une URL BitTorrent-Magnet, utilisez l'option Ajouter par URIs et ajoutez-la à ce niveau.\",\n  \"Select Torrents\": \"Sélectionner des Torrents\",\n  \"Select a Torrent\": \"Sélectionner un Torrent\",\n  // add metalink modal\n  \"Add Downloads By Metalinks\": \"Ajouter des téléchargements par Metaliens\",\n  \"Select Metalinks\": \"Sélectionner des Métaliens\",\n  \"- Select the Metalink from the local filesystem to start the download.\":\n    \"Sélectionner le Métalien depuis votre système de fichier local pour commencer le téléchargement.\",\n  \"- You can select multiple Metalinks to start multiple downloads.\":\n    \"Vous pouvez sélectionner plusieurs Métaliens pour commencer plusieurs téléchargements.\",\n  \"Select a Metalink\": \"Sélectionner un Métalien\",\n  // select file modal\n  \"Choose files to start download for\":\n    \"Sélectionner les fichiers pour lesquels commencer le téléchargement.\",\n  \"Select to download\": \"Sélectionner pour télécharger\",\n  // settings modal\n  \"Aria2 RPC host and port\": \"Hôte et ports Aria2 RPC\",\n  \"Enter the host\": \"Entrer l'hôte\",\n  \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n    \"Entrer l'IP ou le nom DNS du serveur sur lequel est lancé le RPC pour Aria2 (défaut : localhost)\",\n  \"Enter the port\": \"Entrer le port\",\n  \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n    \"Entrer le port du serveur sur lequel tourne le RPC pour Aria2 (défaut : 6800)\",\n  \"Enter the RPC path\": \"Entrer le chemin vers le RPC\",\n  \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n    \"Entrer le chemin final pour le RPC Aria2 (défaut : /jsonrpc)\",\n  \"SSL/TLS encryption\": \"Chiffrage SSL/TLS\",\n  \"Enable SSL/TLS encryption\": \"Activer le chiffrage SSL/TLS\",\n  \"Enter the secret token (optional)\": \"Entrer le token secret (optionnel)\",\n  \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n    \"Entrer le token secret pour le RPC Aria2 (laisser vide si l'authentification n'est pas activée)\",\n  \"Enter the username (optional)\": \"Entrer le nom d'utilisateur (optionnel)\",\n  \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n    \"Entrer le nom d'utilisateur RPC Aria2 (laisser vide si l'authentification n'est pas activée)\",\n  \"Enter the password (optional)\": \"Entrer le mot de passe (optionnel)\",\n  \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n    \"Entrer le mot de passe RPC Aria2 (laisser vide si l'authentification n'est pas activée)\",\n  \"Enter base URL (optional)\": \"Entrez l'URL de base\",\n  \"Direct Download\": \"Téléchargement direct\",\n  \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n    \"S'ils sont fournis, les liens seront créés pour activer le téléchargement direct depuis le serveur Aria2\",\n  \"(Requires appropriate webserver to be configured.)\":\n    \"(Nécessite un serveur web approprié pour être configuré)\",\n  \"Save Connection configuration\": \"Sauvegarder la configuration de connexion\",\n  Filter: \"Filtre\",\n  // server info modal\n  \"Aria2 server info\": \"Infos serveur Aria2\",\n  \"Aria2 Version\": \"Version Aria2\",\n  \"Features Enabled\": \"Fonctionnalités activées\",\n  // about modal\n  \"To download the latest version of the project, add issues or to contribute back, head on to\":\n    \"Pour télécharger la dernière version du projet, signaler des problèmes ou pour contribuer, aller à l'adresse\",\n  \"Or you can open the latest version in the browser through\":\n    \"Ou vous pouvez ouvrir la dernière version dans le navigateur depuis\",\n  Close: \"Fermer\",\n  // lables\n  \"Download status\": \"Statut de téléchargement\",\n  \"Download Speed\": \"Vitesse de téléchargement\",\n  \"Upload Speed\": \"Vitesse d'envoi\",\n  \"Estimated time\": \"Temps estimé\",\n  \"Download Size\": \"Taille du téléchargement\",\n  Downloaded: \"Téléchargé\",\n  Progress: \"Avancement\",\n  \"Download Path\": \"Chemin de téléchargement\",\n  Uploaded: \"Envoyé\",\n  \"Download GID\": \"GID du téléchargement\",\n  \"Number of Pieces\": \"Nombre de pièces\",\n  \"Piece Length\": \"Taille de la pièce\",\n  \"Shutdown Server\": \"Arrêter le serveur\",\n\n  \"The last connection attempt was unsuccessful. Trying another configuration\":\n    \"La dernière tentative de connexion a échoué. Essai d'une autre configuration\",\n  \"Oh Snap!\": \"Oh non !\",\n  \"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\":\n    \"Impossible de se connecter au serveur RPC d'aria2. Nouvel essai dans 10 secondes. Vous voudrez peut-être vérifier les paramètres de connexion en allant dans Paramètres > Paramètres de connexion\",\n  \"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\":\n    \"Erreur d'authentification lors de la connexion au serveur RPC d'aria2. Nouvel essai dans 10 secondes. Vous voudrez peut-être confirmer les renseignements d'authentification en allant dans Paramètres > Paramètres de connexion\",\n  \"Successfully connected to Aria2 through its remote RPC …\":\n    \"Connexion réussie à aria2 via son interface RPC …\",\n  \"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)\":\n    \"Connexion réussie à aria2 via l'interface RPC, cependant la connexion n'est toujours pas sécurisée. Pour une sécurité complète, essayez d'ajouter un token secret d'autorisation en lançant aria2 (à l'aide de l'option --rpc-secret)\",\n  \"Trying to connect to aria2 using the new connection configuration\":\n    \"Tentative de connexion à aria2 avec la nouvelle configuration\",\n  \"Remove {{name}} and associated meta-data?\": \"Supprimer {{name}} et les métadonnées associées\"\n};\n"
  },
  {
    "path": "src/js/translate/id_ID.js",
    "content": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.id_ID = {\n  // replace en_US to ll_CC, examples: zh_CN, de_AT.\n  // header\n  Search: \"Telusuri\",\n  // Nav menu\n  Add: \"Tambah\",\n  \"By URIs\": \"Dari URI\",\n  \"By Torrents\": \"Dari Torrent\",\n  \"By Metalinks\": \"Dari Metalink\",\n  Manage: \"Kelola\",\n  \"Pause All\": \"Jeda Semua\",\n  \"Resume Paused\": \"Lanjut yang Dijeda\",\n  \"Purge Completed\": \"Hapus yang Terunduh\",\n  \"Shutdown Server\": \"Matikan Peladen\",\n  Settings: \"Pengaturan\",\n  \"Connection Settings\": \"Pengaturan Koneksi\",\n  \"Global Settings\": \"Pengaturan Global\",\n  \"Server info\": \"Info peladen\",\n  \"About and contribute\": \"Tentang dan kontribusi\",\n  \"Toggle navigation\": \"Alihkan navigasi\",\n  // body\n  // nav side bar\n  Miscellaneous: \"Lain-lain\",\n  \"Global Statistics\": \"Statistik Global\",\n  About: \"Tentang\",\n  Displaying: \"Tampilan\",\n  of: \"dari\",\n  downloads: \"unduhan\",\n  Language: \"Bahasa\",\n  // download filters\n  \"Download Filters\": \"Saring Unduhan\",\n  Running: \"Berjalan\",\n  Active: \"Aktif\",\n  Waiting: \"Menunggu\",\n  Complete: \"Selesai\",\n  Error: \"Galat\",\n  Paused: \"Dijeda\",\n  Removed: \"Dihapus\",\n  \"Hide linked meta-data\": \"Sembunyikan tautan meta-data\",\n  Toggle: \"Tombol alihan\",\n  \"Reset filters\": \"Reset penyaring\",\n  // download status\n  Verifying: \"Memverifikasi\",\n  \"Verify Pending\": \"Verifikasi Ditunda\",\n  // starred properties\n  \"Quick Access Settings\": \"Pengaturan Akses Cepat\",\n  Save: \"Simpan\",\n  \"Save settings\": \"Simpan pengaturan\",\n  \"Currently no download in line to display, use the\":\n    \"Sekarang tak ada unduhan yang ditampilkan, gunakan\",\n  \"download button to start downloading files!\": \"tombol unduh untuk mulai mengunduh berkas!\",\n  Peers: \"Peer\",\n  \"More Info\": \"Info Lengkap\",\n  Remove: \"Hapus\",\n  \"# of\": \"# dari\",\n  Length: \"Ukuran\",\n  // modals\n  \"Add Downloads By URIs\": \"Unduh dari URI\",\n  \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n    \"- Anda dapat menambah banyak unduhan (berkas) sekali waktu dg menaruh URI setiap berkas dlm baris terpisah.\",\n  \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n    \"- Anda juga dapat menambah banyak URI (cermin) untuk berkas yang *sama*. Pisahkan URI dengan spasi.\",\n  \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\":\n    \"- URI dapat berbentuk HTTP(S)/FTP/BitTorrent-Magnet.\",\n  \"Download settings\": \"Pengaturan unduhan\",\n  \"Advanced settings\": \"Pengaturan mahir\",\n  Cancel: \"Batal\",\n  Start: \"Mulai\",\n  Choose: \"Pilih\",\n  \"Quick Access (shown on the main page)\": \"Akses Cepat (terlihat di laman utama)\",\n  // add torrent modal\n  \"Add Downloads By Torrents\": \"Unduh dari Torrent\",\n  \"- Select the torrent from the local filesystem to start the download.\":\n    \"- Pilih torrent dari sistem berkas lokal untuk mulai mengunduh.\",\n  \"- You can select multiple torrents to start multiple downloads.\":\n    \"Anda dapat memilih banyak torrent untuk memulai multi unduh.\",\n  \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n    \"Untuk menambah BitTorrent-Magnet URL, pakai opsi Tambah dari URI dan tambahkan di situ.\",\n  \"Select Torrents\": \"Pilih Torrent\",\n  \"Select a Torrent\": \"Pilih Torrent\",\n  // add metalink modal\n  \"Add Downloads By Metalinks\": \"Unduh dari Metalink\",\n  \"Select Metalinks\": \"Pilih Metalink\",\n  \"- Select the Metalink from the local filesystem to start the download.\":\n    \"- Pilih Metalink dari sistem berkas lokal untuk mulai mengunduh.\",\n  \"- You can select multiple Metalinks to start multiple downloads.\":\n    \"- Anda dapat memilih banyak Metalink untuk mulai multi unduh.\",\n  \"Select a Metalink\": \"Pilih Metalink\",\n  // select file modal\n  \"Choose files to start download for\": \"Pilih berkas untuk mulai mengunduh\",\n  \"Select to download\": \"Pilih untuk mengunduh\",\n  // settings modal\n  \"Aria2 RPC host and port\": \"Port dan host RPC Aria2\",\n  \"Enter the host\": \"Masukkan host\",\n  \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n    \"Masukkan IP atau nama DNS peladen tempat RPC Aria2 berjalan (asali: localhost)\",\n  \"Enter the port\": \"Masukkan porta\",\n  \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n    \"Masukkan porta peladen tempat RPC Aria2 berjalan (asali: 6800)\",\n  \"Enter the RPC path\": \"Masukkan path RPC\",\n  \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n    \"Masukkan path untuk endpoint RPC Aria2 (asali: /jsonrpc)\",\n  \"SSL/TLS encryption\": \"Enkripsi SSL/TLS\",\n  \"Enable SSL/TLS encryption\": \"Aktifkan enkripsi SSL/TLS\",\n  \"Enter the secret token (optional)\": \"Masukkan token rahasia (opsional)\",\n  \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n    \"Masukkan token rahasia RPC Aria2 (kosongkan jika otentifikasi tidak aktif)\",\n  \"Enter the username (optional)\": \"Masukkan username (opsional)\",\n  \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n    \"Masukkan username RPC Aria2 (kosongkan jika otentifikasi tidak aktif)\",\n  \"Enter the password (optional)\": \"Masukkan kata sandi (opsional)\",\n  \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n    \"Masukkan kata sandi RPC Aria2 (kosongkan jika otentifikasi tidak aktif)\",\n  \"Enter base URL (optional)\": \"Masukkan URL dasar (opsional)\",\n  \"Direct Download\": \"Unduh Langsung\",\n  \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n    \"Jika tersedia, tautan akan dibuat untuk mengaktifkan unduhan langsung dari peladen Aria2.\",\n  \"(Requires appropriate webserver to be configured.)\":\n    \"(Mewajibkan webserver yang perlu dikonfigurasi)\",\n  \"Save Connection configuration\": \"Simpan konfigurasi Koneksi\",\n  Filter: \"Saring\",\n  // server info modal\n  \"Aria2 server info\": \"Info peladen Aria2\",\n  \"Aria2 Version\": \"Versi Aria2\",\n  \"Features Enabled\": \"Fitur yang Aktif\",\n  // about modal\n  \"To download the latest version of the project, add issues or to contribute back, head on to\":\n    \"Untuk mengunduh versi terkini proyek, tambahkan isu atau kontribusi balik ke\",\n  \"Or you can open the latest version in the browser through\":\n    \"Atau Anda dapat membuka versi terkini via peramban lewat\",\n  Close: \"Tutup\",\n  // labels\n  \"Download status\": \"Status unduh\",\n  \"Download Speed\": \"Kecepatan unduh\",\n  \"Upload Speed\": \"Kecepatan unggah\",\n  \"Estimated time\": \"Waktu estimasi\",\n  \"Download Size\": \"Ukuran unduh\",\n  Downloaded: \"Terunduh\",\n  Progress: \"Proses\",\n  \"Download Path\": \"Path unduh\",\n  Uploaded: \"Terunggah\",\n  \"Download GID\": \"GID unduh\",\n  \"Number of Pieces\": \"Jumlah Bagian\",\n  \"Piece Length\": \"Ukuran Bagian\",\n\n  //alerts\n  \"The last connection attempt was unsuccessful. Trying another configuration\":\n    \"Usaha koneksi terakhir gagal. Coba konfigurasi lain\",\n  \"Oh Snap!\": \"Oh Sial!\",\n  \"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\":\n    \"Tak dapat terkoneksi ke peladen RPC aria2. Akan diulang dalam 10 detik. Anda mungkin ingin menguji pengaturan koneksi melalui Pengaturan > Pengaturan Koneksi\",\n  \"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\":\n    \"Otentifikasi gagal saat membuka koneksi ke peladen RPC Aria2. Akan diulang dalam 10 detik. Anda mungkin ingin mengonfirmasi detail otentifikasi di Pengaturan > Pengaturan Koneksi\",\n  \"Successfully connected to Aria2 through its remote RPC …\":\n    \"Sukses terkoneksi ke Aria2 melalui remot RPC …\",\n  \"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)\":\n    \"Sukses terkoneksi ke Aria2 melalui remot RPC, bagaimanapun koneksi masih tidak aman. Untuk melengkapi keamanan coba tambahkan token rahasia otorisasi saat memulai Aria2 (lewat flag --rpc-secret)\",\n  \"Trying to connect to aria2 using the new connection configuration\":\n    \"Mencoba koneksi ke aria2 menggunakan konfigurasi koneksi baru\",\n  // {{name}} refers to the download name, do not modify.\n  \"Remove {{name}} and associated meta-data?\": \"Hapus {{name}} dan meta-data yang berhubungan?\"\n};\n"
  },
  {
    "path": "src/js/translate/it_IT.js",
    "content": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.it_IT = {\n  // header\n  Search: \"Cerca\",\n  // Nav menu\n  Add: \"Aggiungi\",\n  \"By URIs\": \"Da URIs\",\n  \"By Torrents\": \"Da Torrent\",\n  \"By Metalinks\": \"Da Metalink\",\n  Manage: \"Gestione\",\n  \"Pause All\": \"Ferma tutto\",\n  \"Resume Paused\": \"Riprendi fermati\",\n  \"Purge Completed\": \"Togli i completi\",\n  Settings: \"Impostazioni\",\n  \"Connection Settings\": \"Impostazioni di connessione\",\n  \"Global Settings\": \"Impostazioni globali\",\n  \"Server info\": \"Informazioni sul server\",\n  \"About and contribute\": \"Crediti e informazioni\",\n  \"Toggle navigation\": \"Cambia navigazione\",\n  // body\n  // nav side bar\n  Miscellaneous: \"Varie\",\n  \"Global Statistics\": \"Statistiche globali\",\n  About: \"Info\",\n  Displaying: \"Mostra\",\n  of: \"di\",\n  downloads: \"downloads\",\n  Language: \"Lingua\",\n  // download filters\n  \"Download Filters\": \"Filtri download\",\n  Running: \"In corso\",\n  Active: \"Attivi\",\n  Waiting: \"In attesa\",\n  Complete: \"Completi\",\n  Error: \"Errore\",\n  Paused: \"In pausa\",\n  Removed: \"Rimossi\",\n  \"Hide linked meta-data\": \"Nascondi i meta-data collegati\",\n  Toggle: \"Cambia\",\n  \"Reset filters\": \"Reimposta filtri\",\n  // starred properties\n  \"Quick Access Settings\": \"Accesso rapido\",\n  \"Save settings\": \"Salva impostazioni\",\n  \"Currently no download in line to display, use the\":\n    \"Attualmente non c'è nessun download da mostrare, usa il pulsante \",\n  \"download button to start downloading files!\": \"dowload per cominciare a scaricare!\",\n  Peers: \"Peers\",\n  \"More Info\": \"Altre informazioni\",\n  Remove: \"Rimuovi\",\n  \"# of\": \"# di\",\n  Length: \"Lunghezza\",\n  // modals\n  \"Add Downloads By URIs\": \"Aggiungi Downloads da URIs\",\n  \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n    \"- Puoi aggungere più download(files) allo stesso tempo mettendo un'URI per riga.\",\n  \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n    \"- Puoi anche aggiungere più URI di download(mirror) per uno *stesso* file separando i vari mirror da uno spazio.\",\n  \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\":\n    \"- Un URI può essere un indirizzo HTTP(S)/FTP o un BitTorrent Magnet link.\",\n  \"Download settings\": \"Impostazioni download\",\n  \"Advanced settings\": \"Impostazioni avanzate\",\n  Cancel: \"Cancella\",\n  Start: \"Aggiungi\",\n  Choose: \"Scegli\",\n  \"Quick Access (shown on the main page)\": \"Accesso rapido (mostrato nella pagina principale)\",\n  // add torrent modal\n  \"Add Downloads By Torrents\": \"Aggiungi Torrent\",\n  \"- Select the torrent from the local filesystem to start the download.\":\n    \"- Seleziona il file torrent dal tuo computer per iniziare a scaricare.\",\n  \"- You can select multiple torrents to start multiple downloads.\":\n    \"- Puoi aggiungere anche più file contemporaneamente per iniziare più dowload insieme.\",\n  \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n    \"- Per aggiungere un  Magnet Link BitTorrent utilizza l'opzione Aggiungi da URI.\",\n  \"Select Torrents\": \"Seleziona Torrents\",\n  \"Select a Torrent\": \"Seleziona un Torrent\",\n  // add metalink modal\n  \"Add Downloads By Metalinks\": \"Aggiungi Torrent da Metalink\",\n  \"Select Metalinks\": \"Seleziona Metalink\",\n  \"- Select the Metalink from the local filesystem to start the download.\":\n    \"- Seleziona un Metalink dal tuo computer per iniziare il download.\",\n  \"- You can select multiple Metalinks to start multiple downloads.\":\n    \"- Puoi iniziare anche più download selezionando più Metalink.\",\n  \"Select a Metalink\": \"Seleziona un Metalink\",\n  // select file modal\n  \"Choose files to start download for\": \"Scegli i file da scaricare\",\n  \"Select to download\": \"Seleziona per scaricare\",\n  // settings modal\n  \"Aria2 RPC host and port\": \"Host e porta del server RPC di Aria2\",\n  \"Enter the host\": \"Inserisci l'host\",\n  \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n    \"Inserisci l'IP o il nome DNS del server dov'è in esecuzione l'RPC per Aria2 (default: localhost)\",\n  \"Enter the port\": \"Inserisci la porta\",\n  \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n    \"Inserisci la porta del server dov'è in esecuzione l'RPC per Aria2  (default: 6800)\",\n  \"Enter the RPC path\": \"Inserisci la path RPC\",\n  \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n    \"Inserisci la path per l'endpoint RPC di Aria2 (default: /jsonrpc)\",\n  \"SSL/TLS encryption\": \"Cifratura SSL/TLS\",\n  \"Enable SSL/TLS encryption\": \"Abilita la cifratura SSL/TLS\",\n  \"Enter the secret token (optional)\": \"Inserisci il token segreto (opzionale)\",\n  \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n    \"Inserisci il token segreto per Aria2 (lascia vuoto se non è abilitato)\",\n  \"Enter the username (optional)\": \"Inserisci l'username (opzionale)\",\n  \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n    \"Inserisci l'username per l'RPC di Aria2 (lascia vuoto se non è abilitato)\",\n  \"Enter the password (optional)\": \"Inserisci la password (opzionale)\",\n  \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n    \"Inserisci la password per l'RPC di Aria2 (vuota se l'autenticazione non è abilitata)\",\n  \"Enter base URL (optional)\": \"Inserisci l'URL di base(opzionale)\",\n  \"Direct Download\": \"Downaload diretto\",\n  \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n    \"Se inserito, verrano creati dei link per scaricare direttamente i file dal server Aria2.\",\n  \"(Requires appropriate webserver to be configured.)\":\n    \"(Richiede un webserver correttamente configurato)\",\n  \"Save Connection configuration\": \"Salva la configurazione di connessione\",\n  Filter: \"Filtro\",\n  // server info modal\n  \"Aria2 server info\": \"Informazioni sul server Aria2\",\n  \"Aria2 Version\": \"Versione di Aria2\",\n  \"Features Enabled\": \"Funzionalità abilitate\",\n  // about modal\n  \"To download the latest version of the project, add issues or to contribute back, head on to\":\n    \"Per scaricare l'ultima versione del progetto, aggiungere problemi o contribuire, visita \",\n  \"Or you can open the latest version in the browser through\":\n    \"Oppure puoi aprire l'ultima versione direttamente nel browser\",\n  Close: \"Chiudi\",\n  // lables\n  \"Download status\": \"Stato download\",\n  \"Download Speed\": \"Velocità download\",\n  \"Upload Speed\": \"Velocità upload\",\n  \"Estimated time\": \"Tempo stimato\",\n  \"Download Size\": \"Dimensione del download\",\n  Downloaded: \"Scaricato\",\n  Progress: \"Progresso\",\n  \"Download Path\": \"Percorso di download\",\n  Uploaded: \"Caricato\",\n  \"Download GID\": \"GID Download\",\n  \"Number of Pieces\": \"Numero di segmenti\",\n  \"Piece Length\": \"Lunghezza segmenti\",\n  \"Shutdown Server\": \"Spegni Server\",\n\n  \"The last connection attempt was unsuccessful. Trying another configuration\":\n    \"L'ultimo tentativo di connessione non è riuscito. Provo un'altra connessione\",\n  \"Oh Snap!\": \"Mannaggia!\",\n  \"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\":\n    \"Non riesco a connettermi al server RPC di Aria2. Riprovo tra 10 secondi. Forse vuoi controllare le impostazioni di connessione in Impostazioni > Impostazioni di connessione\",\n  \"Successfully connected to Aria2 through its remote RPC …\":\n    \"Connesso con successo a Aria2 mediante RPC remoto …\",\n  \"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)\":\n    \"Correttamente connesso al server Aria2 mediante RPC, ma in modo non sicuro. Per una completa sicurezza prova ad aggiungere un token di autorizzazione segreto all'avvio di Aria2 (mediante il flag --rpc-secret)\",\n  \"Trying to connect to aria2 using the new connection configuration\":\n    \"Provo a connettermi a Aria2 attraverso le nuove impostazioni\"\n};\n"
  },
  {
    "path": "src/js/translate/nl_NL.js",
    "content": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.nl_NL = {\n  // header\n  Search: \"Zoeken\",\n  // Nav menu\n  Add: \"Toevoegen\",\n  \"By URIs\": \"met URI\",\n  \"By Torrents\": \"met Torrents\",\n  \"By Metalinks\": \"met Metalinks\",\n  Manage: \"Beheren\",\n  \"Pause All\": \"Alles pauzeren\",\n  \"Resume Paused\": \"Hervatten\",\n  \"Purge Completed\": \"Verwijder de voleindigden\",\n  Settings: \"Instellingen\",\n  \"Connection Settings\": \"Verbindingsinstellingen\",\n  \"Global Settings\": \"Globale instellingen\",\n  \"Server info\": \"Informatie over de server\",\n  \"About and contribute\": \"Over het project en bijdragen\",\n  \"Toggle navigation\": \"Navigatie omschakelen\",\n  Language: \"Taal\",\n  // body\n  // nav side bar\n  Miscellaneous: \"Overig\",\n  \"Global Statistics\": \"Globale statistieken\",\n  About: \"Over het project\",\n  Displaying: \" \", // empty because of grammar in the following 2 elements\n  of: \"van\",\n  downloads: \"downloads weergegeven\",\n  // download filters\n  \"Download Filters\": \"Download filters\",\n  Running: \"Bezig\",\n  Active: \"Actief\",\n  Waiting: \"Wachtend\",\n  Complete: \"Voleindigd\",\n  Error: \"Foutief\",\n  Paused: \"Gepauzeerd\",\n  Removed: \"Verwijderd\",\n  \"Hide linked meta-data\": \"Gekoppelde metadata verbergen\",\n  Toggle: \"Omschakelen\",\n  \"Reset filters\": \"Filters terugzetten\",\n  // starred properties\n  \"Quick Access Settings\": \"Snelle-toegang instellingen\",\n  \"Save settings\": \"Instellingen opslaan\",\n  \"Currently no download in line to display, use the\":\n    \"Momenteel geen downloads weer te geven, gebruik de \",\n  \"download button to start downloading files!\": \"knop om bestanden te gaan downloaden!\",\n  Peers: \"Peers\",\n  \"More Info\": \"Meer informatie\",\n  Remove: \"Verwijderen\",\n  \"# of\": \"Aantal\",\n  Length: \"Lengte\",\n  // modals\n  \"Add Downloads By URIs\": \"Downloads toevoegen met URI\",\n  \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n    \"- Je kunt meerdere downloads (bestanden) tezelfdertijd toevoegen door de URIs voor elk bestand op een aparte regel te zetten.\",\n  \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n    \"- Je kunt ook meerdere URIs (mirrors) voor *hetzelfde* bestand toevoegen. Scheidt hiervoor de URIs met een spatie.\",\n  \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\":\n    \"- Een URI kan HTTP(S)/FTP/BitTorrent-Magnet zijn.\",\n  \"Download settings\": \"Download instellingen\",\n  \"Advanced settings\": \"Geavanceerde instellingen\",\n  Cancel: \"Annuleren\",\n  Start: \"Starten\",\n  Choose: \"Kiezen\",\n  \"Quick Access (shown on the main page)\": \"Snelle toegang (op de hoofdpagina)\",\n  // add torrent modal\n  \"Add Downloads By Torrents\": \"Downloads toevoegen met torrents\",\n  \"- Select the torrent from the local filesystem to start the download.\":\n    \"- Selecteer de torrent van het locale bestandssysteem om de download te starten.\",\n  \"- You can select multiple torrents to start multiple downloads.\":\n    \"- Je kunt meerdere torrents selecteren voor meerdere downloads.\",\n  \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n    \"- Om een BitTorrent-Magnet URL toe te voegen, gebruik de Toevoegen met URI optie, en voeg het daar toe.\",\n  \"Select Torrents\": \"Selecteer torrents\",\n  \"Select a Torrent\": \"Selecteer een torrent\",\n  // add metalink modal\n  \"Add Downloads By Metalinks\": \"Download toevoegen met Metalinks\",\n  \"Select Metalinks\": \"Selecteer Metalinks\",\n  \"- Select the Metalink from the local filesystem to start the download.\":\n    \"- Selecteer de Metalink van het locale bestandssysteem om de download te starten.\",\n  \"- You can select multiple Metalinks to start multiple downloads.\":\n    \"- Selecter meerdere Metalinks om meerdere downloads te starten.\",\n  \"Select a Metalink\": \"Selecteer een Metalink\",\n  // select file modal\n  \"Choose files to start download for\": \"Bestanden kiezen waarvoor het downloaden beginnen moet\",\n  \"Select to download\": \"Selecteer om te downloaden\",\n  // settings modal\n  \"Aria2 RPC host and port\": \"Aria2 RPC server en poort\",\n  \"Enter the host\": \"Server invoeren\",\n  \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n    \"Voer de IP of DNS naam van de server waarop de RPC van Aria2 loopt (standaard: localhost)\",\n  \"Enter the port\": \"Poort invoeren\",\n  \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n    \"Invoeren van de serverpoort waarop de RPC van Aria2 loopt (standaard: 6800)\",\n  \"Enter the RPC path\": \"Invoeren van het RPC pad\",\n  \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n    \"Invoeren van het eindpunt van het Aria2 RPC pad (standaard: /jsonrpc)\",\n  \"SSL/TLS encryption\": \"SSL/TLS versleuteling\",\n  \"Enable SSL/TLS encryption\": \"SSL/TLS versleuteling inschakelen\",\n  \"Enter the secret token (optional)\": \"Invoeren van het wachtwoord (facultatief)\",\n  \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n    \"Invoeren van het Aria2 RPC wachtwoord (niet invullen als authenticatie niet is ingeschakeld)\",\n  \"Enter the username (optional)\": \"Invoeren van de gebruikersnaam (facultatief)\",\n  \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n    \"Invoeren van de Aria2 RPC gebruikersnaam (niet invullen als authenticatie niet is ingeschakeld)\",\n  \"Enter the password (optional)\": \"Invoeren van het wachtwoord (facultatief)\",\n  \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n    \"Invoeren van het Aria2 RPC wachtwoord (niet invullen als authenticatie niet is ingeschakeld)\",\n  \"Enter base URL (optional)\": \"Invoeren van de basis URL (facultatief)\",\n  \"Direct Download\": \"Direct downloaden\",\n  \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n    \"Als ingevoerd dan worden links aangemaakt die het direct downloaden van de Aria2 server toestaan.\",\n  \"(Requires appropriate webserver to be configurured.)\":\n    \"Hiervoor moet een geschikte webserver worden ingericht.)\",\n  \"Save Connection configuration\": \"Verbindingsconfiguratie opslaan\",\n  Filter: \"Filter\",\n  // server info modal\n  \"Aria2 server info\": \"Aria2 server informatie\",\n  \"Aria2 Version\": \"Aria2 versie\",\n  \"Features Enabled\": \"Geactiveerde kenmerken\",\n  // about modal\n  \"To download the latest version of the project, add issues or to contribute back, head on to\":\n    \"Om de nieuwste versie van het project te downloaden, problemen te rapporteren of bij te dragen, ga naar\",\n  \"Or you can open the latest version in the browser through\":\n    \"Of je kunt hier de nieuwste versie in je browser openen\",\n  Close: \"Afsluiten\"\n};\n"
  },
  {
    "path": "src/js/translate/pl_PL.js",
    "content": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.pl_PL = {\n  // header\n  Search: \"Szukaj\",\n  // Nav menu\n  Add: \"Dodaj\",\n  \"By URIs\": \"Przez URL\",\n  \"By Torrents\": \"Przez Torrenty\",\n  \"By Metalinks\": \"Przez Metalinki\",\n  Manage: \"Zarządzaj\",\n  \"Pause All\": \"Zatrzymaj wszystkie\",\n  \"Resume Paused\": \"Wznów zatrzymane\",\n  \"Purge Completed\": \"Czyść zakończone\",\n  Settings: \"Ustawienia\",\n  \"Connection Settings\": \"Ustawienia połączenia\",\n  \"Global Settings\": \"Ustawienia globalne\",\n  \"Server info\": \"Informacje o serwerze\",\n  \"About and contribute\": \"O projekcie\",\n  \"Toggle navigation\": \"Przełącz nawigację\",\n  // body\n  // nav side bar\n  Miscellaneous: \"Różne\",\n  \"Global Statistics\": \"Statystyki globalne\",\n  About: \"O\",\n  Displaying: \"Wyświetlanie\",\n  of: \"z\",\n  downloads: \"pobranych plików\",\n  Language: \"Język\",\n  // download filters\n  \"Download Filters\": \"Filtry ściągania\",\n  Running: \"Uruchomione\",\n  Active: \"Aktywne\",\n  Waiting: \"Oczekujące\",\n  Complete: \"Zakończone\",\n  Error: \"Błąd\",\n  Paused: \"Zatrzymane\",\n  Removed: \"Usunięte\",\n  \"Hide linked meta-data\": \"Ukryj zalinkowane meta-dane\",\n  Toggle: \"Przełącz\",\n  \"Reset filters\": \"Reset filtrów\",\n  // starred properties\n  \"Quick Access Settings\": \"Ustawienia szybkiego dostępu\",\n  \"Save settings\": \"Zapisz ustawienia\",\n  \"Currently no download in line to display, use the\":\n    \"Obecnie nie można wyświetlić żadnych pobieranych plików. Użyj przycisku\",\n  \"download button to start downloading files!\": \"aby rozpocząć ściąganie plików!\",\n  Peers: \"Peerów\",\n  \"More Info\": \"Więcej info\",\n  Remove: \"Usuń\",\n  \"# of\": \"# z\",\n  Length: \"Długość\",\n  // modals\n  \"Add Downloads By URIs\": \"Dodaj pobieranie przez URI\",\n  \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n    \"- Możesz dodać wiele pobrań (plików) w tym samym czasie przez wprowadzenie URI dla każdego w oddzielnej linii.\",\n  \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n    \"- Możesz także dodać wiele URI (luster) dla tego *samego* pliku. Zrób to, poprzez oddzielenie URI od siebie spacją.\",\n  \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\": \"- URI może być HTTP(S)/FTP/BitTorrent-Magnet.\",\n  \"Download settings\": \"Ustawienia pobierania\",\n  \"Advanced settings\": \"Zaawansowane ustawienia\",\n  Cancel: \"Anuluj\",\n  Start: \"Rozpocznij\",\n  Choose: \"Wybierz\",\n  \"Quick Access (shown on the main page)\": \"Szybki dostęp (pokazywane na głównej stronie)\",\n  // add torrent modal\n  \"Add Downloads By Torrents\": \"Dodaj pobierania przez Torrenty\",\n  \"- Select the torrent from the local filesystem to start the download.\":\n    \"- Wybierz torrent z lokalnego systemu plików, aby rozpocząć pobieranie.\",\n  \"- You can select multiple torrents to start multiple downloads.\":\n    \"- Możesz wybrać wiele torrentów do rozpoczęcia wiele pobrań.\",\n  \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n    \"- Aby dodać BitTorrent-URL Magnetyczny, użyj opcji dodawania przez URI i dodaj to tutaj.\",\n  \"Select Torrents\": \"Wybierz Torrenty\",\n  \"Select a Torrent\": \"Wybierz Torrent\",\n  // add metalink modal\n  \"Add Downloads By Metalinks\": \"Dodaj pobierania przez Metalinki\",\n  \"Select Metalinks\": \"Wybierz Metalinki\",\n  \"- Select the Metalink from the local filesystem to start the download.\":\n    \"- Wybierz Metalinki z lokalnego systemu plików, aby rozpocząć pobieranie.\",\n  \"- You can select multiple Metalinks to start multiple downloads.\":\n    \"- Możesz wybrać wiele Metalinków, aby rozpocząć wiele pobrań.\",\n  \"Select a Metalink\": \"Wybierz Metalink\",\n  // select file modal\n  \"Choose files to start download for\": \"Wybierz pliki, aby rozpocząć pobieranie dla\",\n  \"Select to download\": \"Wybierz do pobierania\",\n  // settings modal\n  \"Aria2 RPC host and port\": \"Aria2 RPC host i port\",\n  \"Enter the host\": \"Wprowadź host\",\n  \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n    \"Wprowadź IP lub nazwę DNS serwera, na którym jest uruchomiona Aria2 z RPC (domyślnie: localhost)\",\n  \"Enter the port\": \"Wprowadź port\",\n  \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n    \"Wprowadź port serwera, na którym Aria2 z RPC jest uruchomiona (domyślnie 6800)\",\n  \"Enter the RPC path\": \"Wprowadź ścieżkę RPC\",\n  \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n    \"Wprowadź ścieżkę dla punktu końcowego Aria2 RPC (domyślnie: /jsonrpc)\",\n  \"SSL/TLS encryption\": \"szyfrowanie SSL/TLS\",\n  \"Enable SSL/TLS encryption\": \"Włącz szyfrowanie SSL/TLS\",\n  \"Enter the secret token (optional)\": \"Wprowadź sekretny token (opcja dodatkowa)\",\n  \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n    \"Wprowadź sekretny token Aria2 RPC (pozostaw puste, jeżeli uwierzytelnienie nie jest włączone)\",\n  \"Enter the username (optional)\": \"Wprowadź nazwę użytkownika (opcja dodatkowa)\",\n  \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n    \"Wprowadź nazwę użytkownika Aria2 RPC (pozostaw puste, jeżeli uwierzytelnienie nie jest włączone)\",\n  \"Enter the password (optional)\": \"Wprowadź hasło (opcja dodatkowa)\",\n  \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n    \"Wprowadź hasło Aria2 RPC (pozostaw puste, jeżeli uwierzytelnienie nie jest włączone)\",\n  \"Enter base URL (optional)\": \"Wprowadź podstawowy URL (opcja dodatkowa)\",\n  \"Direct Download\": \"Bezpośrednie pobieranie\",\n  \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n    \"Jeżeli zaznaczone, linki mogą być utworzone do włączenia bezpośredniego pobierania z serwera Aria2\",\n  \"(Requires appropriate webserver to be configured.)\":\n    \"(Wymaga właściwej konfiguracji serwera WWW)\",\n  \"Save Connection configuration\": \"Zapisz konfigurację połączenia\",\n  Filter: \"Filtr\",\n  // server info modal\n  \"Aria2 server info\": \"Info o serwerze Aria2\",\n  \"Aria2 Version\": \"Wersja Aria2\",\n  \"Features Enabled\": \"Włączone funkcje\",\n  // about modal\n  \"To download the latest version of the project, add issues or to contribute back, head on to\":\n    \"Aby ściągnąć najnowszą wersję projektu, dodać zgłodzenia lub wspomagać projekt, udaj się do\",\n  \"Or you can open the latest version in the browser through\":\n    \"Lub otwórz najnowszą wersję przez przeglądarkę\",\n  Close: \"Zamknij\",\n  // lables\n  \"Download status\": \"Status pobierania\",\n  \"Download Speed\": \"Szybkość pobierania\",\n  \"Upload Speed\": \"Szybkość wysyłania\",\n  \"Estimated time\": \"Pozostały czas\",\n  \"Download Size\": \"Rozmiar pobierania\",\n  Downloaded: \"Pobrane\",\n  Progress: \"Postęp\",\n  \"Download Path\": \"Ścieżka pobierania\",\n  Uploaded: \"Załadowany\",\n  \"Download GID\": \"GID pobierania\",\n  \"Number of Pieces\": \"Liczba kawałków\",\n  \"Piece Length\": \"Rozmiar kawałka\",\n  \"Shutdown Server\": \"Wyłącz serwer\",\n  \"The last connection attempt was unsuccessful. Trying another configuration\":\n    \"Ostatnia próba połączenia nie powiodła się. Spróbuj innej konfiguracji\",\n  \"Oh Snap!\": \"O kurczę!\",\n  \"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\":\n    \"Nie można połączyć się z serwerem aria2 przez RPC. Kolejna próba za 10 sekund. Być może potrzebujesz sprawdzić ustawienie połączenia poprzez Ustawienia > Ustawienia połączenia\",\n  \"Successfully connected to Aria2 through its remote RPC …\":\n    \"Pomyślnie połączono się z Aria2 przez RPC ...\",\n  \"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)\":\n    \"Pomyślnie połączono się z Aria2 przez RPC, jednakże połączenie nie jest bezpieczne. Aby zabezpieczyć dodaj sekretny token autoryzacji podczas startu Aria2 (przez użycie flagi --rpc-secret)\",\n  \"Trying to connect to aria2 using the new connection configuration\":\n    \"Próba połączenia się z Aria2 poprzez użycie nowej konfiguracji połączenia\"\n};\n"
  },
  {
    "path": "src/js/translate/pt_BR.js",
    "content": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.pt_BR = {\n  // replace en_US to ll_CC, examples: zh_CN, de_AT.\n  // header\n  Search: \"Buscar\",\n  // Nav menu\n  Add: \"Adicionar\",\n  \"By URIs\": \"Por URIs\",\n  \"By Torrents\": \"Por Torrents\",\n  \"By Metalinks\": \"Por Metalinks\",\n  Manage: \"Gerenciar\",\n  \"Pause All\": \"Pausar Todos\",\n  \"Resume Paused\": \"Retomar Pausados\",\n  \"Purge Completed\": \"Remover Completados\",\n  \"Shutdown Server\": \"Desligar Servidor\",\n  Settings: \"Configurações\",\n  \"Connection Settings\": \"Configurações de Conexão\",\n  \"Global Settings\": \"Configurações Globais\",\n  \"Server info\": \"Informações do Servidor\",\n  \"About and contribute\": \"Sobre e contribuições\",\n  \"Toggle navigation\": \"Alternar navegação\",\n  // body\n  // nav side bar\n  Miscellaneous: \"Miscelânia\",\n  \"Global Statistics\": \"Estatísticas Globais\",\n  About: \"Sobre\",\n  Displaying: \"Mostrando\",\n  of: \"de\",\n  downloads: \"downloads\",\n  Language: \"Linguagem\",\n  // download filters\n  \"Download Filters\": \"Filtros de Download\",\n  Running: \"Rodando\",\n  Active: \"Ativo\",\n  Waiting: \"Esperando\",\n  Complete: \"Completo\",\n  Error: \"Erro\",\n  Paused: \"Pausado\",\n  Removed: \"Removido\",\n  \"Hide linked meta-data\": \"Esconder metadados ligados\",\n  Toggle: \"Alternar\",\n  \"Reset filters\": \"Limpar filtros\",\n  // download status\n  Verifying: \"Verificando\",\n  \"Verify Pending\": \"Verificação Pendente\",\n  // starred properties\n  \"Quick Access Settings\": \"Acesso Rápido às Configurações\",\n  Save: \"Salvar\",\n  \"Save settings\": \"Salvar configurações\",\n  \"Currently no download in line to display, use the\":\n    \"No momento não existem downloads para mostrar, utilize botão\",\n  \"download button to start downloading files!\": \"pra iniciar a transferência de arquivos!\",\n  Peers: \"Peers\",\n  \"More Info\": \"Mais informações\",\n  Remove: \"Remover\",\n  \"# of\": \" de\",\n  Length: \"Tamanho\",\n  // modals\n  \"Add Downloads By URIs\": \"Adicionar Downloads por URIs\",\n  \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n    \"- Você pode adicionar múltiplos downloads (arquivos) ao mesmo tempo inserindo a URI de cada arquivo em uma linha separada.\",\n  \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n    \"- Você também pode adicionar múltiplas URIs (mirrors) para o *mesmo* arquivo. Para fazer isto, separe as URIs por um espaço.\",\n  \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\":\n    \"- Uma URI pode ser HTTP(S)/FTP/BitTorrent-Magnet.\",\n  \"Download settings\": \"Configurações de download\",\n  \"Advanced settings\": \"Configurações avançadas\",\n  Cancel: \"Cancelar\",\n  Start: \"Iniciar\",\n  Choose: \"Escolher\",\n  \"Quick Access (shown on the main page)\": \"Acesso Rápido (exibido na página principal)\",\n  // add torrent modal\n  \"Add Downloads By Torrents\": \"Adicionar Downloads por Torrents\",\n  \"- Select the torrent from the local filesystem to start the download.\":\n    \"- Selecione o torrent de seu sistema de arquivos local para iniciar o download.\",\n  \"- You can select multiple torrents to start multiple downloads.\":\n    \"- Você pode selecionar múltiplos torrents para iniciar múltiplos downloads.\",\n  \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n    \"- Para adicionar uma URL BitTorrent-Magnet, utilize a opção Adicionar por URI.\",\n  \"Select Torrents\": \"Selecione Torrents\",\n  \"Select a Torrent\": \"Selecione um Torrent\",\n  // add metalink modal\n  \"Add Downloads By Metalinks\": \"Adicionar Downloads por Metalinks\",\n  \"Select Metalinks\": \"Selecione Metalinks\",\n  \"- Select the Metalink from the local filesystem to start the download.\":\n    \"- Selecione o Metalink do seu sistema de arquivos local para iniciar o download.\",\n  \"- You can select multiple Metalinks to start multiple downloads.\":\n    \"- Você pode selecionar múltiplos Metalinks para iniciar múltiplos downloads.\",\n  \"Select a Metalink\": \"Selecione um Metalink\",\n  // select file modal\n  \"Choose files to start download for\": \"Selecione os arquvos para serem baixados\",\n  \"Select to download\": \"Selecione para baixar\",\n  // settings modal\n  \"Aria2 RPC host and port\": \"Host e porta do RPC Aria2\",\n  \"Enter the host\": \"Informe o host\",\n  \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n    \"Informe o IP ou nome DNS do servidor no qual o RPC do Aria2 está rodando (default: localhost)\",\n  \"Enter the port\": \"Informe a porta\",\n  \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n    \"Informe a porta do servidor no qual o RPC do Aria2 está rodando (default: 6800)\",\n  \"Enter the RPC path\": \"Informe o caminho RPC\",\n  \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n    \"Informe o caminho para o endpoint RPC do Aria2 (default: /jasonrpc)\",\n  \"SSL/TLS encryption\": \"Criptografia SSL/TLS\",\n  \"Enable SSL/TLS encryption\": \"Habilita criptografia SSL/TLS\",\n  \"Enter the secret token (optional)\": \"Informe o token secreto (opcional)\",\n  \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n    \"Informe o token secreto do RPC Aria2 (deixe vazio se a autenticação não estiver habilitada)\",\n  \"Enter the username (optional)\": \"Informe o usuário (opcional)\",\n  \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n    \"Informe o usuário RPC do Aria2 (vazio se a autenticação não estiver habilitada)\",\n  \"Enter the password (optional)\": \"Informe a senha (opcional)\",\n  \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n    \"Informe a senha RPC do Aria2 (vazio se a autenticação não estiver habilitada)\",\n  \"Enter base URL (optional)\": \"Informe a URL base (opcional)\",\n  \"Direct Download\": \"Download Direto\",\n  \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n    \"Se fornecido, links serão criados para permitir download direto do servidor Aria2.\",\n  \"(Requires appropriate webserver to be configured.)\":\n    \"(Requer servidor web apropriado a ser configurado.)\",\n  \"Save Connection configuration\": \"Salvar Configuração de conexão\",\n  Filter: \"Filtrar\",\n  // server info modal\n  \"Aria2 server info\": \"Informações do servidor Aria2\",\n  \"Aria2 Version\": \"Verão do Aria2\",\n  \"Features Enabled\": \"Opções Habilitadas\",\n  // about modal\n  \"To download the latest version of the project, add issues or to contribute back, head on to\":\n    \"Para baixar a última versão do projeto, reportar problemas ou contribuir, acesse\",\n  \"Or you can open the latest version in the browser through\":\n    \"Ou você pode acessar a última versão pelo navegador através\",\n  Close: \"Fechar\",\n  // labels\n  \"Download status\": \"Status do download\",\n  \"Download Speed\": \"Velocidade de download\",\n  \"Upload Speed\": \"Velocidade de upload\",\n  \"Estimated time\": \"Tempo estimado\",\n  \"Download Size\": \"Tamanho do download\",\n  Downloaded: \"Baixado\",\n  Progress: \"Progresso\",\n  \"Download Path\": \"Caminho do download\",\n  Uploaded: \"Enviado\",\n  \"Download GID\": \"GID do download\",\n  \"Number of Pieces\": \"Número de partes\",\n  \"Piece Length\": \"Tamanho das partes\",\n\n  //alerts\n  \"The last connection attempt was unsuccessful. Trying another configuration\":\n    \"A última tentativa de conexão não teve sucesso. Tentando outra configuração\",\n  \"Oh Snap!\": \"Ah Droga!\",\n  \"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\":\n    \"Não foi possível conectar no servidor RPC aria2. Tententando em 10 seg. Você pode querer verificar as configurações da conexão em Configurações > Configurações de Conexão\",\n  \"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\":\n    \"Autenticação falhou enquanto conectando ao servidor RPC Aria2. Tentando em 10 seg. Você pode querer confirmar os detalhes de autenticação acessando Configurações > Configurações de Conexão\",\n  \"Successfully connected to Aria2 through its remote RPC …\":\n    \"Conectado com sucesso ao Aria2 através de seu RPC remoto …\",\n  \"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)\":\n    \"Conectado com sucesso ao Aria2 através de seu RPC remoto, contudo a conexão é insegura. Para uma completa segurança tente adicionar um token secreto de autorização quando iniciar o Aria2 (através da opção --rpc-secret)\",\n  \"Trying to connect to aria2 using the new connection configuration\":\n    \"Tentando conectar-se ao aria2 utilizando a nova configuração de conexão\",\n  // {{name}} refers to the download name, do not modify.\n  \"Remove {{name}} and associated meta-data?\": \"Remover {{name}} e os metadados associados?\"\n};\n"
  },
  {
    "path": "src/js/translate/ru_RU.js",
    "content": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.ru_RU = {\n  // header\n  Search: \"Поиск\",\n  // Nav menu\n  Add: \"Добавить\",\n  \"By URIs\": \"URL-адреса\",\n  \"By Torrents\": \"Torrent-файлы\",\n  \"By Metalinks\": \"Metalink-файлы\",\n  Manage: \"Управление\",\n  \"Pause All\": \"Приостановить всё\",\n  \"Resume Paused\": \"Возобновить всё\",\n  \"Purge Completed\": \"Удалить завершенные\",\n  Settings: \"Настройки\",\n  \"Connection Settings\": \"Настройки соединения\",\n  \"Global Settings\": \"Глобальные настройки\",\n  \"Server info\": \"Информация о сервере\",\n  \"About and contribute\": \"Информация и сотрудничество\",\n  \"Toggle navigation\": \"Переключение навигации\",\n  // body\n  // nav side bar\n  Miscellaneous: \"Разное\",\n  \"Global Statistics\": \"Глобальная статистика\",\n  About: \"Об\",\n  Displaying: \"Показано\",\n  of: \"из\",\n  downloads: \"загрузок\",\n  Language: \"Язык\",\n  // download filters\n  \"Download Filters\": \"Фильтр загрузок\",\n  Running: \"Запущенные\",\n  Active: \"Активные\",\n  Waiting: \"Ожидающие\",\n  Complete: \"Завершенные\",\n  Error: \"С ошибками\",\n  Paused: \"Приостановленные\",\n  Removed: \"Удаленные\",\n  \"Hide linked meta-data\": \"Скрыть связанные метаданные\",\n  Toggle: \"Переключить\",\n  \"Reset filters\": \"Сбросить фильтры\",\n  // starred properties\n  \"Quick Access Settings\": \"Настройки быстрого доступа\",\n  \"Save settings\": \"Сохранить настройки\",\n  \"Currently no download in line to display, use the\":\n    \"На данный момент ничего не загружается, используйте кнопку\",\n  \"download button to start downloading files!\": \"чтобы начать загрузку файла!\",\n  Peers: \"Пиры\",\n  \"More Info\": \"Информация\",\n  Remove: \"Удалить\",\n  \"# of\": \"# из\",\n  Length: \"Размер\",\n  // modals\n  \"Add Downloads By URIs\": \"Добавить загрузки из URL-адресов\",\n  \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n    \"- Вы можете добавить несколько загрузок (файлов) одновременно, помещая URL-адреса для каждого файла на отдельной строке.\",\n  \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n    \"- Можно также добавить несколько URL-адресов (зеркал) для *одного* файла. Для этого отделите URL-адреса пробелом.\",\n  \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\":\n    \"- URL-адрес может быть HTTP(S)/FTP/BitTorrent-Magnet.\",\n  \"Download settings\": \"Настройки загрузки\",\n  \"Advanced settings\": \"Расширенные настройки\",\n  Cancel: \"Отмена\",\n  Start: \"Начать\",\n  Choose: \"Выбрать\",\n  \"Quick Access (shown on the main page)\": \"Простой доступ (смотреть на главной странице)\",\n  // add torrent modal\n  \"Add Downloads By Torrents\": \"Добавить загрузку из Torrent-файлов\",\n  \"- Select the torrent from the local filesystem to start the download.\":\n    \"- Выберите Torrent-файлы из локальной файловой системы для начала загрузку.\",\n  \"- You can select multiple torrents to start multiple downloads.\":\n    \"- Вы можете выбрать несколько Torrent-файлы для запуска нескольких загрузок.\",\n  \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n    \"- Для добавления BitTorrent-Magnet ссылки воспользуйтесь пунктом меню *Добавить из URL-адреса*\",\n  \"Select Torrents\": \"Выберите торренты\",\n  \"Select a Torrent\": \"Выберите торрент\",\n  // add metalink modal\n  \"Add Downloads By Metalinks\": \"Добавить загрузку из Metalink-файлов\",\n  \"Select Metalinks\": \"Выбрать Metalink-файлы\",\n  \"- Select the Metalink from the local filesystem to start the download.\":\n    \"- Выберите Metalink-файлы из локальной файловой системы для начала загрузки\",\n  \"- You can select multiple Metalinks to start multiple downloads.\":\n    \"- Вы можете выбрать несколько Metalink-файлов для запуска нескольких загрузок.\",\n  \"Select a Metalink\": \"Выберите Metalink\",\n  // select file modal\n  \"Choose files to start download for\": \"Выберите файлы чтобы начать загрузку для\",\n  \"Select to download\": \"Выберите для загрузки\",\n  // settings modal\n  \"Aria2 RPC host and port\": \"Aria2 RPC хост и порт\",\n  \"Enter the host\": \"Укажите хост\",\n  \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n    \"Укажите IP или DNS-имя сервера, на котором запущена Aria2 со включенным RPC (по умолчанию: localhost)\",\n  \"Enter the port\": \"Укажите порт\",\n  \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n    \"Укажите порт сервера, на котором запущена Aria2 со включенным RPC (по умолчанию: 6800)\",\n  \"Enter the RPC path\": \"Укажите путь RPC\",\n  \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n    \"Укажите конечный путь для Aria2 RPC (по умолчанию: /jsonrpc)\",\n  \"SSL/TLS encryption\": \"SSL/TLS шифрование\",\n  \"Enable SSL/TLS encryption\": \"Разрешить SSL/TLS шифрование\",\n  \"Enter the secret token (optional)\": \"Укажите секретный токен (необязательно)\",\n  \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n    \"Укажите секретный токен Aria2 RPC (оставьте пустым, если авторизация не включена)\",\n  \"Enter the username (optional)\": \"Укажите имя пользователя (необязательно)\",\n  \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n    \"Укажите имя пользователя Aria2 RPC (оставьте пустым, если авторизация не включена)\",\n  \"Enter the password (optional)\": \"Укажите пароль (необязательно)\",\n  \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n    \"Укажите пароль для Aria2 RPC (оставьте пустым, если авторизация не включена)\",\n  \"Enter base URL (optional)\": \"Укажите базовый URL-адрес (необязательно)\",\n  \"Direct Download\": \"Прямая загрузка\",\n  \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n    \"Ссылки (при наличии) будут созданы для загрузки непосредственно с сервера Aria2.\",\n  \"(Requires appropriate webserver to be configured.)\":\n    \"(Требуется соответствующий веб-сервер для настройки.)\",\n  \"Save Connection configuration\": \"Сохранить настройки соединения\",\n  Filter: \"Фильтр\",\n  // server info modal\n  \"Aria2 server info\": \"Информация о сервере Aria2\",\n  \"Aria2 Version\": \"Версия Aria2\",\n  \"Features Enabled\": \"Имеющийся функционал\",\n  // about modal\n  \"To download the latest version of the project, add issues or to contribute back, head on to\":\n    \"Чтобы загрузить последнюю версию проекта, добавить вопросы или внести свой вклад, передите на\",\n  \"Or you can open the latest version in the browser through\":\n    \"Или вы можете открыть последнюю версию в браузере через\",\n  Close: \"Закрыть\",\n  // lables\n  \"Download status\": \"Статус загрузки\",\n  \"Download Speed\": \"Скорость загрузки\",\n  \"Upload Speed\": \"Скорость отдачи\",\n  \"Estimated time\": \"Оставшееся время\",\n  \"Download Size\": \"Размер загрузки\",\n  Downloaded: \"Загружено\",\n  Progress: \"Прогресс\",\n  \"Download Path\": \"Путь к загружаемым файлам\",\n  Uploaded: \"Отдано\",\n  \"Download GID\": \"Загруженый GID\",\n  \"Number of Pieces\": \"Количество частей\",\n  \"Piece Length\": \"Размер частей\",\n  \"Shutdown Server\": \"Выключить сервер\",\n\n  \"The last connection attempt was unsuccessful. Trying another configuration\":\n    \"Последняя попытка подключения была неудачной. Попробуйте другую конфигурацию\",\n  \"Oh Snap!\": \"Опаньки!\",\n  \"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\":\n    \"Не удалось подключиться к серверу Aria2 RPC. Попытка будет повторена в течение 10 секунд. Вы можете проверить параметры подключения, перейдя в меню Настройки > Настройки соединения\",\n  \"Successfully connected to Aria2 through its remote RPC …\":\n    \"Успешное подключение к Aria2 через удаленный RPC …\",\n  \"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)\":\n    \"Успешное подключение к Aria2 через удаленный RPC, однако соединение все еще небезопасно. Для обеспечения лучшей безопасности добавьте секретный токен авторизации при запуске aria2 (через флаг --rpc-secret)\",\n  \"Trying to connect to aria2 using the new connection configuration\":\n    \"Попытка подключиться к aria2 с использованием новой конфигурации\"\n};\n"
  },
  {
    "path": "src/js/translate/template.js",
    "content": "// This text is a template of translation list.\n\n// pre: ll_CC, locale name, examples: en_US, zh_CN\n// 1. Copy and rename to ll_CC.js, translate these words.\n// 2. in js/init.js:\n//    Add '.translations('ll_CC', translations.ll_CC)' before '.determinePreferredLanguage();'\n// 3. in index.html\n//    Add '<script src=\"js/translate/ll_CC.js\"></script>' after '<script src=\"js/libs/angular-translate.js\"></script>'\n// 4. To add Language to changeLanguage button, see \"{{ 'Language' | translate }}\" in index.html.\n//    flag-icon usage:\n//    https://github.com/lipis/flag-icon-css\n// 5. Browser determining preferred language automatically.\n//    http://angular-translate.github.io/docs/en/#/guide/07_multi-language\n\nif (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.en_US = {\n  // replace en_US to ll_CC, examples: zh_CN, de_AT.\n  // header\n  Search: \"\",\n  // Nav menu\n  Add: \"\",\n  \"By URIs\": \"\",\n  \"By Torrents\": \"\",\n  \"By Metalinks\": \"\",\n  Manage: \"\",\n  \"Pause All\": \"\",\n  \"Resume Paused\": \"\",\n  \"Purge Completed\": \"\",\n  \"Shutdown Server\": \"\",\n  Settings: \"\",\n  \"Connection Settings\": \"\",\n  \"Global Settings\": \"\",\n  \"Server info\": \"\",\n  \"About and contribute\": \"\",\n  \"Toggle navigation\": \"\",\n  // body\n  // nav side bar\n  Miscellaneous: \"\",\n  \"Global Statistics\": \"\",\n  About: \"\",\n  Displaying: \"\",\n  of: \"\",\n  downloads: \"\",\n  Language: \"\",\n  // download filters\n  \"Download Filters\": \"\",\n  Running: \"\",\n  Active: \"\",\n  Waiting: \"\",\n  Complete: \"\",\n  Error: \"\",\n  Paused: \"\",\n  Removed: \"\",\n  \"Hide linked meta-data\": \"\",\n  Toggle: \"\",\n  \"Reset filters\": \"\",\n  // download status\n  Verifying: \"\",\n  \"Verify Pending\": \"\",\n  // starred properties\n  \"Quick Access Settings\": \"\",\n  Save: \"\",\n  \"Save settings\": \"\",\n  \"Currently no download in line to display, use the\": \"\",\n  \"download button to start downloading files!\": \"\",\n  Peers: \"\",\n  \"More Info\": \"\",\n  Remove: \"\",\n  \"# of\": \"\",\n  Length: \"\",\n  // modals\n  \"Add Downloads By URIs\": \"\",\n  \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n    \"\",\n  \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n    \"\",\n  \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\": \"\",\n  \"Download settings\": \"\",\n  \"Advanced settings\": \"\",\n  Cancel: \"\",\n  Start: \"\",\n  Choose: \"\",\n  \"Quick Access (shown on the main page)\": \"\",\n  // add torrent modal\n  \"Add Downloads By Torrents\": \"\",\n  \"- Select the torrent from the local filesystem to start the download.\": \"\",\n  \"- You can select multiple torrents to start multiple downloads.\": \"\",\n  \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\": \"\",\n  \"Select Torrents\": \"\",\n  \"Select a Torrent\": \"\",\n  // add metalink modal\n  \"Add Downloads By Metalinks\": \"\",\n  \"Select Metalinks\": \"\",\n  \"- Select the Metalink from the local filesystem to start the download.\": \"\",\n  \"- You can select multiple Metalinks to start multiple downloads.\": \"\",\n  \"Select a Metalink\": \"\",\n  // select file modal\n  \"Choose files to start download for\": \"\",\n  \"Select to download\": \"\",\n  // settings modal\n  \"Aria2 RPC host and port\": \"\",\n  \"Enter the host\": \"\",\n  \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n    \"\",\n  \"Enter the port\": \"\",\n  \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\": \"\",\n  \"Enter the RPC path\": \"\",\n  \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\": \"\",\n  \"SSL/TLS encryption\": \"\",\n  \"Enable SSL/TLS encryption\": \"\",\n  \"Enter the secret token (optional)\": \"\",\n  \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\": \"\",\n  \"Enter the username (optional)\": \"\",\n  \"Enter the Aria2 RPC username (empty if authentication not enabled)\": \"\",\n  \"Enter the password (optional)\": \"\",\n  \"Enter the Aria2 RPC password (empty if authentication not enabled)\": \"\",\n  \"Enter base URL (optional)\": \"\",\n  \"Direct Download\": \"\",\n  \"If supplied, links will be created to enable direct download from the Aria2 server.\": \"\",\n  \"(Requires appropriate webserver to be configured.)\": \"\",\n  \"Save Connection configuration\": \"\",\n  Filter: \"\",\n  // server info modal\n  \"Aria2 server info\": \"\",\n  \"Aria2 Version\": \"\",\n  \"Features Enabled\": \"\",\n  // about modal\n  \"To download the latest version of the project, add issues or to contribute back, head on to\": \"\",\n  \"Or you can open the latest version in the browser through\": \"\",\n  Close: \"\",\n  // labels\n  \"Download status\": \"\",\n  \"Download Speed\": \"\",\n  \"Upload Speed\": \"\",\n  \"Estimated time\": \"\",\n  \"Download Size\": \"\",\n  Downloaded: \"\",\n  Progress: \"\",\n  \"Download Path\": \"\",\n  Uploaded: \"\",\n  \"Download GID\": \"\",\n  \"Number of Pieces\": \"\",\n  \"Piece Length\": \"\",\n\n  //alerts\n  \"The last connection attempt was unsuccessful. Trying another configuration\": \"\",\n  \"Oh Snap!\": \"\",\n  \"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\":\n    \"\",\n  \"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\":\n    \"\",\n  \"Successfully connected to Aria2 through its remote RPC …\": \"\",\n  \"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)\":\n    \"\",\n  \"Trying to connect to aria2 using the new connection configuration\": \"\",\n  // {{name}} refers to the download name, do not modify.\n  \"Remove {{name}} and associated meta-data?\": \"\"\n};\n"
  },
  {
    "path": "src/js/translate/th_TH.js",
    "content": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.th_TH = {\n  // header\n  Search: \"ค้นหา\",\n  // Nav menu\n  Add: \"เพื่ม\",\n  \"By URIs\": \"ด้วยยูอาร์ไอ\",\n  \"By Torrents\": \"ด้วยทอร์เรนต์\",\n  \"By Metalinks\": \"ด้วยเมทาลิงค์\",\n  Manage: \"บริหาร\",\n  \"Pause All\": \"หยุดชั่วคราวหมด\",\n  \"Resume Paused\": \"ไปต่อหมด\",\n  \"Purge Completed\": \"ลบอันเสร็จ\",\n  Settings: \"ตั้งค่า\",\n  \"Connection Settings\": \"ตั้งค่าเชื่อมต่อ\",\n  \"Global Settings\": \"ตั้งค่าทั่วไป\",\n  \"Server info\": \"ข้อมูลเซอร์เวอร์\",\n  \"About and contribute\": \"เกี่ยวกับและช่วย\",\n  \"Toggle navigation\": \"สลับนำทาง\",\n  Language: \"ภาษา\",\n  // body\n  // nav side bar\n  Miscellaneous: \"เบ็ดเตล็ด\",\n  \"Global Statistics\": \"สถิติทั่วไป\",\n  About: \"เกี่ยวกับ\",\n  Displaying: \"แแสดงดาวน์โหลด\",\n  of: \"อันใน\",\n  downloads: \"อันทั้งหมด\",\n  // download filters\n  \"Download Filters\": \"กรองดาวน์โหลด\",\n  Running: \"กำลังทำงาน\",\n  Active: \"ใช้งานอยู่\",\n  Waiting: \"กำลังรอ\",\n  Complete: \"เสร็จ\",\n  Error: \"ผิดพลาด\",\n  Paused: \"หยุดอยู่\",\n  Removed: \"ลบแล้ว\",\n  \"Hide linked meta-data\": \"ซ่อนข้อมูลเมตาที่เชื่อมโยง\",\n  Toggle: \"สลับ\",\n  \"Reset filters\": \"รีเซตตัวกรอง\",\n  // starred properties\n  \"Quick Access Settings\": \"ตั้งค่าอย่างรวดเร็ว\",\n  \"Save settings\": \"บันทึกการตั้งค่า\",\n  \"Currently no download in line to display, use the\":\n    \"ตอนนี้ไม่มีการดาวน์โหลดที่แสดงได้ ก็ใช้ปุ่ม\",\n  \"download button to start downloading files!\": \"ให้เริ่มดาวน์โหลดไฟล์\",\n  Peers: \"พีร์ส\",\n  \"More Info\": \"ข้อมูลเพิ่ม\",\n  Remove: \"ลบ\",\n  \"# of\": \"จำนวน\",\n  Length: \"ความยาว\",\n  // modals\n  \"Add Downloads By URIs\": \"เพิ่มดาวน์โหลดด้วยยูอาร์ไอ\",\n  \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n    \"\",\n  \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n    \"\",\n  \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\": \"\",\n  \"Download settings\": \"ตั้งค่าการดาวน์โหลด\",\n  \"Advanced settings\": \"ตั้งค่าขั้นสูง\",\n  Cancel: \"ยกเลิก\",\n  Start: \"เริ่มต้น\",\n  Choose: \"เลือก\",\n  \"Quick Access (shown on the main page)\": \"ใช้งานอย่างรวดเร็ว (แสดงที่เพจหลัก)\",\n  // add torrent modal\n  \"Add Downloads By Torrents\": \"เพิ่มดาวน์โหลดด้วยทอร์เรนต์\",\n  \"- Select the torrent from the local filesystem to start the download.\": \"\",\n  \"- You can select multiple torrents to start multiple downloads.\": \"\",\n  \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\": \"\",\n  \"Select Torrents\": \"เลือกทอร์เรนต์\",\n  \"Select a Torrent\": \"เลือกทอร์เรนต์\",\n  // add metalink modal\n  \"Add Downloads By Metalinks\": \"เพิ่มดาวน์โหลดด้วยเมทาลิงค์\",\n  \"Select Metalinks\": \"เลือกเมทาลิงค์\",\n  \"- Select the Metalink from the local filesystem to start the download.\": \"\",\n  \"- You can select multiple Metalinks to start multiple downloads.\": \"\",\n  \"Select a Metalink\": \"เลือกเมทาลิงค์\",\n  // select file modal\n  \"Choose files to start download for\": \"เลือกไฟล์ที่จะเริ่มดาวน์โหลด\",\n  \"Select to download\": \"เลือกให้ดาวน์โหลด\",\n  // settings modal\n  \"Aria2 RPC host and port\": \"โฮสต์และพอร์ตของ Aria2 RPC\",\n  \"Enter the host\": \"ป้อนโฮสต์\",\n  \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n    \"\",\n  \"Enter the port\": \"ป้อนพอร์ต\",\n  \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\": \"\",\n  \"Enter the RPC path\": \"ป้อนเส้นทาง RPC\",\n  \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\": \"\",\n  \"SSL/TLS encryption\": \"การเข้ารหัสลับ SSL/TLS\",\n  \"Enable SSL/TLS encryption\": \"เปิดใช้การเข้ารหัสลับ SSL/TLS\",\n  \"Enter the secret token (optional)\": \"ป้อนสัญลักษณ์ความลับ (เป็นตัวเลือก)\",\n  \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\": \"\",\n  \"Enter the username (optional)\": \"ป้อนเชื่อ (เป็นตัวเลือก)\",\n  \"Enter the Aria2 RPC username (empty if authentication not enabled)\": \"\",\n  \"Enter the password (optional)\": \"ป้อนรหัสผ่าน (เป็นตัวเลือก)\",\n  \"Enter the Aria2 RPC password (empty if authentication not enabled)\": \"\",\n  \"Enter base URL (optional)\": \"ป้อน URL หลัก (เป็นตัวเลือก)\",\n  \"Direct Download\": \"ดาวน์โหลดโดยตรง\",\n  \"If supplied, links will be created to enable direct download from the Aria2 server.\": \"\",\n  \"(Requires appropriate webserver to be configured.)\": \"\",\n  \"Save Connection configuration\": \"บันทึกการตั้งค่าการเชื่อมต่อ\",\n  Filter: \"กรอง\",\n  // server info modal\n  \"Aria2 server info\": \"ข้อมูลเซอร์เวอร์ Aria2\",\n  \"Aria2 Version\": \"รุ่น Aria2\",\n  \"Features Enabled\": \"คุณสมบัติที่เปิดใช้งาน\",\n  // about modal\n  \"To download the latest version of the project, add issues or to contribute back, head on to\":\n    \"ให้ดาวน์โหลดรุ่นสุดท้ายของโครงการ เพิ่มปัญหา หรือช่วยเหลือมีส่วนร่วม ไปสู่\",\n  \"Or you can open the latest version in the browser through\":\n    \"หรือเปิดรุ่นสุดท้ายในเบราว์เซอร์โดยใช้\",\n  Close: \"ปิด\"\n};\n"
  },
  {
    "path": "src/js/translate/tr_TR.js",
    "content": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.tr_TR = {\n  // header\n  Search: \"Arama\",\n  // Nav menu\n  Add: \"Ekle\",\n  \"By URIs\": \"URI ile\",\n  \"By Torrents\": \"Torrent ile\",\n  \"By Metalinks\": \"Metalink ile\",\n  Manage: \"Yönet\",\n  \"Pause All\": \"Hepsini Duraklat\",\n  \"Resume Paused\": \"Devam Et\",\n  \"Purge Completed\": \"Temizleme Tamamlandı\",\n  Settings: \"Ayarlar\",\n  \"Connection Settings\": \"Bağlantı Ayarları\",\n  \"Global Settings\": \"Genel Ayarlar\",\n  \"Server info\": \"Sunucu bilgisi\",\n  \"About and contribute\": \"Hakkında ve katkıda bulunanlar\",\n  \"Toggle navigation\": \"Gezinmeyi aç / kapat\",\n  // body\n  // nav side bar\n  Miscellaneous: \"Çeşitli\",\n  \"Global Statistics\": \"Genel İstatistikler\",\n  About: \"Hakkında\",\n  Displaying: \"Gösteriliyor\",\n  of: \" / \",\n  downloads: \"Indirme\",\n  Language: \"Dil\",\n  // download filters\n  \"Download Filters\": \"İndirme Filtreleri\",\n  Running: \"Çalışıyor\",\n  Active: \"Aktif\",\n  Waiting: \"Bekliyor\",\n  Complete: \"Tamamlandı\",\n  Error: \"Hata\",\n  Paused: \"Duraklatıldı\",\n  Removed: \"Silindi\",\n  \"Hide linked meta-data\": \"Bağlı meta verileri gizle\",\n  Toggle: \"aç/kapat\",\n  \"Reset filters\": \"Filtreleri sıfırla\",\n  // starred properties\n  \"Quick Access Settings\": \"Hızlı Erişim Ayarları\",\n  \"Save settings\": \"Ayarları kaydet\",\n  \"Currently no download in line to display, use the\":\n    \"Şu anda görüntülenebilecek bir indirme yok,\",\n  \"download button to start downloading files!\": \"butonu aracılığı ile dosya indirebilirsiniz!\",\n  Peers: \"Peers\",\n  \"More Info\": \"Daha fazla bilgi\",\n  Remove: \"Kaldır\",\n  \"# of\": \"# dan\",\n  Length: \"Uzunluk\",\n  // modals\n  \"Add Downloads By URIs\": \"URI kullanarak indirmelere ekle\",\n  \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n    \"- Ayrı bir satıra her dosya için URI koyarak aynı anda birden fazla dosya indirebilirsiniz.\",\n  \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n    \"- Aynı dosyalar için birden fazla URI (ayna) da ekleyebilirsiniz. Bunu yapmak için URIları bir boşlukla ayırın.\",\n  \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\":\n    \"- Bir URI, HTTP(S)/FTP/BitTorrent-Magnet olabilir.\",\n  \"Download settings\": \"İndirme ayarları\",\n  \"Advanced settings\": \"Gelişmiş Ayarlar\",\n  Cancel: \"İptal et\",\n  Start: \"Başlat\",\n  Choose: \"Seçiniz\",\n  \"Quick Access (shown on the main page)\": \"Hızlı Erişim (ana sayfada gösterilir)\",\n  // add torrent modal\n  \"Add Downloads By Torrents\": \"Torrent kullanarak indirmelere ekle\",\n  \"- Select the torrent from the local filesystem to start the download.\":\n    \"- İndirmeyi başlatmak için yerel dosya sisteminden torrenti seçin.\",\n  \"- You can select multiple torrents to start multiple downloads.\":\n    \"- Birden çok indirmeyi başlatmak için birden çok torrent seçebilirsiniz.\",\n  \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n    \"- BitTorrent-Magnetli bir URL eklemek için, İstek Üzerine Ekle seçeneğini kullanın ve oraya ekleyin.\",\n  \"Select Torrents\": \"Torrentleri seçin\",\n  \"Select a Torrent\": \"Bir Torrent seçin\",\n  // add metalink modal\n  \"Add Downloads By Metalinks\": \"Metalink kullanarak indirmelere ekle\",\n  \"Select Metalinks\": \"Metalinkleri seçin\",\n  \"- Select the Metalink from the local filesystem to start the download.\":\n    \"- İndirmeyi başlatmak için yerel dosya sisteminden Metalinki seçin.\",\n  \"- You can select multiple Metalinks to start multiple downloads.\":\n    \"- Birden fazla yüklemeye başlamak için birden fazla Metalink seçebilirsiniz.\",\n  \"Select a Metalink\": \"Bir Metalink Seç\",\n  // select file modal\n  \"Choose files to start download for\": \"Için indirmeye başlamak için dosyaları seçin\",\n  \"Select to download\": \"Indirmek için seçin\",\n  // settings modal\n  \"Aria2 RPC host and port\": \"Aria2 RPC ana bilgisayar ve bağlantı noktası\",\n  \"Enter the host\": \"Ana bilgisayar(host) girin\",\n  \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n    \"Aria2 için RPC'nin çalıştığı sunucunun IP veya DNS adını girin (varsayılan: localhost)\",\n  \"Enter the port\": \"Bağlantı noktasını gir\",\n  \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n    \"Aria2 için RPC'nin çalıştığı sunucunun bağlantı noktasını girin (varsayılan: 6800)\",\n  \"Enter the RPC path\": \"RPC yolunu girin\",\n  \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n    \"Aria2 RPC bitiş noktası için yolu girin (varsayılan: / jsonrpc)\",\n  \"SSL/TLS encryption\": \"SSL / TLS şifreleme\",\n  \"Enable SSL/TLS encryption\": \"SSL / TLS şifrelemeyi etkinleştir\",\n  \"Enter the secret token (optional)\": \"Gizli simge girin (isteğe bağlı)\",\n  \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n    \"Aria2 RPC gizli simgesini girin (kimlik doğrulama etkin değilse boş bırakın)\",\n  \"Enter the username (optional)\": \"Kullanıcı adını girin (isteğe bağlı)\",\n  \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n    \"Aria2 RPC kullanıcı adını girin (kimlik doğrulama etkin değilse boş bırakın)\",\n  \"Enter the password (optional)\": \"Parolayı girin (isteğe bağlı)\",\n  \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n    \"Aria2 RPC şifresini girin (kimlik doğrulama etkin değilse boş bırakın)\",\n  \"Enter base URL (optional)\": \"Temel URL'yi girin (isteğe bağlı)\",\n  \"Direct Download\": \"Direkt indirme\",\n  \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n    \"Verilen, bağlantıları aria2 sunucudan doğrudan indirmeyi etkinleştirmek için oluşturulur.\",\n  \"(Requires appropriate webserver to be configured.)\":\n    \"(Uygun web sunucusunun yapılandırılmasını gerektirir.)\",\n  \"Save Connection configuration\": \"Bağlantı yapılandırmasını kaydedin\",\n  Filter: \"Filtre\",\n  // server info modal\n  \"Aria2 server info\": \"Aria2 sunucu bilgisi\",\n  \"Aria2 Version\": \"Aria2 Sürümü\",\n  \"Features Enabled\": \"Aşağıdaki Özellikler Etkin\",\n  // about modal\n  \"To download the latest version of the project, add issues or to contribute back, head on to\":\n    \"Projenin en son sürümünü indirmek için sorun ekleyin veya katkıda bulunun;\",\n  \"Or you can open the latest version in the browser through\":\n    \"Veya en son sürümü tarayıcınız aracılığıyla açabilirsiniz.\",\n  Close: \"Kapat\",\n  // lables\n  \"Download status\": \"İndirme durumu\",\n  \"Download Speed\": \"İndirme hızı\",\n  \"Upload Speed\": \"Yükleme hızı\",\n  \"Estimated time\": \"Tahmini süre\",\n  \"Download Size\": \"İndirme Boyutu\",\n  Downloaded: \"İndirildi\",\n  Progress: \"İlerleme\",\n  \"Download Path\": \"İndirme Yolu\",\n  Uploaded: \"Yüklendi\",\n  \"Download GID\": \"GID'yi indirin\",\n  \"Number of Pieces\": \"Parça sayısı\",\n  \"Piece Length\": \"Parça Uzunluğu\",\n  \"Shutdown Server\": \"Sunucuyu Kapat\",\n\n  \"The last connection attempt was unsuccessful. Trying another configuration\":\n    \"Son bağlantı girişimi başarısız oldu. Başka bir yapılandırma deneyin\",\n  \"Oh Snap!\": \"HAydaaaaa!\",\n  \"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\":\n    \"Aria2 RPC sunucusuna bağlanılamadı. 10 saniye içinde tekrar deneyecek. Bağlantı ayarlarını, Ayarlar> Bağlantı Ayarları bölümüne giderek kontrol etmek isteyebilirsiniz.\",\n  \"Successfully connected to Aria2 through its remote RPC …\":\n    \"Uzak RPC aracılığıyla Aria2'ye başarıyla bağlandı ...\",\n  \"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)\":\n    \"Uzak RPC aracılığıyla Aria2'ye başarıyla bağlandı ancak bağlantı hala güvende değil. Tam güvenlik için, Aria2'yi başlatırken (--rpc-secret bayrağını kullanın) ve bir yetkilendirme gizli simgesi eklemeyi deneyin.\",\n  \"Trying to connect to aria2 using the new connection configuration\":\n    \"Yeni bağlantı yapılandırmasını kullanarak aria2'ye bağlanmaya çalışılıyor\"\n};\n"
  },
  {
    "path": "src/js/translate/zh_CN.js",
    "content": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.zh_CN = {\n  // header\n  Search: \"搜索\",\n  // Nav menu\n  Add: \"添加\",\n  \"By URIs\": \"使用链接\",\n  \"By Torrents\": \"使用种子\",\n  \"By Metalinks\": \"使用 Metalink\",\n  Manage: \"管理\",\n  \"Pause All\": \"暂停所有\",\n  \"Resume Paused\": \"恢复下载\",\n  \"Purge Completed\": \"清除已完成\",\n  \"Shutdown Server\": \"关闭服务器\",\n  Settings: \"设置\",\n  \"Connection Settings\": \"连接设置\",\n  \"Global Settings\": \"全局设置\",\n  \"Server info\": \"服务器信息\",\n  \"About and contribute\": \"关于和捐助\",\n  \"Toggle navigation\": \"切换导航\",\n  // body\n  // nav side bar\n  Miscellaneous: \"杂项\",\n  \"Global Statistics\": \"全局统计\",\n  About: \"关于\",\n  Displaying: \"正在显示\",\n  of: \"/\",\n  downloads: \"下载\",\n  Language: \"语言\",\n  // download filters\n  \"Download Filters\": \"下载过滤器\",\n  Running: \"运行中\",\n  Active: \"活动的\",\n  Waiting: \"等待中\",\n  Complete: \"已完成\",\n  Error: \"出错的\",\n  Paused: \"已暂停\",\n  Removed: \"已删除\",\n  \"Hide linked meta-data\": \"隐藏连接的元数据\",\n  Toggle: \"反向选择\",\n  \"Reset filters\": \"重置过滤器\",\n  // download status\n  Verifying: \"正在验证\",\n  \"Verify Pending\": \"等待验证\",\n  // starred properties\n  \"Quick Access Settings\": \"快速访问设置\",\n  Save: \"保存\",\n  \"Save settings\": \"保存设置\",\n  \"Currently no download in line to display, use the\": \"当前没有可显示的下载项，使用\",\n  \"download button to start downloading files!\": \"按钮来开始下载！\",\n  Peers: \"Peers\",\n  \"More Info\": \"更多信息\",\n  Remove: \"删除\",\n  \"# of\": \"块数\",\n  Length: \"块大小\",\n  // modals\n  \"Add Downloads By URIs\": \"使用链接下载\",\n  \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n    \"- 你可以同时添加多个文件下载任务，每行下载一个文件；\",\n  \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n    \"- 你也可以给同一个下载任务添加多个镜像链接，写在一行并用空格分隔每条链接；\",\n  \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\": \"- 链接可以是 HTTP(S)、FTP 和磁力链接。\",\n  \"Download settings\": \"下载设置\",\n  \"Advanced settings\": \"高级设置\",\n  Cancel: \"取消\",\n  Start: \"开始\",\n  Choose: \"选择\",\n  \"Quick Access (shown on the main page)\": \"快速访问（在主页上显示）\",\n  // add torrent modal\n  \"Add Downloads By Torrents\": \"使用种子下载\",\n  \"- Select the torrent from the local filesystem to start the download.\":\n    \"- 从本地文件系统选择种子文件开始下载；\",\n  \"- You can select multiple torrents to start multiple downloads.\":\n    \"- 你可以同时选择多个种子来启动多个下载；\",\n  \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n    \"- 如果要添加磁力链接，请使用添加链接的方式。\",\n  \"Select Torrents\": \"选择种子文件\",\n  \"Select a Torrent\": \"选择种子文件\",\n  // add metalink modal\n  \"Add Downloads By Metalinks\": \"使用 Metalink 下载\",\n  \"Select Metalinks\": \"选择 Metalink 文件\",\n  \"- Select the Metalink from the local filesystem to start the download.\":\n    \"* 从本地文件系统选择 Metalink 文件开始下载；\",\n  \"- You can select multiple Metalinks to start multiple downloads.\":\n    \"* 你可以同时选择多个 Metalink 文件来启动多个下载。\",\n  \"Select a Metalink\": \"选择 Metalink 文件\",\n  // select file modal\n  \"Choose files to start download for\": \"请选择要下载的文件\",\n  \"Select to download\": \"选择以下载\",\n  // settings modal\n  \"Aria2 RPC host and port\": \"Aria2 RPC 主机和端口\",\n  \"Enter the host\": \"主机\",\n  \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n    \"输入 Aria2 RPC 所在服务器的 IP 或域名（默认：localhost）\",\n  \"Enter the port\": \"端口\",\n  \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n    \"输入 Aria2 RPC 端口号（默认：6800）\",\n  \"Enter the RPC path\": \"RPC 路径\",\n  \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n    \"输入 Aria2 RPC 路径（默认：/jsonrpc）\",\n  \"SSL/TLS encryption\": \"SSL/TLS 加密\",\n  \"Enable SSL/TLS encryption\": \"启用 SSL/TLS 加密\",\n  \"Enter the secret token (optional)\": \"密码令牌（可选）\",\n  \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n    \"输入 Aria2 RPC 密码令牌（如果未启用则留空）\",\n  \"Enter the username (optional)\": \"用户名（可选）\",\n  \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n    \"输入 Aria2 RPC 用户名（如果未启用身份验证则留空）\",\n  \"Enter the password (optional)\": \"密码（可选）\",\n  \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n    \"输入 Aria2 RPC 密码（如果未启用身份验证则留空）\",\n  \"Enter base URL (optional)\": \"基本链接地址（可选）\",\n  \"Direct Download\": \"直接下载\",\n  \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n    \"如果指定该选项，将会创建可以直接从 Aria2 服务器上下载文件的链接。\",\n  \"(Requires appropriate webserver to be configured.)\": \"（需要 WEB 服务器配置正确）\",\n  \"Save Connection configuration\": \"保存连接配置\",\n  Filter: \"过滤\",\n  // server info modal\n  \"Aria2 server info\": \"Aria2 服务器信息\",\n  \"Aria2 Version\": \"Aria2 版本\",\n  \"Features Enabled\": \"已启用功能\",\n  // about modal\n  \"To download the latest version of the project, add issues or to contribute back, head on to\":\n    \"下载最新版本、提交问题或捐助，请访问\",\n  \"Or you can open the latest version in the browser through\": \"直接在浏览器中使用最新版本，请访问\",\n  Close: \"关闭\",\n  // labels\n  \"Download status\": \"当前下载状态\",\n  \"Download Speed\": \"当前下载速度\",\n  \"Upload Speed\": \"当前上传速度\",\n  \"Estimated time\": \"预计剩余时间\",\n  \"Download Size\": \"下载总大小\",\n  Downloaded: \"已下载大小\",\n  Progress: \"当前下载进度\",\n  \"Download Path\": \"文件下载路径\",\n  Uploaded: \"已上传大小\",\n  \"Download GID\": \"下载的 GID\",\n  \"Number of Pieces\": \"文件块数量\",\n  \"Piece Length\": \"每块大小\",\n\n  //alerts\n  \"The last connection attempt was unsuccessful. Trying another configuration\":\n    \"上次连接请求未成功，正在尝试使用另一个配置\",\n  \"Oh Snap!\": \"糟糕！\",\n  \"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\":\n    \"无法连接到 Aria2 RPC 服务器，将在10秒后重试。您可能需要检查连接设置，请前往 设置 > 连接设置\",\n  \"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\":\n    \"连接到 Aria2 RPC 服务器时认证失败，将在10秒后重试。您可能需要确认您的身份验证信息，请前往 设置 > 连接设置\",\n  \"Successfully connected to Aria2 through its remote RPC …\": \"通过 RPC 连接到 Aria2 成功！\",\n  \"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)\":\n    \"通过 RPC 连接到 Aria2 成功，但是连接并不安全。要想使用安全连接，尝试在启动 Aria2 时添加一个授权密码令牌（通过 --rpc-secret 参数）\",\n  \"Trying to connect to aria2 using the new connection configuration\":\n    \"正在尝试使用新的连接配置来连接到 Aria2 ……\",\n  \"Remove {{name}} and associated meta-data?\": \"是否删除 {{name}} 和关联的元数据？\"\n};\n"
  },
  {
    "path": "src/js/translate/zh_TW.js",
    "content": "if (typeof translations == \"undefined\") {\n  translations = {};\n}\n\ntranslations.zh_TW = {\n  // header\n  Search: \"搜尋\",\n  // Nav menu\n  Add: \"新增\",\n  \"By URIs\": \"使用連結\",\n  \"By Torrents\": \"使用種子\",\n  \"By Metalinks\": \"使用 Metalink\",\n  Manage: \"管理\",\n  \"Pause All\": \"暫停所有\",\n  \"Resume Paused\": \"恢復下載\",\n  \"Purge Completed\": \"清除已完成\",\n  \"Shutdown Server\": \"關閉伺服器\",\n  Settings: \"設定\",\n  \"Connection Settings\": \"連線設定\",\n  \"Global Settings\": \"全域性設定\",\n  \"Server info\": \"伺服器資訊\",\n  \"About and contribute\": \"關於和捐助\",\n  \"Toggle navigation\": \"切換導航\",\n  // body\n  // nav side bar\n  Miscellaneous: \"雜項\",\n  \"Global Statistics\": \"全域性統計\",\n  About: \"關於\",\n  Displaying: \"正在顯示\",\n  of: \"/\",\n  downloads: \"下載\",\n  Language: \"語言\",\n  // download filters\n  \"Download Filters\": \"下載過濾器\",\n  Running: \"執行中\",\n  Active: \"活動的\",\n  Waiting: \"等待中\",\n  Complete: \"已完成\",\n  Error: \"出錯的\",\n  Paused: \"已暫停\",\n  Removed: \"已刪除\",\n  \"Hide linked meta-data\": \"隱藏連線的元資料\",\n  Toggle: \"反向選擇\",\n  \"Reset filters\": \"重置過濾器\",\n  // download status\n  Verifying: \"正在驗證\",\n  \"Verify Pending\": \"等待驗證\",\n  // starred properties\n  \"Quick Access Settings\": \"快速訪問設定\",\n  Save: \"儲存\",\n  \"Save settings\": \"儲存設定\",\n  \"Currently no download in line to display, use the\": \"當前沒有可顯示的下載項，使用\",\n  \"download button to start downloading files!\": \"按鈕來開始下載！\",\n  Peers: \"Peers\",\n  \"More Info\": \"更多資訊\",\n  Remove: \"刪除\",\n  \"# of\": \"塊數\",\n  Length: \"塊大小\",\n  // modals\n  \"Add Downloads By URIs\": \"使用連結下載\",\n  \"- You can add multiple downloads (files) at the same time by putting URIs for each file on a separate line.\":\n    \"- 你可以同時新增多個檔案下載任務，每行下載一個檔案；\",\n  \"- You can also add multiple URIs (mirrors) for the *same* file. To do this, separate the URIs by a space.\":\n    \"- 你也可以給同一個下載任務新增多個映象連結，寫在一行並用空格分隔每條連結；\",\n  \"- A URI can be HTTP(S)/FTP/BitTorrent-Magnet.\": \"- 連結可以是 HTTP(S)、FTP 和磁力連結。\",\n  \"Download settings\": \"下載設定\",\n  \"Advanced settings\": \"高階設定\",\n  Cancel: \"取消\",\n  Start: \"開始\",\n  Choose: \"選擇\",\n  \"Quick Access (shown on the main page)\": \"快速訪問（在主頁上顯示）\",\n  // add torrent modal\n  \"Add Downloads By Torrents\": \"使用種子下載\",\n  \"- Select the torrent from the local filesystem to start the download.\":\n    \"- 從本地檔案系統選擇種子檔案開始下載；\",\n  \"- You can select multiple torrents to start multiple downloads.\":\n    \"- 你可以同時選擇多個種子來啟動多個下載；\",\n  \"- To add a BitTorrent-Magnet URL, use the Add By URI option and add it there.\":\n    \"- 如果要新增磁力連結，請使用新增連結的方式。\",\n  \"Select Torrents\": \"選擇種子檔案\",\n  \"Select a Torrent\": \"選擇種子檔案\",\n  // add metalink modal\n  \"Add Downloads By Metalinks\": \"使用 Metalink 下載\",\n  \"Select Metalinks\": \"選擇 Metalink 檔案\",\n  \"- Select the Metalink from the local filesystem to start the download.\":\n    \"* 從本地檔案系統選擇 Metalink 檔案開始下載；\",\n  \"- You can select multiple Metalinks to start multiple downloads.\":\n    \"* 你可以同時選擇多個 Metalink 檔案來啟動多個下載。\",\n  \"Select a Metalink\": \"選擇 Metalink 檔案\",\n  // select file modal\n  \"Choose files to start download for\": \"請選擇要下載的檔案\",\n  \"Select to download\": \"選擇以下載\",\n  // settings modal\n  \"Aria2 RPC host and port\": \"Aria2 RPC 主機和埠\",\n  \"Enter the host\": \"主機\",\n  \"Enter the IP or DNS name of the server on which the RPC for Aria2 is running (default: localhost)\":\n    \"輸入 Aria2 RPC 所在伺服器的 IP 或域名（預設：localhost）\",\n  \"Enter the port\": \"埠號\",\n  \"Enter the port of the server on which the RPC for Aria2 is running (default: 6800)\":\n    \"輸入 Aria2 RPC 埠號（預設：6800）\",\n  \"Enter the RPC path\": \"RPC 路徑\",\n  \"Enter the path for the Aria2 RPC endpoint (default: /jsonrpc)\":\n    \"輸入 Aria2 RPC 路徑（預設：/jsonrpc）\",\n  \"SSL/TLS encryption\": \"SSL/TLS 加密\",\n  \"Enable SSL/TLS encryption\": \"啟用 SSL/TLS 加密\",\n  \"Enter the secret token (optional)\": \"密碼令牌（可選）\",\n  \"Enter the Aria2 RPC secret token (leave empty if authentication is not enabled)\":\n    \"輸入 Aria2 RPC 密碼令牌（如果未啟用則留空）\",\n  \"Enter the username (optional)\": \"使用者名稱（可選）\",\n  \"Enter the Aria2 RPC username (empty if authentication not enabled)\":\n    \"輸入 Aria2 RPC 使用者名稱（如果未啟用身份驗證則留空）\",\n  \"Enter the password (optional)\": \"密碼（可選）\",\n  \"Enter the Aria2 RPC password (empty if authentication not enabled)\":\n    \"輸入 Aria2 RPC 密碼（如果未啟用身份驗證則留空）\",\n  \"Enter base URL (optional)\": \"基本連結地址（可選）\",\n  \"Direct Download\": \"直接下載\",\n  \"If supplied, links will be created to enable direct download from the Aria2 server.\":\n    \"如果指定該選項，將會建立可以直接從 Aria2 伺服器上下載檔案的連結。\",\n  \"(Requires appropriate webserver to be configured.)\": \"（需要 WEB 伺服器配置正確）\",\n  \"Save Connection configuration\": \"儲存連線配置\",\n  Filter: \"過濾\",\n  // server info modal\n  \"Aria2 server info\": \"Aria2 伺服器資訊\",\n  \"Aria2 Version\": \"Aria2 版本\",\n  \"Features Enabled\": \"已啟用功能\",\n  // about modal\n  \"To download the latest version of the project, add issues or to contribute back, head on to\":\n    \"下載最新版本、提交問題或捐助，請訪問\",\n  \"Or you can open the latest version in the browser through\": \"直接在瀏覽器中使用最新版本，請訪問\",\n  Close: \"關閉\",\n  // labels\n  \"Download status\": \"當前下載狀態\",\n  \"Download Speed\": \"當前下載速度\",\n  \"Upload Speed\": \"當前上傳速度\",\n  \"Estimated time\": \"預計剩餘時間\",\n  \"Download Size\": \"下載總大小\",\n  Downloaded: \"已下載大小\",\n  Progress: \"當前下載進度\",\n  \"Download Path\": \"檔案下載路徑\",\n  Uploaded: \"已上傳大小\",\n  \"Download GID\": \"下載的 GID\",\n  \"Number of Pieces\": \"檔案塊數量\",\n  \"Piece Length\": \"每塊大小\",\n\n  //alerts\n  \"The last connection attempt was unsuccessful. Trying another configuration\":\n    \"上次連線請求未成功，正在嘗試使用另一個配置\",\n  \"Oh Snap!\": \"糟糕！\",\n  \"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\":\n    \"無法連線到 Aria2 RPC 伺服器，將在10秒後重試。您可能需要檢查連線設定，請前往 設定 > 連線設定\",\n  \"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\":\n    \"連線到 Aria2 RPC 伺服器時認證失敗，將在10秒後重試。您可能需要確認您的身份驗證資訊，請前往 設定 > 連線設定\",\n  \"Successfully connected to Aria2 through its remote RPC …\": \"通過 RPC 連線到 Aria2 成功！\",\n  \"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)\":\n    \"通過 RPC 連線到 Aria2 成功，但是連線並不安全。要想使用安全連線，嘗試在啟動 Aria2 時新增一個授權密碼令牌（通過 --rpc-secret 引數）\",\n  \"Trying to connect to aria2 using the new connection configuration\":\n    \"正在嘗試使用新的連線配置來連線到 Aria2 ……\",\n  \"Remove {{name}} and associated meta-data?\": \"是否刪除 {{name}} 和關聯的元資料？\"\n};\n"
  },
  {
    "path": "src/scss/_bootstrap-custom.scss",
    "content": "// This is a customised bootstrap v3.3.7 file for webui-aria2\n// Extra components which are not being used are commented\n\n// Core variables and mixins\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/variables\";\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/mixins\";\n\n// Reset and dependencies\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/normalize\";\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/print\";\n//@import \"~bootstrap-sass/assets/stylesheets/bootstrap/glyphicons\";\n\n// Core CSS\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/scaffolding\";\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/type\";\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/code\";\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/grid\";\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/tables\";\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/forms\";\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/buttons\";\n\n// Components\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/component-animations\";\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/dropdowns\";\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/button-groups\";\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/input-groups\";\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/navs\";\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/navbar\";\n//@import \"~bootstrap-sass/assets/stylesheets/bootstrap/breadcrumbs\";\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/pagination\";\n//@import \"~bootstrap-sass/assets/stylesheets/bootstrap/pager\";\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/labels\";\n//@import \"~bootstrap-sass/assets/stylesheets/bootstrap/badges\";\n//@import \"~bootstrap-sass/assets/stylesheets/bootstrap/jumbotron\";\n//@import \"~bootstrap-sass/assets/stylesheets/bootstrap/thumbnails\";\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/alerts\";\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/progress-bars\";\n//@import \"~bootstrap-sass/assets/stylesheets/bootstrap/media\";\n//@import \"~bootstrap-sass/assets/stylesheets/bootstrap/list-group\";\n//@import \"~bootstrap-sass/assets/stylesheets/bootstrap/panels\";\n//@import \"~bootstrap-sass/assets/stylesheets/bootstrap/responsive-embed\";\n//@import \"~bootstrap-sass/assets/stylesheets/bootstrap/wells\";\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/close\";\n\n// Components w/ JavaScript\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/modals\";\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/tooltip\";\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/popovers\";\n//@import \"~bootstrap-sass/assets/stylesheets/bootstrap/carousel\";\n\n// Utility classes\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/utilities\";\n@import \"~bootstrap-sass/assets/stylesheets/bootstrap/responsive-utilities\";\n"
  },
  {
    "path": "src/scss/_download.scss",
    "content": ".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;\n}\n\n.download .title {\n  font-size: 1.2em;\n  padding: 5px 0;\n}\n\n.download .progress {\n  background-color: #fff;\n  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);\n  width: 100%;\n  margin: 0;\n  padding: 0;\n}\n\n.download .progress-bar {\n  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);\n}\n\n.download-name {\n  font-weight: bold;\n  font-size: small;\n  word-wrap: break-word;\n}\n\n.active-download,\n.waiting-download,\n.stopped-download,\n.download {\n  cursor: pointer;\n  width: 100%;\n  padding: 4px 5px;\n  background-color: #fff;\n  margin-bottom: 20px;\n  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14),\n    0 2px 1px -1px rgba(0, 0, 0, 0.12);\n}\n\n/* fix table  layout to break words */\n@media (max-width: 767px) {\n  .active-download,\n  .waiting-download,\n  .stopped-download,\n  .download {\n    table-layout: fixed;\n  }\n}\n\n.download-graph {\n  margin: 0.5em 30px 0.5em 0;\n}\n\n@media (min-width: 1200px) {\n  .download-graph {\n    width: 50%;\n  }\n}\n\n@media (min-width: 767px) and (max-width: 1200px) {\n  .download-graph {\n    width: 60%;\n  }\n}\n\n@media (max-width: 767px) {\n  .download-graph {\n    width: 100%;\n  }\n}\n\n.large-graph {\n  width: 66%;\n}\n\n.stats {\n  margin: 0 auto;\n  padding: 0;\n}\n\n.stats li {\n  display: inline-block;\n  margin-bottom: 2px;\n  padding: 0.75ex;\n  min-width: 20ex;\n  text-align: center;\n}\n\n.download-item {\n  margin: 0;\n  padding: 0.5ex 6px 0.5ex;\n}\n\n.download-controls .btn-group {\n  float: right;\n}\n\n.download-controls > .btn-group {\n  margin: 5px 5px 5px 0;\n}\n\n.download-controls .btn-group .btn {\n  height: 100%;\n}\n\n.download-controls .btn-group .btn span {\n  font-size: 14px;\n  color: gray;\n}\n\n.download-detail h4 {\n  margin-left: 10px;\n}\n\n.download-files {\n  margin: 0;\n}\n\n.download-files li {\n  display: inline-block;\n  padding: 0.8ex;\n  max-width: 100%;\n  margin: 0 6px 6px 0;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.download-files a {\n  color: #fff;\n}\n\n.download-empty {\n  padding: 40px;\n  background-color: #fff;\n  border-radius: 2px;\n  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14),\n    0 2px 1px -1px rgba(0, 0, 0, 0.12);\n}\n"
  },
  {
    "path": "src/scss/_flag-icon-css-custom.scss",
    "content": "$flag-icon-css-path: \"~flag-icon-css/flags\";\n\n@import \"~flag-icon-css/sass/variables\";\n@import \"~flag-icon-css/sass/flag-icon-base\";\n\n// Include only the required flags\n@include flag-icon(us);\n@include flag-icon(th);\n@include flag-icon(nl);\n@include flag-icon(cn);\n@include flag-icon(tw);\n@include flag-icon(pl);\n@include flag-icon(fr);\n@include flag-icon(de);\n@include flag-icon(es);\n@include flag-icon(ru);\n@include flag-icon(it);\n@include flag-icon(tr);\n@include flag-icon(cz);\n@include flag-icon(ir);\n@include flag-icon(id);\n@include flag-icon(br);\n"
  },
  {
    "path": "src/scss/_icon.scss",
    "content": ".icon {\n  display: inline-block;\n  width: 1em;\n  height: 1em;\n  stroke-width: 0;\n  stroke: currentColor;\n  fill: currentColor;\n  vertical-align: sub;\n  margin-bottom: 0.1em;\n  &.icon-fw {\n    width: 1.28571429em;\n  }\n}\n\n.rotate-90 {\n  transform: rotate(-90deg);\n}\n"
  },
  {
    "path": "src/scss/_modals.scss",
    "content": ".modal-body textarea {\n  width: 100%;\n}\n\n.modal-advanced-title {\n  font-weight: bold;\n  margin-bottom: 0;\n  background-color: rgb(245, 245, 245);\n  border: 1px solid rgba(0, 0, 0, 0.05);\n  border-bottom: 0;\n  border-radius: 4px 4px 0 0;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n  cursor: pointer;\n  padding: 5px 15px;\n}\n\n.modal-advanced-options {\n  /*width: 100%;\n  margin-bottom: 10px;*/\n  margin-top: 0;\n  margin-bottom: 2px;\n  background-color: rgb(245, 245, 245);\n  border: 1px solid rgba(0, 0, 0, 0.05);\n  border-top: 0;\n  border-radius: 0 0 4px 4px;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n\n.modal-form-input-verylarge {\n  width: 95%;\n}\n\n.modal-form-input-number {\n  width: 80px;\n}\n\n.selectFiles div .control-label {\n  font-weight: normal;\n  margin-left: 30px;\n}\n\n.selectFiles div .controls {\n  margin-left: 30px;\n}\n\n.selectFiles div.recursivedir {\n  width: 100%;\n}\n"
  },
  {
    "path": "src/scss/_style.scss",
    "content": "body {\n  font-family: \"Lato\", sans-serif;\n  overflow-y: scroll;\n  background-color: #f5f5f5;\n  padding-bottom: 5em;\n}\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  vertical-align: middle;\n  position: relative;\n}\n\n.pagination ul > li:not(.disabled) {\n  cursor: pointer;\n}\n\n.pagination ul > li.active > a {\n  color: #fff;\n  background-color: #428bca;\n}\n\n.label-active,\n.badge-active,\n.progress-active .bar {\n  background-color: #62c462;\n}\n\n.progress-success .bar {\n  background-color: #468847 !important;\n}\n\n.alerts {\n  position: fixed;\n  right: 6px;\n  z-index: 900;\n  width: 40%;\n}\n\n.alert {\n  float: right;\n  clear: right;\n  margin-bottom: 5px;\n  margin-top: 5px;\n}\n\n/* fix modal overflow on low resolutions */\n.modal {\n  position: absolute;\n}\n\n#global-graph {\n  width: 100%;\n}\n\n@media (min-width: 767px) and (max-width: 992px) {\n  #global-graph {\n    width: 80%;\n  }\n}\n\n#download-filter {\n  margin: 0;\n  height: auto;\n}\n\n#filters label {\n  display: inline-block;\n  white-space: nowrap;\n}\n\n.nav-header {\n  display: block;\n  padding: 3px 0;\n  font-size: 11px;\n  font-weight: bold;\n  line-height: 20px;\n  color: #999;\n  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);\n  text-transform: uppercase;\n}\n\n.main-navbar {\n  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1);\n  background-color: #00897b;\n  border-color: #00897b;\n}\n\n.main-navbar .navbar-brand {\n  color: #fff;\n}\n\n.main-navbar .nav > li > a {\n  color: #fff;\n  transition: background-color 0.3s ease-in-out;\n}\n\n.main-navbar .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n\n.main-navbar .nav .open > a,\n.main-navbar .nav .open > a:hover,\n.main-navbar .nav .open > a:focus,\n.main-navbar .nav > li > a:focus,\n.main-navbar .nav > li > a:hover {\n  background-color: rgba(0, 0, 0, 0.2);\n}\n\n.sidebar-nav {\n  margin-bottom: 30px;\n  background-color: #fff;\n  padding: 10px 20px 20px;\n  border-radius: 2px;\n  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14),\n    0 2px 1px -1px rgba(0, 0, 0, 0.12);\n}\n\n.filter-input-group {\n  position: relative;\n  margin-bottom: 30px;\n}\n\n.filter-input-group > .clear-button {\n  position: absolute;\n  right: 25px;\n  top: 6px;\n  cursor: pointer;\n}\n"
  },
  {
    "path": "src/scss/app.scss",
    "content": "@charset 'utf-8';\n\n// Vendor Styles\n@import \"bootstrap-custom\";\n@import \"flag-icon-css-custom\";\n\n// Application Styles\n@import \"icon\";\n@import \"style\";\n@import \"download\";\n@import \"modals\";\n"
  },
  {
    "path": "static.json",
    "content": "{\n  \"root\": \"./docs\",\n  \"routes\": {\n    \"/**\": \"index.html\"\n  }\n}\n"
  },
  {
    "path": "webpack.config.js",
    "content": "const path = require(\"path\");\nconst webpack = require(\"webpack\");\n\nconst MiniCssExtractPlugin = require(\"mini-css-extract-plugin\");\nconst HtmlWebpackPlugin = require(\"html-webpack-plugin\");\nconst CleanWebpackPlugin = require(\"clean-webpack-plugin\");\nconst WorkboxPlugin = require(\"workbox-webpack-plugin\");\n\nconst BUILD_DIR = path.join(__dirname, \"docs\");\nconst APP_DIR = path.join(__dirname, \"src\", \"js\");\n\nconst config = {\n  entry: {\n    app: APP_DIR + \"/app.js\"\n  },\n  module: {\n    rules: [\n      {\n        test: /\\.scss$/,\n        use: [MiniCssExtractPlugin.loader, \"css-loader\", \"postcss-loader\", \"sass-loader\"]\n      },\n      {\n        test: /\\.css$/,\n        use: [MiniCssExtractPlugin.loader, \"css-loader\", \"postcss-loader\"]\n      },\n      {\n        test: /\\.svg$/,\n        use: [\n          {\n            loader: \"file-loader\",\n            options: {\n              name: \"[name].[ext]\",\n              outputPath: \"flags/\"\n            }\n          }\n        ]\n      }\n    ]\n  },\n  output: {\n    path: BUILD_DIR,\n    filename: \"[name].js\"\n  },\n  plugins: [\n    new CleanWebpackPlugin([\"docs\"]),\n    new webpack.ProvidePlugin({\n      \"window.jQuery\": \"jquery\",\n      jQuery: \"jquery\",\n      $: \"jquery\"\n    }),\n    new HtmlWebpackPlugin({\n      template: \"src/index-template.html\",\n      inject: \"head\"\n    }),\n    new MiniCssExtractPlugin({\n      filename: \"[name].css\"\n    }),\n    new WorkboxPlugin.GenerateSW()\n  ],\n  optimization: {\n    splitChunks: {\n      cacheGroups: {\n        commons: { test: /[\\\\/]node_modules[\\\\/]/, name: \"vendor\", chunks: \"all\" }\n      }\n    }\n  },\n  resolve: {\n    modules: [\n      path.resolve(\"./\"),\n      path.resolve(\"./node_modules\"),\n      path.resolve(\"./src/js\"),\n      path.resolve(\"./src/scss\")\n    ]\n  }\n};\n\nmodule.exports = config;\n"
  },
  {
    "path": "webui-aria2.spec",
    "content": "Name:           webui-aria2\nVersion:        master\nRelease:        1%{?dist}\nSummary:        Web interface for aria2\n\nLicense:        MIT License\nURL:            https://codeload.github.com/ziahamza/webui-aria2\nSource0:        https://codeload.github.com/ziahamza/%{name}/tar.gz/%{name}-%{version}.tar.gz\n\n#Requires:       aria2\n\n%description\nThe aim for this project is to create the worlds best and hottest interface to interact with aria2.\naria2 is the worlds best file downloader, but sometimes the command line brings more power than necessary.\nThe project was initially created as part of the GSOC scheme, however it has rapidly grown and changed with\ntremendous support and feedback from the aria2 community\n\n#%prep\n#%setup -q -n %{name}-%{version}\n\n#%build\n#%configure\n#make %{?_smp_mflags}\n\n%install\ntar xvzf %{SOURCE0}\n#\nmkdir -p $RPM_BUILD_ROOT/usr/share/%{name}\ncp -R %{name}-%{version}/css $RPM_BUILD_ROOT/usr/share/%{name}/\ncp -R %{name}-%{version}/flags $RPM_BUILD_ROOT/usr/share/%{name}/\ncp -R %{name}-%{version}/fonts $RPM_BUILD_ROOT/usr/share/%{name}/\ncp -R %{name}-%{version}/img $RPM_BUILD_ROOT/usr/share/%{name}/\ncp -R %{name}-%{version}/js $RPM_BUILD_ROOT/usr/share/%{name}/\ncp %{name}-%{version}/configuration.js $RPM_BUILD_ROOT/usr/share/%{name}/\ncp %{name}-%{version}/favicon.ico $RPM_BUILD_ROOT/usr/share/%{name}/\ncp %{name}-%{version}/index.html $RPM_BUILD_ROOT/usr/share/%{name}/\ncp %{name}-%{version}/LICENSE $RPM_BUILD_ROOT/usr/share/%{name}/\n#\nfind $RPM_BUILD_ROOT/usr/share/%{name} -type d | xargs chmod 755\nfind $RPM_BUILD_ROOT/usr/share/%{name} -type f | xargs chmod 644\nmkdir -p $RPM_BUILD_ROOT/usr/bin\ncat > $RPM_BUILD_ROOT/usr/bin/%{name} <<HERE\n#!/usr/bin/env python\n\nimport os\nimport posixpath\nimport urllib\nimport BaseHTTPServer\nfrom SimpleHTTPServer import SimpleHTTPRequestHandler\n\n# modify this to add additional routes\nROUTES = (\n##  [url_prefix ,  directory_path]\n    ['',       '/usr/share/webui-aria2'],  # empty string for the 'default' match\n#   ['/media', '/var/www/media']\n)\n\nclass RequestHandler(SimpleHTTPRequestHandler):\n\n    def translate_path(self, path):\n        \"\"\"translate path given routes\"\"\"\n\n        # set default root to cwd\n        root = os.getcwd()\n\n        # look up routes and set root directory accordingly\n        for pattern, rootdir in ROUTES:\n            if path.startswith(pattern):\n                # found match!\n                path = path[len(pattern):]  # consume path up to pattern len\n                root = rootdir\n                break\n\n        # normalize path and prepend root directory\n        path = path.split('?',1)[0]\n        path = path.split('#',1)[0]\n        path = posixpath.normpath(urllib.unquote(path))\n        words = path.split('/')\n        words = filter(None, words)\n\n        path = root\n        for word in words:\n            drive, word = os.path.splitdrive(word)\n            head, word = os.path.split(word)\n            if word in (os.curdir, os.pardir):\n                continue\n            path = os.path.join(path, word)\n\n        return path\n\nif __name__ == '__main__':\n    BaseHTTPServer.test(RequestHandler, BaseHTTPServer.HTTPServer)\nHERE\n#\nmkdir -p $RPM_BUILD_ROOT/usr/lib/systemd/system/\ncat > $RPM_BUILD_ROOT/usr/lib/systemd/system/%{name}.service <<HERE\n[Unit]\nDescription=WebUI-Aria2\nAfter=network.target\nAfter=aria2.service\n\n[Service]\nType=simple\nUser=nobody\nGroup=nobody\nExecStart=/usr/bin/webui-aria2\n\n[Install]\nWantedBy=multi-user.target\nHERE\n#\nmkdir -p $RPM_BUILD_ROOT/etc/firewalld/services\ncat > $RPM_BUILD_ROOT/etc/firewalld/services/%{name}.xml <<HERE\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<service>\n <short>WebUI-Aria2</short>\n <description>WebUI for Aria2</description>\n <port protocol=\"tcp\" port=\"8000\"/>\n</service>\nHERE\n#\n%files\n%defattr(-,nobody,nobody)\n#\n%dir %attr(755,root,root) /usr/share/%{name}\n#\n%attr(-,nobody,nobody) /usr/share/%{name}/css\n%attr(-,nobody,nobody) /usr/share/%{name}/flags\n%attr(-,nobody,nobody) /usr/share/%{name}/fonts\n%attr(-,nobody,nobody) /usr/share/%{name}/img\n%attr(-,nobody,nobody) /usr/share/%{name}/js\n%attr(-,nobody,nobody) /usr/share/%{name}/LICENSE\n%attr(-,nobody,nobody) /usr/share/%{name}/configuration.js\n%attr(-,nobody,nobody) /usr/share/%{name}/favicon.ico\n%attr(-,nobody,nobody) /usr/share/%{name}/index.html\n#\n%attr(644,root,root) /usr/lib/systemd/system/%{name}.service\n%attr(644,root,root) /etc/firewalld/services/%{name}.xml\n%attr(755,root,root) /usr/bin/%{name}\n#\n%changelog\n* Sun Feb 08 2016 Aleksandr Chernyshev <wmlex@yandex.ru> - pull request #183\n- Initial release.\n"
  }
]