From a99bd0d60256d4e690b3e967a9f883b01b682390 Mon Sep 17 00:00:00 2001 From: Paul Aschmann Date: Sat, 24 Aug 2019 09:31:56 -0400 Subject: [PATCH 01/12] Initial commit of v3 (WIP) --- Dockerfile | 39 - Dockerfile_slim | 14 - README.md | 94 +- contributing.md | 0 docker-compose.yml | 71 - docs/api.yaml | 61 - license | 0 package-lock.json | 1985 ++++++++++------- package.json | 46 +- resources/database/dbcreate.sql | 542 ----- .../migration/V0.9.0__Database_creation.sql | 332 --- .../V1.0.0__application_version_1.sql | 108 - .../migration/V1.0.1__Updates_until_2.1.sql | 66 - .../V2.1.0___Update_for_version_2.1.sql | 79 - .../V2.3.0__Fix_missing_constraints.sql | 17 - .../migration/V2.3.1__schema_migration.sql | 62 - .../V2.3.2__add_log_correspondance_table.sql | 65 - .../V2.3.3__update_model_helpers_schema.sql | 17 - resources/insights.png | Bin 99422 -> 0 bytes resources/rasa_ui_1.png | Bin 357064 -> 0 bytes resources/rasa_ui_2.png | Bin 241423 -> 0 bytes resources/rasa_ui_concept.png | Bin 30514 -> 0 bytes resources/ui_architecture.png | Bin 52974 -> 0 bytes server/data/db.json | 385 ++++ server/data/db.sqlite3 | Bin 0 -> 73728 bytes server/db/actions.js | 0 server/db/agents.js | 183 +- server/db/db.js | 63 +- server/db/entities.js | 106 +- server/db/expressions.js | 105 +- server/db/intents.js | 116 +- server/db/logs.js | 135 +- server/db/messages.js | 0 server/db/parameters.js | 152 +- server/db/regex.js | 86 +- server/db/responses.js | 109 +- server/db/settings.js | 43 +- server/db/synonyms.js | 73 +- server/db/variants.js | 125 +- server/routes/auth.js | 19 +- server/routes/health.js | 7 - server/routes/index.js | 51 +- server/routes/middleware.js | 96 - server/routes/mw_routes/core_router.js | 120 - server/routes/mw_routes/nlu_router.js | 428 +--- server/routes/rasa_events.js | 347 --- server/server.js | 271 +-- server/util/logger.js | 2 - web/src/app/app.js | 103 +- web/src/app/components/actions/actions.html | 0 web/src/app/components/actions/actions.js | 0 web/src/app/components/agents/add_agent.html | 52 +- web/src/app/components/agents/add_agent.js | 0 web/src/app/components/agents/agents.html | 93 +- web/src/app/components/agents/agents.js | 12 +- web/src/app/components/agents/edit_agent.html | 233 +- web/src/app/components/agents/edit_agent.js | 37 +- .../app/components/agents/import_agent.html | 0 web/src/app/components/agents/import_agent.js | 0 .../components/conversation/conversation.css | 0 .../components/conversation/conversation.html | 0 .../components/conversation/conversation.js | 0 .../conversation/directives/compile.js | 0 .../conversation/directives/edit-entity.js | 0 .../directives/ensure-element-in-view.js | 0 .../conversation/filters/no-underscore.js | 0 .../conversation/modal/edit_entity.html | 0 .../conversation/modal/edit_entity.js | 0 .../conversation/modal/edit_intent.html | 0 .../conversation/modal/edit_intent.js | 0 .../components/conversation/modal/modal.css | 0 .../app/components/dashboard/dashboard.html | 78 +- web/src/app/components/dashboard/dashboard.js | 37 +- web/src/app/components/dashboard/widgets.js | 120 +- .../app/components/entities/add_entity.html | 11 +- web/src/app/components/entities/add_entity.js | 10 +- .../{entity.html => edit_entity.html} | 29 +- .../entities/{entity.js => edit_entity.js} | 0 web/src/app/components/entities/entities.html | 0 web/src/app/components/entities/entities.js | 0 web/src/app/components/history/history.css | 0 web/src/app/components/history/history.html | 0 web/src/app/components/history/history.js | 0 web/src/app/components/insights/insights.html | 0 web/src/app/components/insights/insights.js | 0 .../app/components/intents/add_intent.html | 0 web/src/app/components/intents/add_intent.js | 0 .../app/components/intents/edit_intent.html | 68 +- web/src/app/components/intents/edit_intent.js | 95 +- web/src/app/components/logs/logs.html | 2 + web/src/app/components/logs/logs.js | 0 .../app/components/middleware/middleware.js | 0 .../components/rasaconfig/rasa_config.html | 0 .../app/components/rasaconfig/rasa_config.js | 4 +- web/src/app/components/regex/add_regex.html | 5 +- web/src/app/components/regex/add_regex.js | 8 +- web/src/app/components/regex/edit_regex.html | 0 web/src/app/components/regex/edit_regex.js | 0 web/src/app/components/settings/settings.html | 24 +- web/src/app/components/settings/settings.js | 2 +- web/src/app/components/stories/stories.html | 4 +- web/src/app/components/stories/stories.js | 29 +- .../app/components/synonyms/add_synonym.html | 41 + .../app/components/synonyms/add_synonym.js | 19 + .../app/components/synonyms/edit_synonym.html | 41 + .../app/components/synonyms/edit_synonym.js | 53 + web/src/app/components/synonyms/synonyms.html | 78 - web/src/app/components/synonyms/synonyms.js | 76 - web/src/app/components/training/training.html | 20 + web/src/app/components/training/training.js | 68 +- web/src/app/config/app.config.js | 7 +- web/src/app/directives.js | 0 web/src/app/router.js | 64 +- web/src/app/services/api.js | 67 +- web/src/app/services/log.js | 0 web/src/app/shared/aside/aside.html | 8 +- web/src/app/shared/aside/aside.js | 67 +- web/src/app/shared/navbar/navbar.html | 10 +- web/src/app/shared/navbar/navbar.js | 11 +- web/src/app/shared/sidebar/sidebar.html | 89 +- web/src/app/shared/sidebar/sidebar.js | 6 +- web/src/app/utils.js | 15 + web/src/assets/css/fonts/FontAwesome.otf | Bin .../assets/css/fonts/fontawesome-webfont.eot | Bin .../assets/css/fonts/fontawesome-webfont.svg | 0 .../assets/css/fonts/fontawesome-webfont.ttf | Bin .../assets/css/fonts/fontawesome-webfont.woff | Bin .../css/fonts/fontawesome-webfont.woff2 | Bin web/src/assets/css/style.css | 5 + web/src/assets/css/vendor/core-ui.css | 0 web/src/assets/img/add.svg | 0 web/src/assets/img/check.svg | 0 web/src/assets/img/delete.svg | 0 web/src/assets/img/edit.svg | 0 web/src/assets/img/favicon.png | Bin web/src/assets/img/info.svg | 0 web/src/assets/img/logo.png | Bin web/src/assets/img/plus.svg | 0 web/src/assets/img/test_page_logo.png | Bin web/src/assets/libs/mermaid_7.1.0.min.js | 0 web/src/bot-demo/index.html | 899 -------- web/src/index.html | 411 ++-- 142 files changed, 3192 insertions(+), 6539 deletions(-) delete mode 100644 Dockerfile delete mode 100644 Dockerfile_slim mode change 100644 => 100755 README.md mode change 100644 => 100755 contributing.md delete mode 100644 docker-compose.yml delete mode 100644 docs/api.yaml mode change 100644 => 100755 license delete mode 100644 resources/database/dbcreate.sql delete mode 100644 resources/database/migration/V0.9.0__Database_creation.sql delete mode 100644 resources/database/migration/V1.0.0__application_version_1.sql delete mode 100644 resources/database/migration/V1.0.1__Updates_until_2.1.sql delete mode 100644 resources/database/migration/V2.1.0___Update_for_version_2.1.sql delete mode 100644 resources/database/migration/V2.3.0__Fix_missing_constraints.sql delete mode 100644 resources/database/migration/V2.3.1__schema_migration.sql delete mode 100644 resources/database/migration/V2.3.2__add_log_correspondance_table.sql delete mode 100644 resources/database/migration/V2.3.3__update_model_helpers_schema.sql delete mode 100644 resources/insights.png delete mode 100644 resources/rasa_ui_1.png delete mode 100644 resources/rasa_ui_2.png delete mode 100644 resources/rasa_ui_concept.png delete mode 100644 resources/ui_architecture.png create mode 100644 server/data/db.json create mode 100644 server/data/db.sqlite3 mode change 100644 => 100755 server/db/actions.js mode change 100644 => 100755 server/db/agents.js mode change 100644 => 100755 server/db/db.js mode change 100644 => 100755 server/db/entities.js mode change 100644 => 100755 server/db/expressions.js mode change 100644 => 100755 server/db/intents.js mode change 100644 => 100755 server/db/logs.js mode change 100644 => 100755 server/db/messages.js mode change 100644 => 100755 server/db/parameters.js mode change 100644 => 100755 server/db/regex.js mode change 100644 => 100755 server/db/responses.js mode change 100644 => 100755 server/db/settings.js mode change 100644 => 100755 server/db/synonyms.js mode change 100644 => 100755 server/db/variants.js mode change 100644 => 100755 server/routes/auth.js delete mode 100644 server/routes/health.js mode change 100644 => 100755 server/routes/index.js delete mode 100644 server/routes/middleware.js delete mode 100644 server/routes/mw_routes/core_router.js mode change 100644 => 100755 server/routes/mw_routes/nlu_router.js delete mode 100755 server/routes/rasa_events.js mode change 100644 => 100755 server/util/logger.js mode change 100644 => 100755 web/src/app/components/actions/actions.html mode change 100644 => 100755 web/src/app/components/actions/actions.js mode change 100644 => 100755 web/src/app/components/agents/add_agent.html mode change 100644 => 100755 web/src/app/components/agents/add_agent.js mode change 100644 => 100755 web/src/app/components/agents/agents.html mode change 100644 => 100755 web/src/app/components/agents/agents.js mode change 100644 => 100755 web/src/app/components/agents/edit_agent.html mode change 100644 => 100755 web/src/app/components/agents/edit_agent.js mode change 100644 => 100755 web/src/app/components/agents/import_agent.html mode change 100644 => 100755 web/src/app/components/agents/import_agent.js mode change 100644 => 100755 web/src/app/components/conversation/conversation.css mode change 100644 => 100755 web/src/app/components/conversation/conversation.html mode change 100644 => 100755 web/src/app/components/conversation/conversation.js mode change 100644 => 100755 web/src/app/components/conversation/directives/compile.js mode change 100644 => 100755 web/src/app/components/conversation/directives/edit-entity.js mode change 100644 => 100755 web/src/app/components/conversation/directives/ensure-element-in-view.js mode change 100644 => 100755 web/src/app/components/conversation/filters/no-underscore.js mode change 100644 => 100755 web/src/app/components/conversation/modal/edit_entity.html mode change 100644 => 100755 web/src/app/components/conversation/modal/edit_entity.js mode change 100644 => 100755 web/src/app/components/conversation/modal/edit_intent.html mode change 100644 => 100755 web/src/app/components/conversation/modal/edit_intent.js mode change 100644 => 100755 web/src/app/components/conversation/modal/modal.css mode change 100644 => 100755 web/src/app/components/dashboard/dashboard.html mode change 100644 => 100755 web/src/app/components/dashboard/dashboard.js mode change 100644 => 100755 web/src/app/components/dashboard/widgets.js mode change 100644 => 100755 web/src/app/components/entities/add_entity.html mode change 100644 => 100755 web/src/app/components/entities/add_entity.js rename web/src/app/components/entities/{entity.html => edit_entity.html} (75%) mode change 100644 => 100755 rename web/src/app/components/entities/{entity.js => edit_entity.js} (100%) mode change 100644 => 100755 mode change 100644 => 100755 web/src/app/components/entities/entities.html mode change 100644 => 100755 web/src/app/components/entities/entities.js mode change 100644 => 100755 web/src/app/components/history/history.css mode change 100644 => 100755 web/src/app/components/history/history.html mode change 100644 => 100755 web/src/app/components/history/history.js mode change 100644 => 100755 web/src/app/components/insights/insights.html mode change 100644 => 100755 web/src/app/components/insights/insights.js mode change 100644 => 100755 web/src/app/components/intents/add_intent.html mode change 100644 => 100755 web/src/app/components/intents/add_intent.js mode change 100644 => 100755 web/src/app/components/intents/edit_intent.html mode change 100644 => 100755 web/src/app/components/intents/edit_intent.js mode change 100644 => 100755 web/src/app/components/logs/logs.html mode change 100644 => 100755 web/src/app/components/logs/logs.js mode change 100644 => 100755 web/src/app/components/middleware/middleware.js mode change 100644 => 100755 web/src/app/components/rasaconfig/rasa_config.html mode change 100644 => 100755 web/src/app/components/rasaconfig/rasa_config.js mode change 100644 => 100755 web/src/app/components/regex/add_regex.html mode change 100644 => 100755 web/src/app/components/regex/add_regex.js mode change 100644 => 100755 web/src/app/components/regex/edit_regex.html mode change 100644 => 100755 web/src/app/components/regex/edit_regex.js mode change 100644 => 100755 web/src/app/components/settings/settings.html mode change 100644 => 100755 web/src/app/components/settings/settings.js mode change 100644 => 100755 web/src/app/components/stories/stories.html mode change 100644 => 100755 web/src/app/components/stories/stories.js create mode 100755 web/src/app/components/synonyms/add_synonym.html create mode 100755 web/src/app/components/synonyms/add_synonym.js create mode 100755 web/src/app/components/synonyms/edit_synonym.html create mode 100755 web/src/app/components/synonyms/edit_synonym.js delete mode 100644 web/src/app/components/synonyms/synonyms.html delete mode 100644 web/src/app/components/synonyms/synonyms.js mode change 100644 => 100755 web/src/app/components/training/training.html mode change 100644 => 100755 web/src/app/components/training/training.js mode change 100644 => 100755 web/src/app/directives.js mode change 100644 => 100755 web/src/app/services/api.js mode change 100644 => 100755 web/src/app/services/log.js mode change 100644 => 100755 web/src/app/shared/aside/aside.html mode change 100644 => 100755 web/src/app/shared/aside/aside.js mode change 100644 => 100755 web/src/app/shared/navbar/navbar.html mode change 100644 => 100755 web/src/app/shared/sidebar/sidebar.html mode change 100644 => 100755 web/src/app/shared/sidebar/sidebar.js mode change 100644 => 100755 web/src/app/utils.js mode change 100644 => 100755 web/src/assets/css/fonts/FontAwesome.otf mode change 100644 => 100755 web/src/assets/css/fonts/fontawesome-webfont.eot mode change 100644 => 100755 web/src/assets/css/fonts/fontawesome-webfont.svg mode change 100644 => 100755 web/src/assets/css/fonts/fontawesome-webfont.ttf mode change 100644 => 100755 web/src/assets/css/fonts/fontawesome-webfont.woff mode change 100644 => 100755 web/src/assets/css/fonts/fontawesome-webfont.woff2 mode change 100644 => 100755 web/src/assets/css/style.css mode change 100644 => 100755 web/src/assets/css/vendor/core-ui.css mode change 100644 => 100755 web/src/assets/img/add.svg mode change 100644 => 100755 web/src/assets/img/check.svg mode change 100644 => 100755 web/src/assets/img/delete.svg mode change 100644 => 100755 web/src/assets/img/edit.svg mode change 100644 => 100755 web/src/assets/img/favicon.png mode change 100644 => 100755 web/src/assets/img/info.svg mode change 100644 => 100755 web/src/assets/img/logo.png mode change 100644 => 100755 web/src/assets/img/plus.svg mode change 100644 => 100755 web/src/assets/img/test_page_logo.png mode change 100644 => 100755 web/src/assets/libs/mermaid_7.1.0.min.js delete mode 100644 web/src/bot-demo/index.html mode change 100644 => 100755 web/src/index.html diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 6edae5a..0000000 --- a/Dockerfile +++ /dev/null @@ -1,39 +0,0 @@ -FROM mhart/alpine-node:10 as builder - -RUN apk add --no-cache make gcc g++ python -COPY ./package*.json ./ -RUN npm install --production - -FROM mhart/alpine-node:10 - -RUN apk add --no-cache make gcc g++ python - -ENV http_port=5001 -ARG HEALTHCHECK_CMD="curl --silent http://localhost:${http_port}/api/v2/health 2>&1 | grep '\"Rasa UI is running\"'" - -ENV rasanluendpoint "http://localhost:5000" -ENV rasacoreendpoint "http://localhost:5005" -ENV postgresserver "postgres://postgres:rasaui@localhost:5432/rasa" -ENV rasacorerequestpath=/conversations/{id}/parse -ENV rasanlufixedmodelname "" - -WORKDIR /opt/rasaui - -COPY --from=builder /node_modules ./node_modules - -COPY ./package*.json ./ -COPY ./resources ./resources -COPY ./server ./server -COPY ./web ./web - - -RUN addgroup -S rasaui \ - && adduser -G rasaui -S rasaui \ - && chown -R rasaui:rasaui . - -HEALTHCHECK CMD ${HEALTHCHECK_CMD} - -EXPOSE ${http_port} -USER rasaui - -ENTRYPOINT sh -c "hostname -i; npm start" diff --git a/Dockerfile_slim b/Dockerfile_slim deleted file mode 100644 index 870e4e2..0000000 --- a/Dockerfile_slim +++ /dev/null @@ -1,14 +0,0 @@ -FROM node:10.15.1-alpine -## A slim image of rasa-ui with out postgres db. Expects postgres to be set up with env variables. -## docker build -f Dockerfile_slim . -t myimages/slim-rasa-ui - - -# Create app directory -WORKDIR /usr/src/app - -# Installation -ADD . . -RUN npm install - -EXPOSE 5001 -CMD [ "npm", "start" ] diff --git a/README.md b/README.md old mode 100644 new mode 100755 index a02565c..2fd70c8 --- a/README.md +++ b/README.md @@ -1,14 +1,12 @@ [![Docker Automated build](https://img.shields.io/docker/automated/jrottenberg/ffmpeg.svg)](https://hub.docker.com/r/paschmann/rasa-ui/) -# Important Note: Rasa UI v3 is currently under development, due to the major changes of Rasa 1.+ and the merge of Rasa NLU and Core (and addition of Rasa X) we are taking Rasa UI back to its core by simplifying the code base and focusing on providing a UI for the Rasa Framework. If you would like to see the progress/changes coming, please use the v3 branch. - # Rasa UI -Rasa UI is a web application built on top of, and for, [Rasa NLU](https://github.com/RasaHQ/rasa_nlu) and [Rasa Core](https://github.com/RasaHQ/rasa_core). Rasa UI provides a web application to quickly and easily be able to create agents, define intents and entities. It also provides some convenience features for Rasa NLU, like training your models, monitoring usage or viewing logs. Our goal is to replace api.ai/Dialogflow with Rasa, so a lot of the terminology and usage concepts are similar. +Rasa UI is a web application built on top of, and for [Rasa] (https://github.com/RasaHQ/rasa). Rasa UI provides a web application to quickly and easily be able to create agents, define intents and entities. It also provides some convenience features for Rasa NLU, like training your models, monitoring usage or viewing logs. ## Features -- UI for feeding training data- Intents, Entities, Synonyms, Regex, Actions, Stories to DB and Testing endpoints. +- UI for feeding training data - Intents, Entities, Synonyms, Regex, Actions, Stories to DB and Testing endpoints. - Log requests for usage tracking, history, improvements - Easily execute intent parsing using different models - Manage Multiple Agents in one place with shared NLU instances. @@ -20,22 +18,14 @@ Rasa UI is a web application built on top of, and for, [Rasa NLU](https://github - Import Agents in rasa_nlu format - Docker container capabilities -![Screenshot1](https://github.com/paschmann/rasa-ui/blob/master/resources/insights.png) - -![Screenshot1](https://github.com/paschmann/rasa-ui/blob/master/resources/rasa_ui_1.png) - ## Getting Started -Rasa UI can run directly on your Rasa NLU instance, or on a separate machine. Technically Rasa NLU is not required, you could just use the UI for managing training data. +Rasa UI can run on your Rasa instance, or on a separate machine. Technically Rasa NLU is not required, you could just use the UI for managing training data. ### Prerequisites -[Rasa NLU](https://github.com/golastmile/rasa_nlu) - Version 0.14+ - -[Rasa Core](https://github.com/golastmile/rasa_core) - Version 0.12+ - -[PostgreSQL](https://www.postgresql.org/) - Used for storing training data (entities, intents, synonyms, etc.) +[Rasa NLU](https://github.com/golastmile/rasa_nlu) - Version 1.2+ [Node.js/npm](https://nodejs.org/en/) - Serves Rasa UI and acts as a middleware server for logging (to the PostgreSQL DB) @@ -44,7 +34,9 @@ Rasa UI can run directly on your Rasa NLU instance, or on a separate machine. Te Please ensure prerequisites are fulfilled -Clone/download the Rasa UI repository. Install npm packages for both Server and Web. +Clone/download the Rasa UI repository. +Install npm packages. +Set Rasa Server variable in package.json ``` git clone https://github.com/paschmann/rasaui.git @@ -57,74 +49,6 @@ Please see the [wiki](https://github.com/paschmann/rasa-ui/wiki/Rasa-UI-Install- ##### Quick start `docker pull paschmann/rasa-ui` and browse to localhost:5001 -##### Full Build -The Docker file uses Multi Stage Build feature, ensure that your docker version is greater or equals to 17.05. -In order to run this setup in docker you need to run the following command to build out the image: - -`docker build -t rasa-ui .` - Make sure to perform this from the location where the Dockerfile is. - -Now we can spin up our docker instance with the following command: - -**Use Your External Rasa Server** -In this command we are setting the env variables rasanluendpoint and rasacoreendpoint to our own specific values, you can supply only 1 or both of these depending on if you want to use NLU or Core or both externally. - -`docker run -e "rasanluendpoint=http://youripaddress:5000" -e "rasacoreendpoint=http://youripaddress:5005" -e "postgresserver=postgres://login:password@serveraddress:5432/rasa" -itd -p 5001:5001 rasa-ui` - -It's possible to fix the nlu model name for the training by passing "rasanlufixedmodelname" as an argument : - -`docker run -e "rasanluendpoint=http://youripaddress:5000" -e "rasacoreendpoint=http://youripaddress:5005" -e "postgresserver=postgres://login:password@serveraddress:5432/rasa" -e "rasanlufixedmodelname=nlu" -itd -p 5001:5001 rasa-ui` - -## Docker compose -If you want to quickly load all the stack locally you can use the docker-compose file - -`docker-compose up` - -On the first launch, you have to add add your rasa configurations and training files in this filetree: - -``` -rasa-app-data -├── actions -│   ├── __pycache__ -│   │   └── actions.cpython-36.pyc -│   └── actions.py -├── config -│   └── endpoints.yml -├── logs -├── models -│   └── current -│   └── dialogue -│   ├── domain.json -│   ├── domain.yml -└── project - ├── domain.yml - └── stories.md -``` - -Then launch the model training if it's not already done: - -`docker-compose run rasa_core train` - -And setup SQL database schema. - -## DB Setup -**If the rasa UI Postgres user is different from the postgres database admin used for database creation, ensure it is created before the execution of the script `CREATE USER WITH PASSWORD ''`** - -### Flyway install -You can install the RASA UI database using Flyway - simply run a docker container with these options. -``` -docker run --rm --mount type=bind,source=,target=/flyway/sql \ - boxfuse/flyway -url=jdbc:postgresql:/// -user= -password= -schemas=rasa_ui,public -placeholders.postgres_user= migrate -``` -This will create a `flyway_schema_history` table which will track the database state, and allow you to simplify database model migrations. - -### Manual install -Please specify the value of the `postgres_user` parameter with your Rasa Postgres User, using psql : `psql -v postgres_user= -h -U -d -a -f dbcreate.sql`. -If this is a clean install, simply execute `dbcreate.sql` on postgreSQL. If you are upgrading from a previous version, please execute the migration scripts sequentially to bring your DB model up to date. - -## RasaNLU Setup -- Update your package.json file to include the IP Addresses of your rasa_nlu server and the connection string of your postgres instance. -- Optional: Update your web/src/app.js file to include the IP Addresses of your local middleware server (no need to change this if they are running on the same instance) - ## Running Run npm start from the server folder (rasa-ui) @@ -135,9 +59,9 @@ Your web application should be available on http://localhost:5001 ## Logging -Since Rasa UI can be used to log events/intent parsing/training etc. we would suggest changing your endpoints for your API calls to "pass through" the Rasa UI middleware layer. All API requests are simply forwarded, logged and then returned. +Since Rasa UI can be used to log events/intent parsing/training etc. we would suggest changing your endpoints for your API calls to "pass through" Rasa UI. All API requests are simply logged, forwarded to Rasa and then returned. -e.g. Instead of calling: http://localhost:5000/parse?q=hello%20there rather call: http://localhost:5001/api/v2/rasa/parse?q=hello%20there +e.g. Instead of calling: http://localhost:5005/model/parse?q=hello%20there rather call: http://localhost:5001/api/v2/rasa/parse?q=hello%20there ## Contributing diff --git a/contributing.md b/contributing.md old mode 100644 new mode 100755 diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index a5d7d95..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,71 +0,0 @@ -version: '3' - -services: - - action_server: - image: rasa/rasa_core_sdk:latest - networks: ['rasa-network'] - ports: - - "5055:5055" - volumes: - - "./rasa-app-data/actions:/app/actions" - - rasa_nlu: - image: rasa/rasa_nlu:0.13.7-full - networks: ['rasa-network'] - ports: - - "5000:5000" - volumes: - - "./rasa-app-data/models/:/app/projects" - - "./rasa-app-data/logs:/app/logs" - - rasa_core: - image: rasa/rasa_core:0.12.1 - networks: ['rasa-network'] - ports: - - "5005:5005" - depends_on: - - "rasa_nlu" - - "action_server" - volumes: - - "./rasa-app-data/models/current/dialogue:/app/model" - - "./rasa-app-data/config:/app/config" - - "./rasa-app-data/project:/app/project" - command: - - start - - -d - - ./model - - -c - - rest - - -u - - current/nlu - - --endpoints - - config/endpoints.yml - - postgres: - image: postgres:11 - networks: ['rasa-network'] - ports: - - "5432:5432" - volumes: - - "rasauidata:/var/lib/postgresql/data" - environment: - POSTGRES_USER: "postgres" - POSTGRES_PASSWORD: "rasaui" - POSTGRES_DB: "rasaui" - - rasa_ui: - image: paschmann/rasa-ui:latest - networks: ['rasa-network'] - ports: - - "5001:5001" - depends_on: - - "rasa_nlu" - - "postgres" - environment: - rasanluendpoint: "http://rasa_nlu:5000" - rasacoreendpoint: "http://rasa_core:5005" - postgresserver: "postgres://postgres:rasaui@postgres:5432/rasaui" - -networks: {rasa-network: {}} -volumes: {rasauidata:{}} diff --git a/docs/api.yaml b/docs/api.yaml deleted file mode 100644 index 8a30f89..0000000 --- a/docs/api.yaml +++ /dev/null @@ -1,61 +0,0 @@ -openapi: 3.0.1 -info: - title: Rasa UI Server API - license: - name: MIT License - url: https://opensource.org/licenses/mit-license.php - version: 2.3 -components: - requestBodies: - UserAuthentication: - content: - application/json: - schema: - type: object - properties: - username: - type: string - description: user login - password: - type: string - description: user password - schemas: - UserAuthentication: - type: object - properties: - username: - type: string - description: user name - token: - type: string - description: JWT token containing the user name and role - -paths: - /auth: - post: - description: Authenticate a user - requestBody: - $ref: '#/components/requestBodies/UserAuthentication' - responses: - '200': - description: the username and the user token - content: - application/json: - schema: - $ref: '#/components/schemas/UserAuthentication' - '401': - description: Authentication failed - content: - text/plain: - schema: - type: string - description: Error message - example: Username and password didnt match - /health: - get: - description: Check if the application is up and running - responses: - '200': - description: The application is running - '404': - description: The application is unavailable diff --git a/license b/license old mode 100644 new mode 100755 diff --git a/package-lock.json b/package-lock.json index 15c0281..ab265fe 100755 --- a/package-lock.json +++ b/package-lock.json @@ -1,9 +1,14 @@ { "name": "RasaUI", - "version": "2.5.1", + "version": "3.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "accepts": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", @@ -13,11 +18,6 @@ "negotiator": "0.6.1" } }, - "adal-angular": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/adal-angular/-/adal-angular-1.0.17.tgz", - "integrity": "sha1-bpNuDkH5HTsqiOf/ypwvb29WLMQ=" - }, "ajv": { "version": "6.6.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz", @@ -29,42 +29,6 @@ "uri-js": "^4.2.2" } }, - "amqplib": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.5.3.tgz", - "integrity": "sha512-ZOdUhMxcF+u62rPI+hMtU1NBXSDFQ3eCJJrenamtdQ7YYwh7RZJHOIM1gonVbZ5PyVdYH4xqBPje9OYqk7fnqw==", - "requires": { - "bitsyntax": "~0.1.0", - "bluebird": "^3.5.2", - "buffer-more-ints": "~1.0.0", - "readable-stream": "1.x >=1.1.9", - "safe-buffer": "~5.1.2", - "url-parse": "~1.4.3" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, "angular": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/angular/-/angular-1.7.2.tgz", @@ -120,6 +84,49 @@ "resolved": "https://registry.npmjs.org/angular-utils-pagination/-/angular-utils-pagination-0.11.1.tgz", "integrity": "sha1-7618iHm+swrT13cH+T49DvUfLGY=" }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -129,27 +136,29 @@ } }, "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "requires": { - "arr-flatten": "^1.0.1" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" }, "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, "asn1": { "version": "0.2.4", @@ -159,31 +168,26 @@ "safer-buffer": "~2.1.0" } }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -197,13 +201,57 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "optional": true - }, - "base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } }, "bcrypt-pbkdf": { "version": "1.0.2", @@ -213,26 +261,6 @@ "tweetnacl": "^0.14.3" } }, - "bitsyntax": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.1.0.tgz", - "integrity": "sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q==", - "requires": { - "buffer-more-ints": "~1.0.0", - "debug": "~2.6.9", - "safe-buffer": "~5.1.2" - } - }, - "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==" - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, "body-parser": { "version": "1.18.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", @@ -259,65 +287,62 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, "buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, - "buffer-more-ints": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz", - "integrity": "sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg==" - }, - "buffer-writer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", - "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" - }, - "bunyan": { - "version": "1.8.12", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz", - "integrity": "sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=", - "requires": { - "dtrace-provider": "~0.8", - "moment": "^2.10.6", - "mv": "~2", - "safe-json-stringify": "~1" - } - }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, - "cache-manager": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-2.9.0.tgz", - "integrity": "sha1-Xh9jF8oaJeQN3zZacWJ1evFSNT4=", + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "requires": { - "async": "1.5.2", - "lru-cache": "4.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, "caseless": { @@ -351,10 +376,36 @@ "color-name": "^1.0.0" } }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" + "chownr": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", + "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==" + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "codemirror": { "version": "5.35.0", @@ -369,6 +420,15 @@ "typo-js": "*" } }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, "color": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", @@ -434,11 +494,20 @@ "delayed-stream": "~1.0.0" } }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "optional": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "content-disposition": { "version": "0.5.2", @@ -460,6 +529,11 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -497,11 +571,63 @@ } } }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -512,6 +638,11 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, "diagnostics": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", @@ -522,15 +653,6 @@ "kuler": "1.0.x" } }, - "dtrace-provider": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz", - "integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ=", - "optional": true, - "requires": { - "nan": "^2.10.0" - } - }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -541,9 +663,9 @@ } }, "ecdsa-sig-formatter": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.10.tgz", - "integrity": "sha1-HFlQAPBKiJffuFAAiSoPTDOvhsM=", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "requires": { "safe-buffer": "^5.0.1" } @@ -553,20 +675,6 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, - "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, "enabled": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", @@ -601,24 +709,40 @@ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" }, "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "requires": { - "fill-range": "^2.1.0" + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "express": { @@ -665,39 +789,86 @@ } } }, - "express-jwt": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/express-jwt/-/express-jwt-5.3.1.tgz", - "integrity": "sha512-1C9RNq0wMp/JvsH/qZMlg3SIPvKu14YkZ4YYv7gJQ1Vq+Dv8LH9tLKenS5vMNth45gTlEUGx+ycp9IHIlaHP/g==", - "requires": { - "async": "^1.5.0", - "express-unless": "^0.3.0", - "jsonwebtoken": "^8.1.0", - "lodash.set": "^4.0.0" - } - }, - "express-unless": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/express-unless/-/express-unless-0.3.1.tgz", - "integrity": "sha1-JVfBRudb65A+LSR/m1ugFFJpbiA=" - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "requires": { - "is-extglob": "^1.0.0" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "is-extglob": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } } } }, @@ -726,21 +897,25 @@ "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" - }, "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "finalhandler": { @@ -765,25 +940,25 @@ } }, "follow-redirects": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.1.tgz", - "integrity": "sha512-v9GI1hpaqq1ZZR6pBD1+kI7O24PhDvNGNodjS3MdcEqyrahCp8zbtpv+2B/krUnSmUH80lbAS7MrdeK5IylgKg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", + "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", "requires": { - "debug": "^3.1.0" + "debug": "^3.2.6" }, "dependencies": { "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -792,14 +967,6 @@ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "requires": { - "for-in": "^1.0.1" - } - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -820,11 +987,52 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "fs-minipass": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", + "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -834,66 +1042,19 @@ } }, "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "optional": true, + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "requires": { + "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "2 || 3", + "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "requires": { - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, - "har-schema": { + "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" @@ -907,23 +1068,38 @@ "har-schema": "^2.0.0" } }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "http-errors": { @@ -948,20 +1124,20 @@ } }, "http-proxy-middleware": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", - "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", - "requires": { - "http-proxy": "^1.16.2", - "is-glob": "^3.1.0", - "lodash": "^4.17.2", - "micromatch": "^2.3.11" + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" }, "dependencies": { "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" } } }, @@ -983,11 +1159,18 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "requires": { + "minimatch": "^3.0.4" + } + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "optional": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -998,11 +1181,34 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, "ipaddr.js": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", @@ -1013,17 +1219,39 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { - "is-primitive": "^2.0.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } } }, "is-extendable": { @@ -1036,31 +1264,47 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "requires": { - "is-extglob": "^2.1.0" + "is-extglob": "^2.1.1" } }, "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } }, "is-stream": { "version": "1.1.0", @@ -1072,18 +1316,20 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "isstream": { "version": "0.1.2", @@ -1130,11 +1376,11 @@ "integrity": "sha1-rQHWU4rr9327LFQxPIJX57QIzFM=" }, "jsonwebtoken": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.4.0.tgz", - "integrity": "sha512-coyXjRTCy0pw5WYBpMvWOMN+Kjaik2MwTUIq9cna/W7NpO9E+iYbumZONAz3hcr+tXFJECoQVrtmIoC3Oz0gvg==", + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", "requires": { - "jws": "^3.1.5", + "jws": "^3.2.2", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", "lodash.isinteger": "^4.0.4", @@ -1142,13 +1388,14 @@ "lodash.isplainobject": "^4.0.6", "lodash.isstring": "^4.0.1", "lodash.once": "^4.0.0", - "ms": "^2.1.1" + "ms": "^2.1.1", + "semver": "^5.6.0" }, "dependencies": { "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -1164,41 +1411,28 @@ } }, "jwa": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.6.tgz", - "integrity": "sha512-tBO/cf++BUsJkYql/kBbJroKOgHWEigTKBAjjBEmrMGYd1QMBC74Hr4Wo2zCZw6ZrVhlJPvoMrkcOnlWR/DJfw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", "requires": { "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.10", - "safe-buffer": "^5.0.1" - } - }, - "jwk-to-pem": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/jwk-to-pem/-/jwk-to-pem-1.2.6.tgz", - "integrity": "sha1-1QfOzkAInFJI4J7GgmaiAwqcYyU=", - "requires": { - "asn1.js": "^4.5.2", - "elliptic": "^6.2.3", + "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "jws": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.5.tgz", - "integrity": "sha512-GsCSexFADNQUr8T5HPJvayTjvPIfoyJPtLQBwn5a4WZQchcrPMPMAWcC1AzJVRDKyD6ZPROPAxgv6rfHViO4uQ==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", "requires": { - "jwa": "^1.1.5", + "jwa": "^1.4.1", "safe-buffer": "^5.0.1" } }, "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" }, "kuler": { "version": "1.0.1", @@ -1248,11 +1482,6 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" - }, "logform": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", @@ -1272,30 +1501,24 @@ } } }, - "lru-cache": { - "version": "4.0.0", - "resolved": "http://registry.npmjs.org/lru-cache/-/lru-cache-4.0.0.tgz", - "integrity": "sha1-tcvwFVbBaWb+vlTO7A+03JDfbCg=", + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "requires": { - "pseudomap": "^1.0.1", - "yallist": "^2.0.0" + "object-visit": "^1.0.0" } }, - "manakin": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/manakin/-/manakin-0.5.2.tgz", - "integrity": "sha512-pfDSB7QYoVg0Io4KMV9hhPoXpj6p0uBscgtyUSKCOFZe8bqgbpStfgnKIbF/ulnr6U3ICu4OqdyxAqBgOhZwBQ==" - }, "marked": { "version": "0.3.17", "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.17.tgz", "integrity": "sha512-+AKbNsjZl6jFfLPwHhWmGTqE009wTKn3RTmn9K8oUKHrX/abPJjtcRtXpYB/FFrwPJRUA86LX/de3T0knkPCmQ==" }, - "math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=" - }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -1312,38 +1535,23 @@ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - } + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, "mime": { @@ -1364,36 +1572,59 @@ "mime-db": "~1.33.0" } }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "optional": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "optional": true + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "minipass": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.4.0.tgz", + "integrity": "sha512-6PmOuSP4NnZXzs2z6rbwzLJu/c5gdzYg1mRI/WIYdx45iiX7T+a4esOzavD6V/KmBzAaopFSTZPZcUx73bqKWA==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "requires": { + "minipass": "^2.2.1" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } }, "mkdirp": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "optional": true, "requires": { "minimist": "0.0.8" } @@ -1408,28 +1639,58 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", - "optional": true, - "requires": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - } - }, "nan": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", - "optional": true + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" }, - "ncp": { - "version": "2.0.0", - "resolved": "http://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", - "optional": true + "nanoid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.0.3.tgz", + "integrity": "sha512-NbaoqdhIYmY6FXDRB4eYtDVC9Z9eCbn8TyaiC16LNKtpPv/aqa0tOPD8y6gNE4yUNnaZ7LLhYtXOev/6+cBtfw==" + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "needle": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", + "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } }, "negotiator": { "version": "0.6.1", @@ -1459,27 +1720,61 @@ "resolved": "https://registry.npmjs.org/ngstorage/-/ngstorage-0.3.11.tgz", "integrity": "sha1-FjfEW4ctkJ2cx+GLN0iY1QsuhE8=" }, - "node-cache": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-4.2.0.tgz", - "integrity": "sha512-obRu6/f7S024ysheAjoYFEEBqqDWv4LOMNJEuO8vMeEw2AT4z+NCzO4hlc2lhI4vATzbCQv6kke9FVdx0RbCOw==", + "node-pre-gyp": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", + "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", "requires": { - "clone": "2.x", - "lodash": "4.x" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "requires": { - "remove-trailing-separator": "^1.0.1" + "abbrev": "1", + "osenv": "^0.1.4" } }, - "oauth": { - "version": "0.9.14", - "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.14.tgz", - "integrity": "sha1-xXSIg6QLU94wrenKvyEAQUuKCXE=" + "npm-bundled": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==" + }, + "npm-packlist": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.4.tgz", + "integrity": "sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw==", + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "oauth-sign": { "version": "0.9.0", @@ -1491,13 +1786,48 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" } }, "on-finished": { @@ -1512,7 +1842,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "optional": true, "requires": { "wrappy": "1" } @@ -1522,35 +1851,23 @@ "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" }, - "packet-reader": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-0.3.1.tgz", - "integrity": "sha1-zWLmCvjX/qinBexP+ZCHHEaHHyc=" + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - } + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "parseurl": { @@ -1558,156 +1875,35 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" }, - "passport": { - "version": "0.3.2", - "resolved": "http://registry.npmjs.org/passport/-/passport-0.3.2.tgz", - "integrity": "sha1-ndAJ+RXo/glbASSgG4+C2gdRAQI=", - "requires": { - "passport-strategy": "1.x.x", - "pause": "0.0.1" - } - }, - "passport-azure-ad": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/passport-azure-ad/-/passport-azure-ad-4.0.0.tgz", - "integrity": "sha512-JQl8Qy+xfCiia0jBPluDX4MfaHtb871+z2xoRExFKWuIhTq1lBHrObt04rIkverW7iDjqn/ZQ4q3En4xQJ9v4g==", - "requires": { - "async": "^1.5.2", - "base64url": "^3.0.0", - "bunyan": "^1.8.0", - "cache-manager": "^2.0.0", - "jwk-to-pem": "^1.2.6", - "jws": "^3.1.3", - "lodash": "^4.11.2", - "oauth": "0.9.14", - "passport": "^0.3.2", - "request": "^2.72.0", - "valid-url": "^1.0.6" - } - }, - "passport-strategy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", - "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" }, "path-is-absolute": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "optional": true + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, - "pause": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", - "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" - }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, - "pg": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-7.8.0.tgz", - "integrity": "sha512-yS3C9YD+ft0H7G47uU0eKajgTieggCXdA+Fxhm5G+wionY6kPBa8BEVDwPLMxQvkRkv3/LXiFEqjZm9gfxdW+g==", - "requires": { - "buffer-writer": "2.0.0", - "packet-reader": "0.3.1", - "pg-connection-string": "0.1.3", - "pg-pool": "^2.0.4", - "pg-types": "~2.0.0", - "pgpass": "1.x", - "semver": "4.3.2" - } - }, - "pg-connection-string": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-0.1.3.tgz", - "integrity": "sha1-2hhHsglA5C7hSSvq9l1J2RskXfc=" - }, - "pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" - }, - "pg-minify": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/pg-minify/-/pg-minify-0.5.5.tgz", - "integrity": "sha512-7Pf9h6nV1RFqED1hkRosePqvpPwNUUtW06TT4+lHwzesxa5gffxkShTjYH6JXV5sSSfh5+2yHOTTWEkCyCQ0Eg==" - }, - "pg-pool": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-2.0.6.tgz", - "integrity": "sha512-hod2zYQxM8Gt482q+qONGTYcg/qVcV32VHVPtktbBJs0us3Dj7xibISw0BAAXVMCzt8A/jhfJvpZaxUlqtqs0g==" - }, - "pg-promise": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/pg-promise/-/pg-promise-8.5.5.tgz", - "integrity": "sha512-TaIXqoIPEUJNxm3cYWUr2fm50qfOY3ahFAuUoS3GJiozeWmhNYj9vsfBAsiCzaCV6IE9EdDK6255yuZkAxLJ2g==", - "requires": { - "manakin": "0.5.2", - "pg": "7.8.0", - "pg-minify": "0.5.5", - "spex": "2.1.0" - } - }, - "pg-types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.0.0.tgz", - "integrity": "sha512-THUD7gQll5tys+5eQ8Rvs7DjHiIC3bLqixk3gMN9Hu8UrCBAOjf35FoI39rTGGc3lM2HU/R+Knpxvd11mCwOMA==", - "requires": { - "pg-int8": "1.0.1", - "postgres-array": "~2.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.0", - "postgres-interval": "^1.1.0" - } - }, - "pgpass": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz", - "integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=", - "requires": { - "split": "^1.0.0" - } - }, "popper.js": { - "version": "1.14.7", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.7.tgz", - "integrity": "sha512-4q1hNvoUre/8srWsH7hnoSJ5xVmIL4qgz+s4qf2TnJIMyZFUFMGH+9vE7mXynAlHSZ/NdTmmow86muD0myUkVQ==" - }, - "postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.15.0.tgz", + "integrity": "sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA==" }, - "postgres-bytea": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=" - }, - "postgres-date": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.3.tgz", - "integrity": "sha1-4tiXAu/bJY/52c7g/pG9BpdSV6g=" - }, - "postgres-interval": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.1.2.tgz", - "integrity": "sha512-fC3xNHeTskCxL1dC8KOtxXt7YeFmlbTYtn7ul8MkVERuTmf7pI4DrkAxcw3kh1fQ9uz4wQmd03a1mRiXUZChfQ==", - "requires": { - "xtend": "^4.0.0" - } - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "process-nextick-args": { "version": "2.0.0", @@ -1723,11 +1919,6 @@ "ipaddr.js": "1.8.0" } }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, "psl": { "version": "1.1.29", "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", @@ -1743,33 +1934,6 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, - "querystringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz", - "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==" - }, - "randomatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", - "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, "range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", @@ -1786,6 +1950,24 @@ "unpipe": "1.0.0" } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, "readable-stream": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", @@ -1796,23 +1978,19 @@ "util-deprecate": "^1.0.1" } }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "requires": { - "is-equal-shallow": "^0.1.3" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" }, "repeat-string": { "version": "1.6.1", @@ -1866,13 +2044,22 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, "rimraf": { - "version": "2.4.5", - "resolved": "http://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", - "optional": true, + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { - "glob": "^6.0.1" + "glob": "^7.1.3" } }, "safe-buffer": { @@ -1880,21 +2067,28 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, "semver": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz", - "integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "send": { "version": "0.16.2", @@ -1934,11 +2128,50 @@ "send": "0.16.2" } }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, + "shortid": { + "version": "2.2.14", + "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.14.tgz", + "integrity": "sha512-4UnZgr9gDdA1kaKj/38IiudfC3KHKhDc1zi/HSxd9FQDR0VLwH3/y79tZJLsVYPsJgIjeHjqIWaWVRJUj9qZOQ==", + "requires": { + "nanoid": "^2.0.0" + } + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, "simple-line-icons": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/simple-line-icons/-/simple-line-icons-2.4.1.tgz", @@ -1962,17 +2195,131 @@ "marked": "*" } }, - "spex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spex/-/spex-2.1.0.tgz", - "integrity": "sha512-nZ1LA8v1o0Maf9pdWKUXuUM855EqyE+DP0NT0ddZqXqXmr9xKlXjYWN97w+yWehTbM+Ox0aEvQ8Ufqk/OuLCOQ==" + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "requires": { - "through": "2" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" } }, "sprintf-js": { @@ -1980,6 +2327,16 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, + "sqlite3": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.1.0.tgz", + "integrity": "sha512-RvqoKxq+8pDHsJo7aXxsFR18i+dU2Wp5o12qAJOV5LNcDt+fgJsc2QKKg3sIRfXrN9ZjzY1T7SNe/DFVqAXjaw==", + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.11.0", + "request": "^2.87.0" + } + }, "sshpk": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz", @@ -2001,11 +2358,40 @@ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, "string_decoder": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", @@ -2014,20 +2400,75 @@ "safe-buffer": "~5.1.0" } }, - "tether": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/tether/-/tether-1.4.5.tgz", - "integrity": "sha512-fysT1Gug2wbRi7a6waeu39yVDwiNtvwj5m9eRD+qZDSHKNghLo6KqP/U3yM2ap6TNUL2skjXGJaJJTJqoC31vw==" + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "tar": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz", + "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==", + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.5", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } }, "text-hex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } }, "tough-cookie": { "version": "2.4.3", @@ -2077,11 +2518,58 @@ "resolved": "https://registry.npmjs.org/typo-js/-/typo-js-1.0.3.tgz", "integrity": "sha1-VNjrx5SfGngQkItgAsaEFSbJnVo=" }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -2090,14 +2578,15 @@ "punycode": "^2.1.0" } }, - "url-parse": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", - "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", - "requires": { - "querystringify": "^2.0.0", - "requires-port": "^1.0.0" - } + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, "util-deprecate": { "version": "1.0.2", @@ -2114,11 +2603,6 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, - "valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=" - }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -2134,6 +2618,14 @@ "extsprintf": "^1.2.0" } }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, "winston": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", @@ -2196,28 +2688,17 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "optional": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "xdate": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/xdate/-/xdate-0.8.2.tgz", "integrity": "sha1-17AzwASF0CaVuvAET06s2j/JYaM=" }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - }, "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "yaml": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.3.2.tgz", - "integrity": "sha512-ZZZIdcApMRcAez37EVrtCim+8JUESX0zRcsv+HMfatIX79cX22CAnVkxDrZhAmzsnka2nb/mvaTybzDYcnrIew==" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" } } } diff --git a/package.json b/package.json index 2e81a3e..46c4700 100755 --- a/package.json +++ b/package.json @@ -1,10 +1,8 @@ { "name": "RasaUI", - "version": "2.5.1", - "description": "Rasa UI is a web application built on top of, and for, Rasa NLU.", + "version": "3.0.0", + "description": "Rasa UI is a web application built on top of, and for, Rasa.", "dependencies": { - "adal-angular": "^1.0.17", - "amqplib": "^0.5.3", "angular": "1.7.2", "angular-chart.js": "^1.1.1", "angular-cookies": "1.7.2", @@ -13,14 +11,12 @@ "angular-route": "1.7.2", "angular-sanitize": "1.7.2", "angular-utils-pagination": "^0.11.1", - "bluebird": "^3.5.3", "body-parser": "^1.18.3", "bootstrap": "latest", "chart.js": "^2.7.3", "cors": "^2.8.5", "express": "^4.16.4", - "express-jwt": "^5.3.1", - "http-proxy-middleware": "^0.17.4", + "http-proxy-middleware": "^0.19.1", "jquery": "3.1.1", "jsonformatter": "^0.6.0", "jsonwebtoken": "^8.4.0", @@ -28,42 +24,26 @@ "ng-jsyaml": "0.0.2", "ng-tags-input": "^3.2.0", "ngstorage": "^0.3.11", - "node-cache": "^4.2.0", - "passport-azure-ad": "^4.0.0", - "pg-promise": "^8.5.5", - "popper.js": "latest", + "popper.js": "^1.15.0", "request": "^2.88.0", + "shortid": "^2.2.14", "simple-line-icons": "^2.4.1", "simplemde": "^1.11.2", - "tether": "latest", + "sqlite3": "^4.1.0", "winston": "^3.2.1", - "xdate": "latest", - "yaml": "^1.3.2" + "xdate": "latest" }, "config": { - "rasanluendpoint": "http://localhost:5000", - "rasacoreendpoint": "http://localhost:5002", - "rasacorerequestpath": "/webhooks/rest/webhook", - "coresecuritytoken": "", - "corejwttoken": "", - "nlusecuritytoken": "", - "cacheagents": false, - "jwtsecret": "th1s1sn0t0nlyths3cr3tbutth3m0st1mp0rtAntp13c30f1nf0rmAt10nf0rth1sAppl1cAt10n", - "postgresserver": "postgres://rasaui:compose@localhost:5432/rasaui", - "adalauthentication": false, - "adalinstance": "https://login.microsoftonline.com", - "adaltenantid": "", - "adalclientid": "", - "adaltokenissuer": "https://sts.windows.net", + "rasa_endpoint": "http://10.211.55.8:5005", "loglevel": "info", - "rasacoreeventconsumer": false, - "rasacorerabbitmqhost": "rabbitmq", - "rasacorerabbitmqqueuename": "rasa-core-events" + "jwtsecret": "mysecret", + "admin_username": "admin", + "admin_password": "admin", + "db_schema": "1.0.0" }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "start": "node server/server.js", - "start:local": "node --inspect server/server.js " + "start": "nodemon server/server.js --ignore 'server/data/'" }, "author": "Paul Aschmann", "url": "https://github.com/paschmann/rasa-ui", diff --git a/resources/database/dbcreate.sql b/resources/database/dbcreate.sql deleted file mode 100644 index 0c911dc..0000000 --- a/resources/database/dbcreate.sql +++ /dev/null @@ -1,542 +0,0 @@ -CREATE SCHEMA IF NOT EXISTS "rasa_ui"; - -COMMENT ON SCHEMA "rasa_ui" IS 'standard rasaui schema'; - -GRANT ALL ON SCHEMA "rasa_ui" TO :postgres_user; -GRANT ALL ON SCHEMA "rasa_ui" TO PUBLIC; - - -DO $$ -BEGIN - EXECUTE 'ALTER DATABASE '|| current_database()||' set search_path = ''rasa_ui'', ''$user'', ''public'''; -END $$; - -SET search_path TO rasa_ui; - -/* Sequences */ - -CREATE SEQUENCE agentidgen -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE agents_agent_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE entities_entity_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE entityidgen -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE expressionidgen -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE expressions_expression_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE intentidgen -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE intents_intent_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE actions_action_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE nlu_log_log_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE parse_log_parse_log_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE core_parse_log_core_parse_log_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE messages_messages_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE parameteridgen -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE parameters_parameter_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE responseidgen -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE responses_response_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE response_type_response_type_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE synonym_variant_synonym_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE synonyms_synonym_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE regex_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - - -/* Tables */ - -CREATE TABLE agents -( - agent_id integer NOT NULL DEFAULT nextval('agents_agent_id_seq'::regclass), - agent_name character varying COLLATE pg_catalog."default", - endpoint_enabled boolean DEFAULT FALSE, - rasa_core_enabled boolean DEFAULT FALSE, - endpoint_url character varying COLLATE pg_catalog."default", - basic_auth_username character varying COLLATE pg_catalog."default", - basic_auth_password character varying COLLATE pg_catalog."default", - client_secret_key text NOT NULL default md5(random()::text), - story_details text COLLATE pg_catalog."default", - rasa_nlu_pipeline character varying COLLATE pg_catalog."default" DEFAULT 'spacy_sklearn', - rasa_nlu_language character varying COLLATE pg_catalog."default" DEFAULT 'en', - rasa_nlu_fixed_model_name character varying COLLATE pg_catalog."default", - CONSTRAINT agent_pkey PRIMARY KEY (agent_id) -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -CREATE TABLE intents -( - intent_name character varying COLLATE pg_catalog."default" NOT NULL, - agent_id integer, - endpoint_enabled boolean, - intent_id integer NOT NULL DEFAULT nextval('intents_intent_id_seq'::regclass), - CONSTRAINT intent_pkey PRIMARY KEY (intent_id), - CONSTRAINT agent_fkey FOREIGN KEY (agent_id) REFERENCES agents (agent_id) ON DELETE CASCADE -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -CREATE TABLE entities -( - entity_id integer NOT NULL DEFAULT nextval('entities_entity_id_seq'::regclass), - entity_name character varying COLLATE pg_catalog."default", - agent_id integer NOT NULL, - slot_data_type character varying COLLATE pg_catalog."default" NOT NULL DEFAULT 'NOT_USED'::character varying, - CONSTRAINT entity_pkey PRIMARY KEY (entity_id), - CONSTRAINT agent_fkey FOREIGN KEY (agent_id) - REFERENCES agents (agent_id) MATCH SIMPLE - ON UPDATE NO ACTION - ON DELETE CASCADE -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -CREATE TABLE synonyms -( - synonym_id integer NOT NULL DEFAULT nextval('synonyms_synonym_id_seq'::regclass), - agent_id integer NOT NULL, - synonym_reference character varying COLLATE pg_catalog."default" NOT NULL, - CONSTRAINT synonyms_pkey PRIMARY KEY (synonym_id), - CONSTRAINT agent_fkey FOREIGN KEY (agent_id) - REFERENCES agents (agent_id) - ON DELETE CASCADE -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -CREATE TABLE synonym_variant -( - synonym_variant_id integer NOT NULL DEFAULT nextval('synonym_variant_synonym_id_seq'::regclass), - synonym_value character varying COLLATE pg_catalog."default", - synonym_id integer, - CONSTRAINT synonym_variant_pkey PRIMARY KEY (synonym_variant_id), - CONSTRAINT synonym_fkey FOREIGN KEY (synonym_id) - REFERENCES synonyms (synonym_id) - ON DELETE CASCADE -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -CREATE TABLE settings -( - setting_name character varying COLLATE pg_catalog."default", - setting_value character varying COLLATE pg_catalog."default" -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -CREATE TABLE regex -( - regex_id integer NOT NULL DEFAULT nextval('regex_id_seq'::regclass), - regex_name character varying COLLATE pg_catalog."default", - regex_pattern character varying COLLATE pg_catalog."default", - agent_id integer NOT NULL, - CONSTRAINT regex_id_pk PRIMARY KEY (regex_id), - CONSTRAINT agent_fkey FOREIGN KEY (agent_id) REFERENCES agents (agent_id) ON DELETE CASCADE -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -CREATE TABLE response_type -( - response_type_id integer NOT NULL DEFAULT nextval('response_type_response_type_id_seq'::regclass), - response_type_text character varying COLLATE pg_catalog."default", - CONSTRAINT response_type_id_pk PRIMARY KEY (response_type_id) -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -CREATE TABLE actions -( - action_name character varying COLLATE pg_catalog."default" NOT NULL, - agent_id integer, - action_id integer NOT NULL DEFAULT nextval('actions_action_id_seq'::regclass), - CONSTRAINT action_pkey PRIMARY KEY (action_id), - CONSTRAINT agent_fkey FOREIGN KEY (agent_id) REFERENCES agents (agent_id) ON DELETE CASCADE -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -CREATE TABLE responses -( - response_id integer NOT NULL DEFAULT nextval('responses_response_id_seq'::regclass), - intent_id integer, - action_id integer, - buttons_info jsonb, - response_image_url character varying COLLATE pg_catalog."default", - response_text character varying COLLATE pg_catalog."default", - response_type integer, - CONSTRAINT response_pkey PRIMARY KEY (response_id), - CONSTRAINT intent_fkey FOREIGN KEY (intent_id) REFERENCES intents (intent_id) ON DELETE CASCADE, - CONSTRAINT action_fkey FOREIGN KEY (action_id) REFERENCES actions (action_id) ON DELETE CASCADE, - CONSTRAINT responses_response_type_fkey FOREIGN KEY (response_type) REFERENCES response_type (response_type_id) ON DELETE CASCADE -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -CREATE TABLE expressions -( - intent_id integer NOT NULL, - expression_text character varying COLLATE pg_catalog."default" NOT NULL, - expression_id integer NOT NULL DEFAULT nextval('expressions_expression_id_seq'::regclass), - CONSTRAINT expression_pkey PRIMARY KEY (expression_id), - CONSTRAINT intent_fkey FOREIGN KEY (intent_id) REFERENCES intents (intent_id) ON DELETE CASCADE -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -CREATE TABLE parameters -( - parameter_required boolean, - parameter_value character varying COLLATE pg_catalog."default", - expression_id integer NOT NULL, - parameter_start integer NOT NULL, - parameter_end integer NOT NULL, - entity_id integer, - parameter_id integer NOT NULL DEFAULT nextval('parameters_parameter_id_seq'::regclass), - CONSTRAINT parameter_pkey PRIMARY KEY (parameter_id), - CONSTRAINT expression_fkey FOREIGN KEY (expression_id) REFERENCES expressions (expression_id) ON DELETE CASCADE, - CONSTRAINT entity_fkey FOREIGN KEY (entity_id) REFERENCES entities (entity_id) ON DELETE CASCADE -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - - -CREATE TABLE messages -( - messages_id integer NOT NULL DEFAULT nextval('messages_messages_id_seq'::regclass), - "timestamp" timestamp without time zone DEFAULT timezone('utc'::text, now()), - agent_id integer, - user_id character varying COLLATE pg_catalog."default", - user_name character varying COLLATE pg_catalog."default", - message_text character varying COLLATE pg_catalog."default", - message_rich jsonb, - user_message_ind boolean, - intent_id integer, - CONSTRAINT messages_id_pkey PRIMARY KEY (messages_id), - CONSTRAINT agent_fkey FOREIGN KEY (agent_id) REFERENCES agents (agent_id) ON DELETE CASCADE, - CONSTRAINT intent_fkey FOREIGN KEY (intent_id) REFERENCES intents (intent_id) ON DELETE SET NULL -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - - -CREATE TABLE nlu_parse_log -( - parse_log_id integer NOT NULL DEFAULT nextval('parse_log_parse_log_id_seq'::regclass), - messages_id integer NOT NULL, - "timestamp" timestamp without time zone DEFAULT timezone('utc'::text, now()), - intent_name character varying COLLATE pg_catalog."default", - entity_data jsonb, - intent_confidence_pct integer, - user_response_time_ms integer, - nlu_response_time_ms integer, - CONSTRAINT parse_log_id_pkey PRIMARY KEY (parse_log_id), - CONSTRAINT messages_id_pk FOREIGN KEY (messages_id) REFERENCES messages (messages_id) MATCH FULL ON DELETE CASCADE -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -CREATE TABLE core_parse_log -( - core_parse_log_id integer NOT NULL DEFAULT nextval('core_parse_log_core_parse_log_id_seq'::regclass), - messages_id integer NOT NULL, - "timestamp" timestamp without time zone DEFAULT timezone('utc'::text, now()), - action_name character varying COLLATE pg_catalog."default", - slots_data jsonb, - user_response_time_ms integer, - core_response_time_ms integer, - CONSTRAINT core_parse_log_id PRIMARY KEY (core_parse_log_id), - CONSTRAINT messages_id_pk FOREIGN KEY (messages_id) REFERENCES messages (messages_id) MATCH FULL ON DELETE CASCADE -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -CREATE TABLE nlu_log -( - log_id integer NOT NULL DEFAULT nextval('nlu_log_log_id_seq'::regclass), - "timestamp" timestamp without time zone DEFAULT timezone('utc'::text, now()), - ip_address character varying COLLATE pg_catalog."default", - query character varying COLLATE pg_catalog."default", - event_data character varying COLLATE pg_catalog."default", - event_type character varying COLLATE pg_catalog."default", - CONSTRAINT nlu_log_pkey PRIMARY KEY (log_id) -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - --- nlu_parse_log correspondance table with entities table -CREATE TABLE messages_entities -( - message_id integer, - entity_id integer, - entity_start integer NOT NULL, - entity_end integer NOT NULL, - entity_value varchar, - entity_confidence integer NOT NULL, - CONSTRAINT message_entity_pkey PRIMARY KEY (message_id, entity_id, entity_start, entity_end), - CONSTRAINT message_fkey FOREIGN KEY (message_id) REFERENCES messages (messages_id) ON DELETE CASCADE, - CONSTRAINT entity_fkey FOREIGN KEY (entity_id) REFERENCES entities (entity_id) ON DELETE CASCADE -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -/* Views */ -CREATE OR REPLACE VIEW intents_most_used AS -select intent_name, agents.agent_id, agents.agent_name, grouped_intents.grp_intent_count from intents -left outer join (select count(*) as grp_intent_count, nlu_parse_log.intent_name as grp_intent,messages.agent_id as grp_agent_id from nlu_parse_log, messages -where nlu_parse_log.messages_id=messages.messages_id group by nlu_parse_log.intent_name,grp_agent_id) as grouped_intents -on intent_name = grouped_intents.grp_intent, agents where intents.agent_id=agents.agent_id order by agents.agent_id; - -CREATE OR REPLACE VIEW avg_nlu_response_times_30_days AS -select round(avg(nlu_response_time_ms)::integer,0), -(to_char(nlu_parse_log."timestamp", 'MM/DD'::text)) as month_date from nlu_parse_log -GROUP BY (to_char(nlu_parse_log."timestamp", 'MM/DD'::text)) -ORDER BY (to_char(nlu_parse_log."timestamp", 'MM/DD'::text)) asc -LIMIT 30; - -CREATE OR REPLACE VIEW avg_user_response_times_30_days AS -select round(avg(user_response_time_ms)::integer,0), -(to_char(nlu_parse_log."timestamp", 'MM/DD'::text)) as month_date from nlu_parse_log -GROUP BY (to_char(nlu_parse_log."timestamp", 'MM/DD'::text)) -ORDER BY (to_char(nlu_parse_log."timestamp", 'MM/DD'::text)) asc -LIMIT 30; - -CREATE OR REPLACE VIEW active_user_count_12_months AS -select count(distinct(messages.user_id)) as count_users, -(to_char(nlu_parse_log."timestamp", 'MM/YYYY'::text)) as month_year from nlu_parse_log, messages where nlu_parse_log.messages_id=messages.messages_id -GROUP BY (to_char(nlu_parse_log."timestamp", 'MM/YYYY'::text)) ORDER BY (to_char(nlu_parse_log."timestamp", 'MM/YYYY'::text)) asc LIMIT 12; - -CREATE OR REPLACE VIEW active_user_count_30_days AS -SELECT count(distinct(messages.user_id)) as user_count, -(to_char(nlu_parse_log."timestamp", 'MM/DD'::text)) as month_date from nlu_parse_log, messages where nlu_parse_log.messages_id=messages.messages_id -GROUP BY (to_char(nlu_parse_log."timestamp", 'MM/DD'::text)) -ORDER BY (to_char(nlu_parse_log."timestamp", 'MM/DD'::text)) asc -LIMIT 30; - -CREATE OR REPLACE VIEW expression_parameters AS -SELECT parameters.expression_id, -parameters.parameter_required, -parameters.parameter_value, -parameters.parameter_start, -parameters.parameter_end, -parameters.entity_id, -parameters.parameter_id, -expressions.intent_id, -entities.entity_name -FROM parameters -JOIN expressions ON parameters.expression_id = expressions.expression_id -LEFT JOIN entities ON entities.entity_id = parameters.entity_id; - -CREATE OR REPLACE VIEW intent_usage_total AS -SELECT count(*) AS count -FROM nlu_log -WHERE nlu_log.event_type::text = 'parse'::text; - -CREATE OR REPLACE VIEW request_usage_total AS -SELECT count(*) AS count -FROM nlu_log; - -CREATE OR REPLACE VIEW unique_intent_entities AS -SELECT DISTINCT intents.intent_id, -entities.entity_name -FROM entities -RIGHT JOIN parameters ON parameters.entity_id = entities.entity_id -RIGHT JOIN expressions ON expressions.expression_id = parameters.expression_id -JOIN intents ON intents.intent_id = expressions.intent_id; - -CREATE OR REPLACE VIEW intent_usage_by_day AS -SELECT count(*) AS count, -to_char(nlu_log."timestamp", 'MM/DD'::text) AS to_char -FROM nlu_log -GROUP BY (to_char(nlu_log."timestamp", 'MM/DD'::text)) -ORDER BY (to_char(nlu_log."timestamp", 'MM/DD'::text)) asc -LIMIT 30; - -CREATE OR REPLACE VIEW messages_expressions AS -SELECT agents.agent_id, agents.agent_name, -msg.messages_id, msg.timestamp, msg.user_id, msg.user_name, msg.message_text, msg.message_rich, msg.user_message_ind, -intents.intent_id, intents.intent_name, -expressions.expression_id -FROM messages AS msg -INNER JOIN agents ON msg.agent_id = agents.agent_id -LEFT OUTER JOIN intents ON msg.intent_id = intents.intent_id -LEFT JOIN expressions ON (intents.intent_id = expressions.intent_id) AND (msg.message_text = expressions.expression_text) -ORDER BY timestamp, user_id; - -CREATE OR REPLACE VIEW entities_parameters AS -SELECT -agents.agent_id, agents.agent_name, -msg.messages_id, msg.timestamp, msg.user_id, msg.user_name, msg.message_text, msg.user_message_ind, -entities.entity_id, entities.entity_name, entities.slot_data_type, -msgEnt.entity_start, msgEnt.entity_end, -param.parameter_value, param.parameter_id -FROM messages AS msg -INNER JOIN agents ON msg.agent_id = agents.agent_id -LEFT OUTER JOIN messages_entities AS msgEnt ON msg.messages_id = msgEnt.message_id -LEFT OUTER JOIN entities ON msgEnt.entity_id = entities.entity_id -LEFT OUTER JOIN intents ON msg.intent_id = intents.intent_id -LEFT OUTER JOIN expressions ON (intents.intent_id = expressions.intent_id) AND (msg.message_text = expressions.expression_text) -LEFT OUTER JOIN parameters AS param ON (msgEnt.entity_id = param.entity_id) AND (msgEnt.entity_value = param.parameter_value) AND (param.expression_id = expressions.expression_id) -ORDER BY timestamp, user_id; - -GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA rasa_ui TO :postgres_user; -GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA rasa_ui TO :postgres_user; - -/* Static Data */ -INSERT INTO response_type (response_type_text) VALUES ('DEFAULT'),('RICH TEXT'); -INSERT INTO settings (setting_name,setting_value) VALUES ('refresh_time',60000); diff --git a/resources/database/migration/V0.9.0__Database_creation.sql b/resources/database/migration/V0.9.0__Database_creation.sql deleted file mode 100644 index fb4f4a3..0000000 --- a/resources/database/migration/V0.9.0__Database_creation.sql +++ /dev/null @@ -1,332 +0,0 @@ -CREATE SCHEMA IF NOT EXISTS public -AUTHORIZATION ${postgres_user}; - -COMMENT ON SCHEMA public -IS 'standard public schema'; - -GRANT ALL ON SCHEMA public TO ${postgres_user}; - -GRANT ALL ON SCHEMA public TO PUBLIC; - -/* Sequences */ - -CREATE SEQUENCE public.agentidgen -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE public.agents_agent_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE public.entities_entity_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE public.entityidgen -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE public.expressionidgen -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE public.expressions_expression_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE public.intentidgen -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE public.intents_intent_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE public.nlu_log_log_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - - -CREATE SEQUENCE public.parameteridgen -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE public.parameters_parameter_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE public.responseidgen -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE public.responses_response_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE public.response_type_response_type_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE public.synonym_variant_synonym_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -CREATE SEQUENCE public.synonyms_synonym_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - - -/* Tables */ - -CREATE TABLE public.agents -( - agent_id integer NOT NULL DEFAULT nextval('agents_agent_id_seq'::regclass), - agent_name character varying COLLATE pg_catalog."default", - CONSTRAINT agent_pkey PRIMARY KEY (agent_id) -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -CREATE TABLE public.entities -( - entity_name character varying COLLATE pg_catalog."default", - entity_id integer NOT NULL DEFAULT nextval('entities_entity_id_seq'::regclass) -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -CREATE TABLE public.synonyms -( - synonym_id integer NOT NULL DEFAULT nextval('synonyms_synonym_id_seq'::regclass), - entity_id integer NOT NULL, - synonym_reference character varying COLLATE pg_catalog."default" NOT NULL, - CONSTRAINT synonyms_pkey PRIMARY KEY (synonym_id) -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -CREATE TABLE public.synonym_variant -( - synonym_variant_id integer NOT NULL DEFAULT nextval('synonym_variant_synonym_id_seq'::regclass), - synonym_value character varying COLLATE pg_catalog."default", - synonym_id integer, - CONSTRAINT synonym_variant_pkey PRIMARY KEY (synonym_variant_id) -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -CREATE TABLE public.settings -( - setting_name character varying COLLATE pg_catalog."default", - setting_value character varying COLLATE pg_catalog."default" -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -CREATE TABLE public.response_type -( - response_type_id integer NOT NULL DEFAULT nextval('response_type_response_type_id_seq'::regclass), - response_type_text character varying COLLATE pg_catalog."default", - CONSTRAINT response_type_id_pk PRIMARY KEY (response_type_id) -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -CREATE TABLE public.responses -( - intent_id integer NOT NULL, - response_text character varying COLLATE pg_catalog."default", - response_type integer REFERENCES response_type (response_type_id), - response_id integer NOT NULL DEFAULT nextval('responses_response_id_seq'::regclass) -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -CREATE TABLE public.parameters -( - parameter_required boolean, - parameter_value character varying COLLATE pg_catalog."default", - expression_id integer NOT NULL, - parameter_start integer NOT NULL, - parameter_end integer NOT NULL, - entity_id integer, - parameter_id integer NOT NULL DEFAULT nextval('parameters_parameter_id_seq'::regclass) -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -CREATE TABLE public.nlu_log -( - log_id integer NOT NULL DEFAULT nextval('nlu_log_log_id_seq'::regclass), - "timestamp" timestamp without time zone DEFAULT timezone('utc'::text, now()), - ip_address character varying COLLATE pg_catalog."default", - query character varying COLLATE pg_catalog."default", - event_data character varying COLLATE pg_catalog."default", - event_type character varying COLLATE pg_catalog."default", - CONSTRAINT nlu_log_pkey PRIMARY KEY (log_id) -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -CREATE TABLE public.intents -( - intent_name character varying COLLATE pg_catalog."default" NOT NULL, - agent_id integer, - intent_id integer NOT NULL DEFAULT nextval('intents_intent_id_seq'::regclass) -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -CREATE TABLE public.expressions -( - intent_id integer NOT NULL, - expression_text character varying COLLATE pg_catalog."default" NOT NULL, - expression_id integer NOT NULL DEFAULT nextval('expressions_expression_id_seq'::regclass) -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - - -/* Views */ - -CREATE OR REPLACE VIEW public.entity_synonym_variants AS -SELECT synonyms.entity_id, -synonyms.synonym_id, -synonym_variant.synonym_variant_id, -synonym_variant.synonym_value, -synonyms.synonym_reference -FROM synonym_variant -JOIN synonyms ON synonyms.synonym_id = synonym_variant.synonym_id; - - -CREATE OR REPLACE VIEW public.expression_parameters AS -SELECT parameters.expression_id, -parameters.parameter_required, -parameters.parameter_value, -parameters.parameter_start, -parameters.parameter_end, -parameters.entity_id, -parameters.parameter_id, -expressions.intent_id, -entities.entity_name -FROM parameters -JOIN expressions ON parameters.expression_id = expressions.expression_id -LEFT JOIN entities ON entities.entity_id = parameters.entity_id; - - -CREATE OR REPLACE VIEW public.expression_parameters AS -SELECT parameters.expression_id, -parameters.parameter_required, -parameters.parameter_value, -parameters.parameter_start, -parameters.parameter_end, -parameters.entity_id, -parameters.parameter_id, -expressions.intent_id, -entities.entity_name -FROM parameters -JOIN expressions ON parameters.expression_id = expressions.expression_id -LEFT JOIN entities ON entities.entity_id = parameters.entity_id; - -CREATE OR REPLACE VIEW public.intent_usage_total AS -SELECT count(*) AS count -FROM nlu_log -WHERE nlu_log.event_type::text = 'parse'::text; - -CREATE OR REPLACE VIEW public.request_usage_total AS -SELECT count(*) AS count -FROM nlu_log; - -CREATE OR REPLACE VIEW public.unique_intent_entities AS -SELECT DISTINCT intents.intent_id, -entities.entity_name -FROM entities -RIGHT JOIN parameters ON parameters.entity_id = entities.entity_id -RIGHT JOIN expressions ON expressions.expression_id = parameters.expression_id -JOIN intents ON intents.intent_id = expressions.intent_id; - -CREATE OR REPLACE VIEW public.intent_usage_by_day AS -SELECT count(*) AS count, -to_char(nlu_log."timestamp", 'MM/DD'::text) AS to_char -FROM nlu_log -GROUP BY (to_char(nlu_log."timestamp", 'MM/DD'::text)) -ORDER BY (to_char(nlu_log."timestamp", 'MM/DD'::text)) -LIMIT 30; - -GRANT ALL ON ALL TABLES IN SCHEMA public TO ${postgres_user}; -GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO ${postgres_user}; - - -/* Static Data */ -INSERT INTO response_type (response_type_text) VALUES ('DEFAULT'),('RICH TEXT'); -INSERT INTO settings (setting_name,setting_value) VALUES ('refresh_time',60000); diff --git a/resources/database/migration/V1.0.0__application_version_1.sql b/resources/database/migration/V1.0.0__application_version_1.sql deleted file mode 100644 index 999113d..0000000 --- a/resources/database/migration/V1.0.0__application_version_1.sql +++ /dev/null @@ -1,108 +0,0 @@ -/*Alters to release 1.0 version*/ -CREATE SEQUENCE public.parse_log_parse_log_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -GRANT ALL ON SEQUENCE public.parse_log_parse_log_id_seq TO ${postgres_user}; - -ALTER TABLE public.agents ADD COLUMN endpoint_enabled boolean DEFAULT FALSE; -ALTER TABLE public.agents ADD COLUMN endpoint_url character varying COLLATE pg_catalog."default"; -ALTER TABLE public.agents ADD COLUMN basic_auth_username character varying COLLATE pg_catalog."default"; -ALTER TABLE public.agents ADD COLUMN basic_auth_password character varying COLLATE pg_catalog."default"; -ALTER TABLE public.agents ADD COLUMN client_secret_key text NOT NULL default md5(random()::text); - -ALTER TABLE public.intents ADD COLUMN endpoint_enabled boolean; - -CREATE TABLE public.nlu_parse_log -( - parse_log_id integer NOT NULL DEFAULT nextval('parse_log_parse_log_id_seq'::regclass), - "timestamp" timestamp without time zone DEFAULT timezone('utc'::text, now()), - agent_id integer, - request_text character varying COLLATE pg_catalog."default", - intent_name character varying COLLATE pg_catalog."default", - entity_data jsonb, - response_text character varying COLLATE pg_catalog."default", - response_rich_data jsonb, - intent_confidence_pct integer, - user_id character varying COLLATE pg_catalog."default", - user_name character varying COLLATE pg_catalog."default", - user_response_time_ms integer, - nlu_response_time_ms integer, - CONSTRAINT parse_log_id_pkey PRIMARY KEY (parse_log_id) -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -GRANT ALL ON TABLE public.nlu_parse_log TO ${postgres_user}; - -CREATE OR REPLACE VIEW public.intents_most_used AS -select intent_name, agents.agent_id, agents.agent_name, grouped_intents.grp_intent_count from intents -left outer join (select count(*) as grp_intent_count, intent_name as grp_intent,agent_id as grp_agent_id from nlu_parse_log -group by (intent_name,agent_id)) as grouped_intents -on intent_name = grouped_intents.grp_intent, agents where intents.agent_id=agents.agent_id order by agents.agent_id; - -GRANT ALL ON TABLE public.intents_most_used TO ${postgres_user}; - -CREATE OR REPLACE VIEW public.avg_nlu_response_times_30_days AS -select round(avg(nlu_response_time_ms)::integer,0), -(to_char(nlu_parse_log."timestamp", 'MM/DD'::text)) as month_date from nlu_parse_log -GROUP BY (to_char(nlu_parse_log."timestamp", 'MM/DD'::text)) -ORDER BY (to_char(nlu_parse_log."timestamp", 'MM/DD'::text)) desc -LIMIT 30; - -GRANT ALL ON TABLE public.avg_nlu_response_times_30_days TO ${postgres_user}; - -CREATE OR REPLACE VIEW public.avg_user_response_times_30_days AS -select round(avg(user_response_time_ms)::integer,0), -(to_char(nlu_parse_log."timestamp", 'MM/DD'::text)) as month_date from nlu_parse_log -GROUP BY (to_char(nlu_parse_log."timestamp", 'MM/DD'::text)) -ORDER BY (to_char(nlu_parse_log."timestamp", 'MM/DD'::text)) desc -LIMIT 30; - -GRANT ALL ON TABLE public.avg_user_response_times_30_days TO ${postgres_user}; - -CREATE OR REPLACE VIEW public.active_user_count_12_months AS -select count(distinct(user_id)) as count_users, -(to_char(nlu_parse_log."timestamp", 'MM/YYYY'::text)) as month_year from nlu_parse_log -GROUP BY (to_char(nlu_parse_log."timestamp", 'MM/YYYY'::text)) -ORDER BY (to_char(nlu_parse_log."timestamp", 'MM/YYYY'::text)) desc -LIMIT 12; - -GRANT ALL ON TABLE public.active_user_count_12_months TO ${postgres_user}; - -CREATE OR REPLACE VIEW public.active_user_count_30_days AS -SELECT count(distinct(user_id)) as user_count, -(to_char(nlu_parse_log."timestamp", 'MM/DD'::text)) as month_date from nlu_parse_log -GROUP BY (to_char(nlu_parse_log."timestamp", 'MM/DD'::text)) -ORDER BY (to_char(nlu_parse_log."timestamp", 'MM/DD'::text)) desc -LIMIT 30; - -GRANT ALL ON TABLE public.active_user_count_30_days TO ${postgres_user}; - -CREATE SEQUENCE public.regex_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -GRANT ALL ON SEQUENCE public.regex_id_seq TO ${postgres_user}; - -CREATE TABLE public.regex -( - regex_id integer NOT NULL DEFAULT nextval('regex_id_seq'::regclass), - regex_name character varying COLLATE pg_catalog."default", - regex_pattern character varying COLLATE pg_catalog."default", - CONSTRAINT regex_id_pk PRIMARY KEY (regex_id) -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -GRANT ALL ON TABLE public.regex TO ${postgres_user}; diff --git a/resources/database/migration/V1.0.1__Updates_until_2.1.sql b/resources/database/migration/V1.0.1__Updates_until_2.1.sql deleted file mode 100644 index 93f3281..0000000 --- a/resources/database/migration/V1.0.1__Updates_until_2.1.sql +++ /dev/null @@ -1,66 +0,0 @@ -/*Alters after release 1.0 version*/ - -CREATE SEQUENCE public.actions_action_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -GRANT ALL ON SEQUENCE public.actions_action_id_seq TO ${postgres_user}; - -CREATE SEQUENCE public.core_parse_log_core_parse_log_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -GRANT ALL ON SEQUENCE public.core_parse_log_core_parse_log_id_seq TO ${postgres_user}; - -CREATE TABLE public.actions -( - action_name character varying COLLATE pg_catalog."default" NOT NULL, - agent_id integer, - action_id integer NOT NULL DEFAULT nextval('actions_action_id_seq'::regclass) -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -GRANT ALL ON TABLE public.actions TO ${postgres_user}; - -CREATE TABLE public.core_parse_log -( - core_parse_log_id integer NOT NULL DEFAULT nextval('core_parse_log_core_parse_log_id_seq'::regclass), - "timestamp" timestamp without time zone DEFAULT timezone('utc'::text, now()), - agent_id integer, - request_text character varying COLLATE pg_catalog."default", - action_data jsonb[], - tracker_data jsonb[], - response_text jsonb[], - response_rich_data jsonb[], - user_id character varying COLLATE pg_catalog."default", - user_name character varying COLLATE pg_catalog."default", - user_response_time_ms integer, - core_response_time_ms integer, - CONSTRAINT core_parse_log_id PRIMARY KEY (core_parse_log_id) -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -GRANT ALL ON TABLE public.core_parse_log TO ${postgres_user}; - -ALTER TABLE public.responses ADD COLUMN action_id integer; -ALTER TABLE public.responses ADD COLUMN buttons_info jsonb; -ALTER TABLE public.responses ADD COLUMN response_image_url character varying COLLATE pg_catalog."default"; -ALTER TABLE public.responses ALTER COLUMN intent_id DROP NOT NULL; - -ALTER TABLE public.agents ADD COLUMN story_details text COLLATE pg_catalog."default"; -ALTER TABLE public.agents ADD COLUMN rasa_core_enabled boolean DEFAULT FALSE; - -ALTER TABLE public.entities ADD COLUMN slot_data_type character varying COLLATE pg_catalog."default" NOT NULL default 'NOT_USED'; -ALTER TABLE public.entities ADD COLUMN agent_id integer; diff --git a/resources/database/migration/V2.1.0___Update_for_version_2.1.sql b/resources/database/migration/V2.1.0___Update_for_version_2.1.sql deleted file mode 100644 index 7b8b86f..0000000 --- a/resources/database/migration/V2.1.0___Update_for_version_2.1.sql +++ /dev/null @@ -1,79 +0,0 @@ -/*Alters after release 2.1 version*/ -CREATE SEQUENCE public.messages_messages_id_seq -INCREMENT 1 -START 1 -MINVALUE 1 -MAXVALUE 9223372036854775807 -CACHE 1; - -GRANT ALL ON SEQUENCE public.messages_messages_id_seq TO ${postgres_user}; - -CREATE TABLE public.messages -( - messages_id integer NOT NULL DEFAULT nextval('messages_messages_id_seq'::regclass), - "timestamp" timestamp without time zone DEFAULT timezone('utc'::text, now()), - agent_id integer, - user_id character varying COLLATE pg_catalog."default", - user_name character varying COLLATE pg_catalog."default", - message_text character varying COLLATE pg_catalog."default", - message_rich jsonb, - user_message_ind boolean, - CONSTRAINT messages_id_pkey PRIMARY KEY (messages_id) -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -GRANT ALL ON TABLE public.messages TO ${postgres_user}; - -DROP VIEW public.intents_most_used; -DROP VIEW public.active_user_count_12_months; -DROP VIEW public.active_user_count_30_days; - -ALTER TABLE public.nlu_parse_log ADD COLUMN messages_id integer; -ALTER TABLE public.nlu_parse_log ADD CONSTRAINT messages_id_pk FOREIGN KEY (messages_id) REFERENCES public.messages (messages_id) MATCH FULL; -ALTER TABLE public.nlu_parse_log DROP COLUMN agent_id RESTRICT; - -ALTER TABLE public.nlu_parse_log DROP COLUMN request_text RESTRICT; -ALTER TABLE public.nlu_parse_log DROP COLUMN response_text RESTRICT; -ALTER TABLE public.nlu_parse_log DROP COLUMN response_rich_data RESTRICT; -ALTER TABLE public.nlu_parse_log DROP COLUMN user_id RESTRICT; -ALTER TABLE public.nlu_parse_log DROP COLUMN user_name RESTRICT; - -ALTER TABLE public.core_parse_log ADD COLUMN messages_id integer; -ALTER TABLE public.core_parse_log ADD CONSTRAINT messages_id_pk FOREIGN KEY (messages_id) REFERENCES public.messages (messages_id) MATCH FULL; -ALTER TABLE public.core_parse_log DROP COLUMN agent_id RESTRICT; -ALTER TABLE public.core_parse_log DROP COLUMN request_text RESTRICT; -ALTER TABLE public.core_parse_log DROP COLUMN response_text RESTRICT; -ALTER TABLE public.core_parse_log DROP COLUMN response_rich_data RESTRICT; -ALTER TABLE public.core_parse_log DROP COLUMN user_id RESTRICT; -ALTER TABLE public.core_parse_log DROP COLUMN user_name RESTRICT; -ALTER TABLE public.core_parse_log DROP COLUMN tracker_data RESTRICT; -ALTER TABLE public.core_parse_log ADD COLUMN slots_data jsonb; -ALTER TABLE public.core_parse_log DROP COLUMN action_data; -ALTER TABLE public.core_parse_log ADD COLUMN action_name character varying COLLATE pg_catalog."default"; - -CREATE OR REPLACE VIEW public.intents_most_used AS -select intent_name, agents.agent_id, agents.agent_name, grouped_intents.grp_intent_count from intents -left outer join (select count(*) as grp_intent_count, nlu_parse_log.intent_name as grp_intent,messages.agent_id as grp_agent_id from nlu_parse_log, messages -where nlu_parse_log.messages_id=messages.messages_id group by nlu_parse_log.intent_name,grp_agent_id) as grouped_intents -on intent_name = grouped_intents.grp_intent, agents where intents.agent_id=agents.agent_id order by agents.agent_id; - -GRANT ALL ON TABLE public.intents_most_used TO ${postgres_user}; - -CREATE OR REPLACE VIEW public.active_user_count_12_months AS -select count(distinct(messages.user_id)) as count_users, -(to_char(nlu_parse_log."timestamp", 'MM/YYYY'::text)) as month_year from nlu_parse_log, messages where nlu_parse_log.messages_id=messages.messages_id -GROUP BY (to_char(nlu_parse_log."timestamp", 'MM/YYYY'::text)) ORDER BY (to_char(nlu_parse_log."timestamp", 'MM/YYYY'::text)) asc LIMIT 12; - -GRANT ALL ON TABLE public.active_user_count_12_months TO ${postgres_user}; - -CREATE OR REPLACE VIEW public.active_user_count_30_days AS -SELECT count(distinct(messages.user_id)) as user_count, -(to_char(nlu_parse_log."timestamp", 'MM/DD'::text)) as month_date from nlu_parse_log, messages where nlu_parse_log.messages_id=messages.messages_id -GROUP BY (to_char(nlu_parse_log."timestamp", 'MM/DD'::text)) -ORDER BY (to_char(nlu_parse_log."timestamp", 'MM/DD'::text)) asc -LIMIT 30; - -GRANT ALL ON TABLE public.active_user_count_30_days TO ${postgres_user}; diff --git a/resources/database/migration/V2.3.0__Fix_missing_constraints.sql b/resources/database/migration/V2.3.0__Fix_missing_constraints.sql deleted file mode 100644 index dd98525..0000000 --- a/resources/database/migration/V2.3.0__Fix_missing_constraints.sql +++ /dev/null @@ -1,17 +0,0 @@ -ALTER TABLE public.actions ADD CONSTRAINT action_pkey PRIMARY KEY (action_id); -ALTER TABLE public.actions ADD CONSTRAINT agent_fkey FOREIGN KEY (agent_id) REFERENCES public.agents (agent_id) ON DELETE CASCADE; -ALTER TABLE public.entities ADD CONSTRAINT entity_pkey PRIMARY KEY (entity_id); -ALTER TABLE public.entities ADD CONSTRAINT agent_fkey FOREIGN KEY (agent_id) REFERENCES public.agents (agent_id) ON DELETE CASCADE; -ALTER TABLE public.intents ADD CONSTRAINT intent_pkey PRIMARY KEY (intent_id); -ALTER TABLE public.intents ADD CONSTRAINT agent_fkey FOREIGN KEY (agent_id) REFERENCES public.agents (agent_id) ON DELETE CASCADE; -ALTER TABLE public.expressions ADD CONSTRAINT expression_pkey PRIMARY KEY (expression_id); -ALTER TABLE public.expressions ADD CONSTRAINT intent_fkey FOREIGN KEY (intent_id) REFERENCES public.intents (intent_id) ON DELETE CASCADE; -ALTER TABLE public.messages ADD CONSTRAINT agent_fkey FOREIGN KEY (agent_id) REFERENCES public.agents (agent_id) ON DELETE CASCADE; -ALTER TABLE public.parameters ADD CONSTRAINT parameter_pkey PRIMARY KEY (parameter_id); -ALTER TABLE public.parameters ADD CONSTRAINT expression_fkey FOREIGN KEY (expression_id) REFERENCES public.expressions (expression_id) ON DELETE CASCADE; -ALTER TABLE public.parameters ADD CONSTRAINT entity_fkey FOREIGN KEY (entity_id) REFERENCES public.entities (entity_id) ON DELETE CASCADE; -ALTER TABLE public.responses ADD CONSTRAINT response_pkey PRIMARY KEY (response_id); -ALTER TABLE public.responses ADD CONSTRAINT intent_fkey FOREIGN KEY (intent_id) REFERENCES public.intents (intent_id) ON DELETE CASCADE; -ALTER TABLE public.responses ADD CONSTRAINT action_fkey FOREIGN KEY (action_id) REFERENCES public.actions (action_id) ON DELETE CASCADE; -ALTER TABLE public.synonym_variant ADD CONSTRAINT synonym_fkey FOREIGN KEY (synonym_id) REFERENCES public.synonyms (synonym_id) ON DELETE CASCADE; -ALTER TABLE public.synonyms ADD CONSTRAINT entity_fkey FOREIGN KEY (entity_id) REFERENCES public.entities (entity_id) ON DELETE CASCADE; diff --git a/resources/database/migration/V2.3.1__schema_migration.sql b/resources/database/migration/V2.3.1__schema_migration.sql deleted file mode 100644 index 2eec0bf..0000000 --- a/resources/database/migration/V2.3.1__schema_migration.sql +++ /dev/null @@ -1,62 +0,0 @@ --- Create schema -CREATE SCHEMA IF NOT EXISTS "rasa_ui"; -COMMENT ON SCHEMA "rasa_ui" IS 'Standard rasa UI schema'; -GRANT ALL ON SCHEMA "rasa_ui" TO ${postgres_user}; - - --- Migrate tables views and sequences to rasa_ui schema. -ALTER SEQUENCE IF EXISTS agentidgen SET SCHEMA rasa_ui; -ALTER SEQUENCE IF EXISTS agents_agent_id_seq SET SCHEMA rasa_ui; -ALTER SEQUENCE IF EXISTS entities_entity_id_seq SET SCHEMA rasa_ui; -ALTER SEQUENCE IF EXISTS entityidgen SET SCHEMA rasa_ui; -ALTER SEQUENCE IF EXISTS expressionidgen SET SCHEMA rasa_ui; -ALTER SEQUENCE IF EXISTS expressions_expression_id_seq SET SCHEMA rasa_ui; -ALTER SEQUENCE IF EXISTS intentidgen SET SCHEMA rasa_ui; -ALTER SEQUENCE IF EXISTS intents_intent_id_seq SET SCHEMA rasa_ui; -ALTER SEQUENCE IF EXISTS actions_action_id_seq SET SCHEMA rasa_ui; -ALTER SEQUENCE IF EXISTS nlu_log_log_id_seq SET SCHEMA rasa_ui; -ALTER SEQUENCE IF EXISTS parse_log_parse_log_id_seq SET SCHEMA rasa_ui; -ALTER SEQUENCE IF EXISTS core_parse_log_core_parse_log_id_seq SET SCHEMA rasa_ui; -ALTER SEQUENCE IF EXISTS messages_messages_id_seq SET SCHEMA rasa_ui; -ALTER SEQUENCE IF EXISTS parameteridgen SET SCHEMA rasa_ui; -ALTER SEQUENCE IF EXISTS parameters_parameter_id_seq SET SCHEMA rasa_ui; -ALTER SEQUENCE IF EXISTS responseidgen SET SCHEMA rasa_ui; -ALTER SEQUENCE IF EXISTS responses_response_id_seq SET SCHEMA rasa_ui; -ALTER SEQUENCE IF EXISTS response_type_response_type_id_seq SET SCHEMA rasa_ui; -ALTER SEQUENCE IF EXISTS synonym_variant_synonym_id_seq SET SCHEMA rasa_ui; -ALTER SEQUENCE IF EXISTS synonyms_synonym_id_seq SET SCHEMA rasa_ui; -ALTER SEQUENCE IF EXISTS regex_id_seq SET SCHEMA rasa_ui; - -ALTER TABLE IF EXISTS agents SET SCHEMA rasa_ui; -ALTER TABLE IF EXISTS entities SET SCHEMA rasa_ui; -ALTER TABLE IF EXISTS synonyms SET SCHEMA rasa_ui; -ALTER TABLE IF EXISTS synonym_variant SET SCHEMA rasa_ui; -ALTER TABLE IF EXISTS settings SET SCHEMA rasa_ui; -ALTER TABLE IF EXISTS regex SET SCHEMA rasa_ui; -ALTER TABLE IF EXISTS response_type SET SCHEMA rasa_ui; -ALTER TABLE IF EXISTS responses SET SCHEMA rasa_ui; -ALTER TABLE IF EXISTS parameters SET SCHEMA rasa_ui; -ALTER TABLE IF EXISTS messages SET SCHEMA rasa_ui; -ALTER TABLE IF EXISTS nlu_parse_log SET SCHEMA rasa_ui; -ALTER TABLE IF EXISTS core_parse_log SET SCHEMA rasa_ui; -ALTER TABLE IF EXISTS nlu_log SET SCHEMA rasa_ui; -ALTER TABLE IF EXISTS intents SET SCHEMA rasa_ui; -ALTER TABLE IF EXISTS actions SET SCHEMA rasa_ui; -ALTER TABLE IF EXISTS expressions SET SCHEMA rasa_ui; - -ALTER VIEW IF EXISTS intents_most_used SET SCHEMA rasa_ui; -ALTER VIEW IF EXISTS avg_nlu_response_times_30_days SET SCHEMA rasa_ui; -ALTER VIEW IF EXISTS avg_user_response_times_30_days SET SCHEMA rasa_ui; -ALTER VIEW IF EXISTS active_user_count_12_months SET SCHEMA rasa_ui; -ALTER VIEW IF EXISTS active_user_count_30_days SET SCHEMA rasa_ui; -ALTER VIEW IF EXISTS entity_synonym_variants SET SCHEMA rasa_ui; -ALTER VIEW IF EXISTS expression_parameters SET SCHEMA rasa_ui; -ALTER VIEW IF EXISTS intent_usage_total SET SCHEMA rasa_ui; -ALTER VIEW IF EXISTS request_usage_total SET SCHEMA rasa_ui; -ALTER VIEW IF EXISTS unique_intent_entities SET SCHEMA rasa_ui; -ALTER VIEW IF EXISTS intent_usage_by_day SET SCHEMA rasa_ui; - -DO $$ -BEGIN - EXECUTE 'ALTER DATABASE '|| current_database()||' set search_path TO rasa_ui,''$user'',public'; -END $$ diff --git a/resources/database/migration/V2.3.2__add_log_correspondance_table.sql b/resources/database/migration/V2.3.2__add_log_correspondance_table.sql deleted file mode 100644 index 6400a35..0000000 --- a/resources/database/migration/V2.3.2__add_log_correspondance_table.sql +++ /dev/null @@ -1,65 +0,0 @@ -SET search_path TO rasa_ui; - --- Add On delete CASCADE when a message is deleted from the messages table - -ALTER TABLE nlu_parse_log -DROP CONSTRAINT messages_id_pk, -ADD CONSTRAINT messages_id_pk FOREIGN KEY (messages_id) REFERENCES messages (messages_id) MATCH FULL ON DELETE CASCADE; - -ALTER TABLE core_parse_log -DROP CONSTRAINT messages_id_pk, -ADD CONSTRAINT messages_id_pk FOREIGN KEY (messages_id) REFERENCES messages (messages_id) MATCH FULL ON DELETE CASCADE; - --- nlu_parse_log correspondance table with entities table -CREATE TABLE IF NOT EXISTS messages_entities -( - message_id integer, - entity_id integer, - entity_start integer NOT NULL, - entity_end integer NOT NULL, - entity_value varchar, - entity_confidence integer NOT NULL, - CONSTRAINT message_entity_pkey PRIMARY KEY (message_id, entity_id, entity_start, entity_end), - CONSTRAINT message_fkey FOREIGN KEY (message_id) REFERENCES messages (messages_id) ON DELETE CASCADE, - CONSTRAINT entity_fkey FOREIGN KEY (entity_id) REFERENCES entities (entity_id) ON DELETE CASCADE -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -GRANT ALL ON TABLE messages_entities TO ${postgres_user}; - -ALTER TABLE IF EXISTS messages ADD COLUMN intent_id integer; -ALTER TABLE IF EXISTS messages ADD CONSTRAINT intent_fkey FOREIGN KEY (intent_id) REFERENCES intents (intent_id) ON DELETE SET NULL; - -CREATE OR REPLACE VIEW messages_expressions AS -SELECT agents.agent_id, agents.agent_name, -msg.messages_id, msg.timestamp, msg.user_id, msg.user_name, msg.message_text, msg.message_rich, msg.user_message_ind, -intents.intent_id, intents.intent_name, -expressions.expression_id -FROM messages AS msg -INNER JOIN agents ON msg.agent_id = agents.agent_id -LEFT OUTER JOIN intents ON msg.intent_id = intents.intent_id -LEFT JOIN expressions ON (intents.intent_id = expressions.intent_id) AND (msg.message_text = expressions.expression_text) -ORDER BY timestamp, user_id; - -GRANT ALL ON TABLE messages_expressions TO ${postgres_user}; - -CREATE OR REPLACE VIEW entities_parameters AS -SELECT -agents.agent_id, agents.agent_name, -msg.messages_id, msg.timestamp, msg.user_id, msg.user_name, msg.message_text, msg.user_message_ind, -entities.entity_id, entities.entity_name, entities.slot_data_type, -msgEnt.entity_start, msgEnt.entity_end, -param.parameter_value, param.parameter_id -FROM messages AS msg -INNER JOIN agents ON msg.agent_id = agents.agent_id -LEFT OUTER JOIN messages_entities AS msgEnt ON msg.messages_id = msgEnt.message_id -LEFT OUTER JOIN entities ON msgEnt.entity_id = entities.entity_id -LEFT OUTER JOIN intents ON msg.intent_id = intents.intent_id -LEFT OUTER JOIN expressions ON (intents.intent_id = expressions.intent_id) AND (msg.message_text = expressions.expression_text) -LEFT OUTER JOIN parameters AS param ON (msgEnt.entity_id = param.entity_id) AND (msgEnt.entity_value = param.parameter_value) AND (param.expression_id = expressions.expression_id) -ORDER BY timestamp, user_id; - -GRANT ALL ON TABLE entities_parameters TO ${postgres_user}; diff --git a/resources/database/migration/V2.3.3__update_model_helpers_schema.sql b/resources/database/migration/V2.3.3__update_model_helpers_schema.sql deleted file mode 100644 index 887fe9f..0000000 --- a/resources/database/migration/V2.3.3__update_model_helpers_schema.sql +++ /dev/null @@ -1,17 +0,0 @@ -/* Multiple Alter to entities, regex and agents */ -SET search_path TO rasa_ui; - -DROP VIEW IF EXISTS entity_synonym_variants; - -ALTER TABLE IF EXISTS synonyms DROP CONSTRAINT entity_fkey; -ALTER TABLE IF EXISTS synonyms DROP COLUMN entity_id; -ALTER TABLE IF EXISTS synonyms ADD COLUMN agent_id INTEGER; -ALTER TABLE IF EXISTS synonyms ADD CONSTRAINT agent_fkey FOREIGN KEY (agent_id) REFERENCES agents (agent_id) ON DELETE CASCADE; - -ALTER TABLE IF EXISTS regex ADD COLUMN agent_id INTEGER; -ALTER TABLE IF EXISTS regex ADD CONSTRAINT agent_fkey FOREIGN KEY (agent_id) REFERENCES agents (agent_id) ON DELETE CASCADE; - --- Alter Agent Table -ALTER TABLE agents ADD COLUMN rasa_nlu_pipeline character varying COLLATE pg_catalog."default" DEFAULT 'spacy_sklearn'; -ALTER TABLE agents ADD COLUMN rasa_nlu_fixed_model_name character varying COLLATE pg_catalog."default"; -ALTER TABLE agents ADD COLUMN rasa_nlu_language character varying COLLATE pg_catalog."default" DEFAULT 'en'; \ No newline at end of file diff --git a/resources/insights.png b/resources/insights.png deleted file mode 100644 index 8a396e0540fbb9b5294989828c016db52066e3f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99422 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�_g#LHg)WW>&bxqdawkj`LjutzA{Z2Iob8 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%0Dj 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 BdA0xm diff --git a/resources/rasa_ui_1.png b/resources/rasa_ui_1.png deleted file mode 100644 index 586d1f0114f0cc9714019c3adac78bdcd42aafe6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 357064 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

*+^_5H-XmfVJ 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 z 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 diff --git a/resources/rasa_ui_concept.png b/resources/rasa_ui_concept.png deleted file mode 100644 index bc48066c7d625df8dae1f8aaa1eea9cebaf77cf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30514 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�fEyvy3x-wC!P|@-8V>6SegIahltvJ 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 diff --git a/resources/ui_architecture.png b/resources/ui_architecture.png deleted file mode 100644 index 1b7063688ed0993dd04deac2df6d8ba11aad2e3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52974 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

JR|8tjpVp$5F~tZ1=cd7_^3s%FeH^$nMe7_f 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 SyF|eN|0KoaL`#MBKmI>gt9$|g diff --git a/server/data/db.json b/server/data/db.json new file mode 100644 index 0000000..0c718e6 --- /dev/null +++ b/server/data/db.json @@ -0,0 +1,385 @@ +{ + "agents": [ + { + "agent_id": "LAloGgFIj", + "agent_name": "xyz" + }, + { + "agent_id": "2", + "agent_name": "12121" + } + ], + "settings": { + "refresh_time": "300000" + }, + "intents": [ + { + "intent_id": "n_hlitvYF", + "agent_id": "5HwSPeqZy", + "intent_name": "123" + }, + { + "intent_id": "ZCaj-e_F1", + "agent_id": "5HwSPeqZy", + "intent_name": "ccc" + }, + { + "intent_id": "Rf8khzYmN", + "agent_id": "5HwSPeqZy", + "intent_name": "x" + }, + { + "intent_id": "5-5BZQEq0", + "agent_id": "5HwSPeqZy", + "intent_name": "x1" + }, + { + "intent_id": "F2Y96--3D", + "agent_id": "5HwSPeqZy", + "intent_name": "v" + }, + { + "intent_id": "OOsiCBPF3", + "agent_id": "5HwSPeqZy", + "intent_name": "b" + }, + { + "intent_id": "U72YD8c7L", + "agent_id": "LAloGgFIj", + "intent_name": "1232" + }, + { + "intent_id": "z4KDtMG2D", + "agent_id": "LAloGgFIj", + "intent_name": "zzzzzz" + }, + { + "intent_id": "2", + "agent_id": "2", + "intent_name": "xxx" + } + ], + "unique_intent_entities": [], + "expressions": [ + { + "expression_id": "167ax2N_J", + "intent_id": "5-5BZQEq0", + "expression_text": "123" + }, + { + "expression_id": "mvJC8rJXS", + "intent_id": "5-5BZQEq0", + "expression_text": "xyz" + }, + { + "expression_id": "BqBNQqXbH", + "intent_id": "U72YD8c7L", + "expression_text": "1111111111" + }, + { + "expression_id": "PrXX1oSHa", + "intent_id": "U72YD8c7L", + "expression_text": "222222" + }, + { + "expression_id": "Qzx1fH-0z", + "intent_id": "ZCaj-e_F1", + "expression_text": "what is my balance" + }, + { + "expression_id": "UTwaXjq6a", + "intent_id": "2", + "expression_text": "hello" + }, + { + "expression_id": "q2wEX150R", + "intent_id": "2", + "expression_text": "this is a test" + }, + { + "expression_id": "__YKn8tJe", + "intent_id": "2", + "expression_text": "Hi" + } + ], + "entities": [ + { + "entity_id": "5jx5mpuHP", + "agent_id": "LAloGgFIj", + "entity_name": "cuisine", + "slot_data_type": "NOT_USED" + }, + { + "entity_id": "4JironLae", + "agent_id": "LAloGgFIj", + "entity_name": "111", + "slot_data_type": "NOT_USED" + }, + { + "entity_id": "HIviCcaax", + "agent_id": "5HwSPeqZy", + "entity_name": "111", + "slot_data_type": "NOT_USED" + }, + { + "entity_id": "_3wuatSGH", + "agent_id": "5HwSPeqZy", + "entity_name": "cuisine", + "slot_data_type": "c" + }, + { + "entity_id": "i776JTxQ-", + "agent_id": "5HwSPeqZy", + "entity_name": "12112", + "slot_data_type": "categorical" + }, + { + "entity_id": "3", + "agent_id": "2", + "entity_name": "12212", + "slot_data_type": "NOT_USED" + } + ], + "actions": [], + "synonyms": [ + { + "synonym_id": "HY6ggK2nQ", + "agent_id": "5HwSPeqZy", + "synonym_reference": "zcx" + }, + { + "synonym_id": "tLRpU711d", + "agent_id": "5HwSPeqZy", + "synonym_reference": "ccc" + }, + { + "synonym_id": "1", + "agent_id": "2", + "synonym_reference": "ccc" + }, + { + "synonym_id": "2", + "agent_id": "2", + "synonym_reference": "cccxxx" + }, + { + "synonym_id": "3", + "agent_id": "2", + "synonym_reference": "cccxxxxxx" + }, + { + "synonym_id": "4", + "agent_id": "2", + "synonym_reference": "cccxxxxxxxxxcccc111" + }, + { + "synonym_id": "5", + "agent_id": "2", + "synonym_reference": "x" + } + ], + "synonym_variant": [ + { + "synonym_variant_id": "1", + "synonym_id": "1", + "synonym_value": "1212" + }, + { + "synonym_variant_id": "2", + "synonym_id": "1", + "synonym_value": "1212211" + }, + { + "synonym_variant_id": "4", + "synonym_id": "2", + "synonym_value": "1212" + } + ], + "responses": [], + "messages": [], + "messages_entities": [], + "regex": [ + { + "regex_id": "TjLsnB7RH", + "agent_id": "5HwSPeqZy", + "regex_name": "zipcode", + "regex_pattern": "[0-9]{5}" + }, + { + "regex_id": "2", + "agent_id": "2", + "regex_name": "c", + "regex_pattern": "c" + }, + { + "regex_id": "3", + "agent_id": "2", + "regex_name": "ccc", + "regex_pattern": "vvb" + } + ], + "expression_parameters": [ + { + "parameter_id": "sYJdDX0xC", + "parameter_end": 2, + "parameter_start": 1, + "parameter_value": "2", + "expression_id": "167ax2N_J", + "intent_id": "5-5BZQEq0", + "entity_id": "HIviCcaax" + }, + { + "parameter_id": "0JOxtnyvj", + "parameter_end": 18, + "parameter_start": 11, + "parameter_value": "balance", + "intent_id": "ZCaj-e_F1" + }, + { + "parameter_id": "t_VqPc_Mj", + "parameter_end": 18, + "parameter_start": 11, + "parameter_value": "balance", + "expression_id": "Qzx1fH-0z", + "intent_id": "ZCaj-e_F1", + "entity_id": "HIviCcaax" + }, + { + "parameter_id": "flOSKyU7t", + "parameter_end": 3, + "parameter_start": 0, + "parameter_value": "xyz", + "expression_id": "mvJC8rJXS", + "intent_id": "5-5BZQEq0", + "entity_id": "HIviCcaax" + }, + { + "parameter_id": "1", + "parameter_end": 14, + "parameter_start": 10, + "parameter_value": "test", + "expression_id": "q2wEX150R", + "intent_id": "2", + "entity_id": "2" + }, + { + "parameter_id": "2", + "parameter_end": 4, + "parameter_start": 2, + "parameter_value": "ll", + "expression_id": "UTwaXjq6a", + "intent_id": "2", + "entity_id": "2" + } + ], + "agent_id_sequence": 0, + "intent_id_sequence": 2, + "entity_id_sequence": 3, + "regex_id_sequence": 3, + "synonym_id_sequence": 5, + "synonym_variant_id_sequence": 5, + "parameter_id_sequence": 2, + "nlu_log_id_sequence": 24, + "nlu_log": [ + { + "log_id": "15", + "ip_address": "::1", + "query": "/api/v2/rasa/parse", + "event_type": "parse", + "event_data": { + "server_response": "{\"intent\":{\"name\":\"greet\",\"confidence\":0.9666692024},\"entities\":[],\"intent_ranking\":[{\"name\":\"greet\",\"confidence\":0.9666692024},{\"name\":\"thankyou\",\"confidence\":0.0247260423},{\"name\":\"affirm\",\"confidence\":0.0047666572},{\"name\":\"deny\",\"confidence\":0.0014638595},{\"name\":\"request_info\",\"confidence\":0.0012050311},{\"name\":\"inform\",\"confidence\":0.0011692075}],\"text\":\"hello\"}" + }, + "timestamp": "2019-08-23T14:56:05.028Z" + }, + { + "log_id": "16", + "ip_address": "::1", + "query": "/api/v2/rasa/parse", + "event_type": "parse", + "event_data": { + "server_response": "{\"intent\":{\"name\":\"greet\",\"confidence\":0.9666692024},\"entities\":[],\"intent_ranking\":[{\"name\":\"greet\",\"confidence\":0.9666692024},{\"name\":\"thankyou\",\"confidence\":0.0247260423},{\"name\":\"affirm\",\"confidence\":0.0047666572},{\"name\":\"deny\",\"confidence\":0.0014638595},{\"name\":\"request_info\",\"confidence\":0.0012050311},{\"name\":\"inform\",\"confidence\":0.0011692075}],\"text\":\"hello\"}" + }, + "timestamp": "2019-08-23T14:56:07.267Z" + }, + { + "log_id": "17", + "ip_address": "::1", + "query": "/api/v2/rasa/parse", + "event_type": "parse", + "event_data": { + "server_response": "{\"intent\":{\"name\":\"greet\",\"confidence\":0.9666692024},\"entities\":[],\"intent_ranking\":[{\"name\":\"greet\",\"confidence\":0.9666692024},{\"name\":\"thankyou\",\"confidence\":0.0247260423},{\"name\":\"affirm\",\"confidence\":0.0047666572},{\"name\":\"deny\",\"confidence\":0.0014638595},{\"name\":\"request_info\",\"confidence\":0.0012050311},{\"name\":\"inform\",\"confidence\":0.0011692075}],\"text\":\"hello\"}" + }, + "timestamp": "2019-08-23T14:56:07.704Z" + }, + { + "log_id": "18", + "ip_address": "::1", + "query": "/api/v2/rasa/parse", + "event_type": "parse", + "event_data": { + "server_response": "{\"intent\":{\"name\":\"greet\",\"confidence\":0.9666692024},\"entities\":[],\"intent_ranking\":[{\"name\":\"greet\",\"confidence\":0.9666692024},{\"name\":\"thankyou\",\"confidence\":0.0247260423},{\"name\":\"affirm\",\"confidence\":0.0047666572},{\"name\":\"deny\",\"confidence\":0.0014638595},{\"name\":\"request_info\",\"confidence\":0.0012050311},{\"name\":\"inform\",\"confidence\":0.0011692075}],\"text\":\"hello\"}" + }, + "timestamp": "2019-08-23T14:56:08.255Z" + }, + { + "log_id": "19", + "ip_address": "::1", + "query": "/api/v2/rasa/parse", + "event_type": "parse", + "event_data": { + "server_response": "{\"intent\":{\"name\":\"greet\",\"confidence\":0.9666692024},\"entities\":[],\"intent_ranking\":[{\"name\":\"greet\",\"confidence\":0.9666692024},{\"name\":\"thankyou\",\"confidence\":0.0247260423},{\"name\":\"affirm\",\"confidence\":0.0047666572},{\"name\":\"deny\",\"confidence\":0.0014638595},{\"name\":\"request_info\",\"confidence\":0.0012050311},{\"name\":\"inform\",\"confidence\":0.0011692075}],\"text\":\"hello\"}" + }, + "timestamp": "2019-08-23T14:56:08.731Z" + }, + { + "log_id": "20", + "ip_address": "::1", + "query": "/api/v2/rasa/parse", + "event_type": "parse", + "event_data": { + "server_response": "{\"intent\":{\"name\":\"greet\",\"confidence\":0.9666692024},\"entities\":[],\"intent_ranking\":[{\"name\":\"greet\",\"confidence\":0.9666692024},{\"name\":\"thankyou\",\"confidence\":0.0247260423},{\"name\":\"affirm\",\"confidence\":0.0047666572},{\"name\":\"deny\",\"confidence\":0.0014638595},{\"name\":\"request_info\",\"confidence\":0.0012050311},{\"name\":\"inform\",\"confidence\":0.0011692075}],\"text\":\"hello\"}" + }, + "timestamp": "2019-08-23T14:56:09.131Z" + }, + { + "log_id": "21", + "ip_address": "::1", + "query": "/api/v2/rasa/parse", + "event_type": "parse", + "event_data": { + "server_response": "{\"intent\":{\"name\":\"greet\",\"confidence\":0.9666692024},\"entities\":[],\"intent_ranking\":[{\"name\":\"greet\",\"confidence\":0.9666692024},{\"name\":\"thankyou\",\"confidence\":0.0247260423},{\"name\":\"affirm\",\"confidence\":0.0047666572},{\"name\":\"deny\",\"confidence\":0.0014638595},{\"name\":\"request_info\",\"confidence\":0.0012050311},{\"name\":\"inform\",\"confidence\":0.0011692075}],\"text\":\"hello\"}" + }, + "timestamp": "2019-08-23T14:56:09.550Z" + }, + { + "log_id": "22", + "ip_address": "::1", + "query": "/api/v2/rasa/parse", + "event_type": "parse", + "event_data": { + "server_response": "{\"intent\":{\"name\":\"greet\",\"confidence\":0.9666692024},\"entities\":[],\"intent_ranking\":[{\"name\":\"greet\",\"confidence\":0.9666692024},{\"name\":\"thankyou\",\"confidence\":0.0247260423},{\"name\":\"affirm\",\"confidence\":0.0047666572},{\"name\":\"deny\",\"confidence\":0.0014638595},{\"name\":\"request_info\",\"confidence\":0.0012050311},{\"name\":\"inform\",\"confidence\":0.0011692075}],\"text\":\"hello\"}" + }, + "timestamp": "2019-08-23T14:56:09.959Z" + }, + { + "log_id": "23", + "ip_address": "::1", + "query": "/api/v2/rasa/model/parse", + "event_type": "parse", + "event_data": { + "server_response": "{\"intent\":{\"name\":\"inform\",\"confidence\":0.9972199889},\"entities\":[{\"start\":7,\"end\":14,\"value\":\"italian\",\"entity\":\"cuisine\",\"confidence\":0.893396886,\"extractor\":\"CRFEntityExtractor\"}],\"intent_ranking\":[{\"name\":\"inform\",\"confidence\":0.9972199889},{\"name\":\"affirm\",\"confidence\":0.0017196317},{\"name\":\"thankyou\",\"confidence\":0.0003558894},{\"name\":\"greet\",\"confidence\":0.0003037703},{\"name\":\"request_info\",\"confidence\":0.0002699554},{\"name\":\"deny\",\"confidence\":0.0001307644}],\"text\":\"I want italian food in new york\"}" + }, + "timestamp": "2019-08-23T16:18:51.044Z" + }, + { + "log_id": "24", + "ip_address": "::1", + "query": "/api/v2/rasa/model/parse", + "event_type": "parse", + "event_data": { + "server_response": "{\"intent\":{\"name\":\"inform\",\"confidence\":0.9972199889},\"entities\":[{\"start\":7,\"end\":14,\"value\":\"italian\",\"entity\":\"cuisine\",\"confidence\":0.893396886,\"extractor\":\"CRFEntityExtractor\"}],\"intent_ranking\":[{\"name\":\"inform\",\"confidence\":0.9972199889},{\"name\":\"affirm\",\"confidence\":0.0017196317},{\"name\":\"thankyou\",\"confidence\":0.0003558894},{\"name\":\"greet\",\"confidence\":0.0003037703},{\"name\":\"request_info\",\"confidence\":0.0002699554},{\"name\":\"deny\",\"confidence\":0.0001307644}],\"text\":\"I want italian food in new york\"}" + }, + "timestamp": "2019-08-23T17:55:09.143Z" + } + ] +} \ No newline at end of file diff --git a/server/data/db.sqlite3 b/server/data/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..5743abe56f178b7b22ae021fd5b05623e54f8e37 GIT binary patch literal 73728 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 Lw#_M_Bs2d5YULeM literal 0 HcmV?d00001 diff --git a/server/db/actions.js b/server/db/actions.js old mode 100644 new mode 100755 diff --git a/server/db/agents.js b/server/db/agents.js old mode 100644 new mode 100755 index f9616c4..9070eef --- a/server/db/agents.js +++ b/server/db/agents.js @@ -1,7 +1,92 @@ const db = require('./db'); const logger = require('../util/logger'); +function getAllAgents(req, res, next) { + logger.winston.info('Agent.getAllAgents'); + db.all('select * from agents order by agent_id desc', function(err, data) { + if (err) { + logger.winston.info(err); + } else { + res.status(200).json(data); + } + }); +} + +function getSingleAgent(req, res, next) { + logger.winston.info('Agent.getSingleAgent'); + db.get('select * from agents where agent_id = ?', req.params.agent_id, function(err, data) { + if (err) { + logger.winston.info(err); + } else { + res.status(200).json(data); + } + }); +} + +function createAgent(req, res, next) { + logger.winston.info('Agent.createAgent'); + db.run('insert into agents(agent_name, agent_config, output_folder)' + 'values (?,?,?)', [req.body.agent_name, req.body.agent_config, req.body.output_folder], function(err) { + if (err) { + logger.winston.info("Error inserting a new record"); + } else { + res.status(200).json({ status: 'success', message: 'Inserted' }); + } + }); +} + +function updateAgent(req, res, next) { + logger.winston.info('Agent.updateAgent'); + db.run('update agents set agent_name = ?, output_folder = ?, agent_config = ? where agent_id = ?', [req.body.agent_name, req.body.output_folder, req.body.agent_config, req.body.agent_id], function(err) { + if (err) { + logger.winston.info("Error updating the record"); + } else { + res.status(200).json({ status: 'success', message: 'Updated' }); + } + }); +} + +function removeAgent(req, res) { + logger.winston.info('Agent.updateAgent'); + db.run('delete from agents where agent_id = ?', req.params.agent_id, function(err) { + if (err) { + logger.winston.info("Error removing the record"); + } else { + res.status(200).json({ status: 'success', message: 'Removed' }); + } + }); +} + +module.exports = { + getSingleAgent, + getAllAgents, + createAgent, + updateAgent, + removeAgent, + uploadAgentFromFile, + updateAgentStory +}; + + +function updateAgentStory(req, res, next) { + logger.winston.info('Agent.updateAgentStory -- Not done'); + /* + db.none('update agents set story_details=$2 where agent_id=$1', [ + Number(req.body.agent_id), + req.body.story_details]) + .then(function() { + res.status(200).json({ + status: 'success', + message: 'Updated Story For Agent'}); + }) + .catch(function(err) { + return next(err); + }); + */ +} + + function uploadAgentFromFile(req, res, next) { + /* logger.winston.info('On server request' + JSON.stringify(req.body)); //agent, intent,expressions, entities, , parameters(expression id, entity id) @@ -196,102 +281,6 @@ function uploadAgentFromFile(req, res, next) { logger.winston.info('Error occured. Rollbacking all: ' + error); return res.status(500).json({ Error: 'Error Occurred' }); }); + */ } -function getAllAgents(req, res, next) { - db.any('select * from agents order by agent_id desc') - .then(function(data) { - res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); -} - -function getSingleAgent(req, res, next) { - const agentID = Number(req.params.agent_id); - db.one('select * from agents where agent_id = $1', agentID) - .then(function(data) { - res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); -} - -function createAgent(req, res, next) { - logger.winston.info('Agent.createAgent'); - db.none('insert into agents(agent_name)' + 'values($(agent_name))', req.body) - .then(function() { - res.status(200).json({ - status: 'success', - message: 'Inserted'}); - }) - .catch(function(err) { - return next(err); - }); -} - -function updateAgent(req, res, next) { - logger.winston.info('Agent.updateAgent'); - db.none( - 'update agents set agent_name=$2, endpoint_enabled=$3, endpoint_url=$4, basic_auth_username=$5, basic_auth_password=$6, rasa_core_enabled=$7, rasa_nlu_pipeline=$8, rasa_nlu_fixed_model_name=$9, rasa_nlu_language=$10 where agent_id=$1', - [ - Number(req.params.agent_id), - req.body.agent_name, - req.body.endpoint_enabled, - req.body.endpoint_url, - req.body.basic_auth_username, - req.body.basic_auth_password, - req.body.rasa_core_enabled, req.body.rasa_nlu_pipeline,req.body.rasa_nlu_fixed_model_name, req.body.rasa_nlu_language] - ) - .then(function() { - res.status(200).json({ - status: 'success', - message: 'Updated agent'}); - }) - .catch(function(err) { - console.log(err); - return next(err); - }); -} - -function removeAgent(req, res) { - const agentID = Number(req.params.agent_id); - db.result( - 'delete from intents where agent_id = $1; delete from actions where agent_id = $1; delete from entities where agent_id = $1; delete from agents where agent_id = $1;', - agentID - ) - .then(function(result) { - res.status(200).json({ - status: 'success', - message: `Removed ${result.rowCount}`}); - }) - .catch(function(err) { - logger.winston.info('Error removeAgent: ' + err); - return res.status(500).json({ 'Error removeAgent': err }); - }); -} - -function updateAgentStory(req, res, next) { - logger.winston.info('Agent.updateAgentStory'); - db.none('update agents set story_details=$2 where agent_id=$1', [ - Number(req.body.agent_id), - req.body.story_details]) - .then(function() { - res.status(200).json({ - status: 'success', - message: 'Updated Story For Agent'}); - }) - .catch(function(err) { - return next(err); - }); -} -module.exports = { - getSingleAgent, - getAllAgents, - createAgent, - updateAgent, - removeAgent, - uploadAgentFromFile, - updateAgentStory}; diff --git a/server/db/db.js b/server/db/db.js old mode 100644 new mode 100755 index 0c353bf..7b9bc0f --- a/server/db/db.js +++ b/server/db/db.js @@ -1,10 +1,59 @@ -const promise = require('bluebird'); +const sqlite3 = require('sqlite3'); +const logger = require('../util/logger'); -const options = { - // Initialization Options - promiseLib: promise}; +let db = new sqlite3.Database("server/data/db.sqlite3", (err) => { + if (err) { + logger.winston.info('Error when connecting to the Database.', err) + } else { + logger.winston.info('Database connected!'); + checkDBSchema(); + } +}) -const pgp = require('pg-promise')(options); -const db = pgp(global.postgresserver); +function checkDBSchema() { + //Get version of DB Schema from version table, if != to version, suggest upgrade + db.all("SELECT version from version", function(err, rows) { + if (err && err.errno == 1) { + createDBSchema(); + } else { + if (rows[0].version == global.db_schema) { + logger.winston.info("Schema version (" + rows[0].version + ") matches package.json schema version (" + global.db_schema + ")"); + } else { + logger.winston.info("Schema version (" + rows[0].version + ") DOES NOT match package.json schema version (" + global.db_schema + ")"); + logger.winston.info("Please upgrade your schema"); + } + } + }); + // +} -module.exports = db; +function createDBSchema() { + try { + logger.winston.info("------------------------- Starting to create DB schema -------------------------"); + db.run("CREATE TABLE IF NOT EXISTS version(version)", setDBSchemaVersion); + db.run("CREATE TABLE IF NOT EXISTS agents (agent_id INTEGER PRIMARY KEY AUTOINCREMENT, agent_name TEXT, agent_config TEXT, output_folder TEXT)"); + db.run("CREATE TABLE IF NOT EXISTS intents (intent_id INTEGER PRIMARY KEY AUTOINCREMENT, intent_name TEXT, agent_id INTEGER)"); + db.run("CREATE TABLE IF NOT EXISTS synonyms (synonym_id INTEGER PRIMARY KEY AUTOINCREMENT, synonym_reference TEXT, regex_pattern TEXT, agent_id INTEGER)"); + db.run("CREATE TABLE IF NOT EXISTS entities (entity_id INTEGER PRIMARY KEY AUTOINCREMENT, entity_name TEXT, slot_data_type TEXT, agent_id INTEGER)"); + db.run("CREATE TABLE IF NOT EXISTS expressions (expression_id INTEGER PRIMARY KEY AUTOINCREMENT, expression_text TEXT, intent_id INTEGER)"); + db.run("CREATE TABLE IF NOT EXISTS expression_parameters (parameter_id INTEGER PRIMARY KEY AUTOINCREMENT, parameter_start INTEGER, parameter_end INTEGER, parameter_value TEXT, expression_id INTEGER, intent_id INTEGER, entity_id INTEGER)"); + db.run("CREATE TABLE IF NOT EXISTS regex (regex_id INTEGER PRIMARY KEY AUTOINCREMENT, regex_name TEXT, regex_pattern TEXT, agent_id INTEGER)"); + db.run("CREATE TABLE IF NOT EXISTS responses (response_id INTEGER PRIMARY KEY AUTOINCREMENT, response_text TEXT, response_type TEXT, intent_id INTEGER)"); + db.run("CREATE TABLE IF NOT EXISTS synonym_variants (synonym_variant_id INTEGER PRIMARY KEY AUTOINCREMENT, synonym_value TEXT, synonym_id INTEGER)"); + + db.run("CREATE TABLE IF NOT EXISTS nlu_log (log_id INTEGER PRIMARY KEY AUTOINCREMENT, ip_address TEXT, query TEXT, event_type TEXT, event_data TEXT, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP)"); + + db.run("CREATE TABLE IF NOT EXISTS settings (setting_name TEXT, setting_value TEXT)", function() { + db.run("INSERT into settings (setting_name, setting_value) values ('refresh_time', '60000')"); + }); + } catch (err) { + console.log(err); + } +} + +function setDBSchemaVersion() { + db.run("INSERT into version (version) values (?)", global.db_schema); + logger.winston.info("Database Schema v" + global.db_schema + " created"); +} + +module.exports = db; \ No newline at end of file diff --git a/server/db/entities.js b/server/db/entities.js old mode 100644 new mode 100755 index f912549..968b8be --- a/server/db/entities.js +++ b/server/db/entities.js @@ -3,91 +3,69 @@ const logger = require('../util/logger'); function getAllEntities(req, res, next) { logger.winston.info('Entities.getAllEntities'); - db.any('select * from entities') - .then(function(data) { + db.all('select * from entities', function(err, data) { + if (err) { + logger.winston.info(err); + } else { res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); + } + }); } function getAllEntitiesForAgent(req, res, next) { logger.winston.info('Entities.getAllEntitiesForAgent'); - const agentId = Number(req.params.agent_id); - db.any('select * from entities where agent_id=$1', agentId) - .then(function(data) { + db.all('select * from entities where agent_id = ?', req.params.agent_id, function(err, data) { + if (err) { + logger.winston.info(err); + } else { res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); + } + }); } function getSingleEntity(req, res, next) { logger.winston.info('Entities.getSingleEntity'); - const entityID = Number(req.params.entity_id); - db.one('select * from entities where entity_id = $1', entityID) - .then(function(data) { + db.get('select * from entities where entity_id = ?', req.params.entity_id, function(err, data) { + if (err) { + logger.winston.info(err); + } else { res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); + } + }); } function createEntity(req, res, next) { logger.winston.info('Entities.createEntity'); - req.body.agent_id = req.body.agent.agent_id; - db.none( - 'insert into entities(entity_name, agent_id, slot_data_type) values($(entity_name),$(agent_id),$(slot_data_type))', - req.body - ) - .then(function() { - res.status(200).json({ - status: 'success', - message: 'Inserted'}); - }) - .catch(function(err) { - logger.winston.info(err); - return next(err); - }); + + db.run('insert into entities(agent_id, entity_name, slot_data_type)' + 'values (?,?,?)', [req.body.agent_id, req.body.entity_name, req.body.slot_data_type], function(err) { + if (err) { + logger.winston.info("Error inserting a new record"); + } else { + res.status(200).json({ status: 'success', message: 'Inserted' }); + } + }); } function updateEntity(req, res, next) { - db.none( - 'update entities set entity_name=$1, agent_id=$3, slot_data_type=$4 where entity_id=$2', - [ - req.body.entity_name, - Number(req.params.entity_id), - Number(req.body.agent.agent_id), - req.body.slot_data_type] - ) - .then(function() { - res.status(200).json({ - status: 'success', - message: 'Updated agent'}); - }) - .catch(function(err) { - return next(err); - }); + logger.winston.info('entities.updateEntity'); + + db.run('update entities set entity_name = ?, slot_data_type = ? where entity_id = ?', [req.body.entity_name, req.body.slot_data_type, req.params.entity_id], function(err) { + if (err) { + logger.winston.info("Error updating the record"); + } else { + res.status(200).json({ status: 'success', message: 'Updated' }); + } + }); } function removeEntity(req, res, next) { - const entityId = Number(req.params.entity_id); - db.result('delete from entities where entity_id = $1', entityId); - const entityID = Number(req.params.entity_id); - db.result('delete from entities where entity_id = $1', entityID) - .then(function(result) { - /* jshint ignore:start */ - res.status(200).json({ - status: 'success', - message: `Removed ${result.rowCount}`}); - /* jshint ignore:end */ - }) - .catch(function(err) { - return next(err); - }); + db.run('delete from entities where agent_id = ?', req.params.entity_id, function(err) { + if (err) { + logger.winston.info("Error removing the record"); + } else { + res.status(200).json({ status: 'success', message: 'Removed' }); + } + }); } module.exports = { diff --git a/server/db/expressions.js b/server/db/expressions.js old mode 100644 new mode 100755 index 70d8126..e45ce2e --- a/server/db/expressions.js +++ b/server/db/expressions.js @@ -3,94 +3,69 @@ const logger = require('../util/logger'); function getSingleExpression(req, res, next) { logger.winston.info('expression.getSingleExpression'); - const intentId = Number(req.params.expression_id); - db.one('select * from expressions where expression_id = $1', intentId) - .then(function(data) { + + db.get('select * from expressions where expression_id = ?', req.params.expression_id, function(err, data) { + if (err) { + logger.winston.info(err); + } else { res.status(200).json(data); - }).catch(function(err) { - return next(err); - }); + } + }); } function getIntentExpressions(req, res, next) { logger.winston.info('expression.getIntentExpressions'); - const IntentId = Number(req.params.intent_id); - db.any( - 'select * from expressions where intent_id = $1 order by expression_id desc', - IntentId - ) - .then(function(data) { + db.all('select * from expressions where intent_id = ?', req.params.intent_id, function(err, data) { + if (err) { + logger.winston.info(err); + } else { res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); + } + }); } function getIntentExpressionQuery(req, res, next) { logger.winston.info('expression.getIntentExpressionQuery'); - const IntentIds = req.query.intent_ids; - const sql = `select * from expressions where intent_id in (${IntentIds})`; - db.any(sql) - .then(function(data) { + db.all('select * from expressions where intent_id in (?)', req.query.intent_ids, function(err, data) { + if (err) { + logger.winston.info(err); + } else { res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); + } + }); } function createIntentExpression(req, res, next) { logger.winston.info('expressions.createIntentExpression'); - db.any( - 'insert into expressions(intent_id, expression_text)' + - 'values($(intent_id), $(expression_text)) RETURNING expression_id', - req.body - ) - .then(function(data) { - res.status(200).json({ - status: 'success', - message: 'Inserted', - expression_id: data[0].expression_id}); - }) - .catch(function(err) { - return next(err); - }); + db.run('insert into expressions(intent_id, expression_text)' + 'values (?,?)', [req.body.intent_id, req.body.expression_text], function(err) { + if (err) { + logger.winston.info("Error inserting a new record"); + } else { + res.status(200).json({ status: 'success', message: 'Inserted' }); + } + }); } function removeExpression(req, res, next) { logger.winston.info('expressions.removeExpression'); - const expressionId = Number(req.params.expression_id); - db.result('delete from expressions where expression_id = $1', expressionId) - .then(function(result) { - /* jshint ignore:start */ - res.status(200).json({ - status: 'success', - message: `Removed ${result.rowCount}`}); - /* jshint ignore:end */ - }) - .catch(function(err) { - return next(err); - }); + db.run('delete from expressions where expression_id = ?', req.params.expression_id, function(err) { + if (err) { + logger.winston.info("Error removing the record"); + } else { + res.status(200).json({ status: 'success', message: 'Removed' }); + } + }); } function updateExpression(req, res, next) { logger.winston.info('expressions.updateExpressionEndpoint'); - db.none( - 'update expressions set intent_id=$2,expression_text=$3 where expression_id=$1', - [ - Number(req.params.expression_id), - req.body.intent_id, - req.body.expression_text] - ) - .then(function() { - res.status(200).json({ - status: 'success', - message: 'Updated Expression'}); - }) - .catch(function(err) { - return next(err); - }); + db.run('update expressions set expression_text = ? where expression_id = ?', [req.body.expression_text, req.body.expression_id], function(err) { + if (err) { + logger.winston.info("Error updating the record"); + } else { + res.status(200).json({ status: 'success', message: 'Updated' }); + } + }); } module.exports = { diff --git a/server/db/intents.js b/server/db/intents.js old mode 100644 new mode 100755 index 72b92ca..f4b0a0f --- a/server/db/intents.js +++ b/server/db/intents.js @@ -2,97 +2,67 @@ const db = require('./db'); const logger = require('../util/logger'); function getSingleIntent(req, res, next) { - const intentID = Number(req.params.intent_id); - db.one('select * from intents where intent_id = $1', intentID) - .then(function(data) { + logger.winston.info('intents.getSingleIntents'); + db.get('select * from intents where intent_id = ?', req.params.intent_id, function(err, data) { + if (err) { + logger.winston.info(err); + } else { res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); + } + }); } function getAgentIntents(req, res, next) { logger.winston.info('intents.getAgentIntents'); - const AgentID = Number(req.params.agent_id); - db.any('select * from intents where agent_id = $1 order by intent_id', AgentID) - .then(function(data) { + db.all('select * from intents where agent_id = ?', req.params.agent_id, function(err, data) { + if (err) { + logger.winston.info(err); + } else { res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); -} - -function getUniqueIntents(req, res, next) { - logger.winston.info('intents.getUniqueIntents'); - const IntentID = Number(req.params.intent_id); - db.any('select * from unique_intent_entities where intent_id = $1', IntentID) - .then(function(data) { - res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); + } + }); } function createAgentIntent(req, res, next) { logger.winston.info('intents.createAgentIntent'); - db.any( - 'insert into intents(agent_id, intent_name)' + - 'values($(agent_id), $(intent_name)) RETURNING intent_id', - req.body - ) - .then(function(resp) { - res.status(200).json({ - status: 'success', - message: 'Inserted', - agent_id: req.body.agent_id}); - }) - .catch(function(err) { - return next(err); - }); + db.run('insert into intents (agent_id, intent_name)' + 'values (?,?)', [req.body.agent_id, req.body.intent_name], function(err) { + if (err) { + logger.winston.info("Error inserting a new record"); + } else { + res.status(200).json({ status: 'success', message: 'Inserted' }); + } + }); +} + +function updateIntent(req, res, next) { + logger.winston.info('intents.updateIntent'); + + db.run('update intents set intent_name = ? where intent_id = ?', [req.body.intent_name, req.params.intent_id], function(err) { + if (err) { + logger.winston.info("Error updating the record"); + } else { + res.status(200).json({ status: 'success', message: 'Updated' }); + } + }); } function removeIntent(req, res, next) { + //Remove all sub components of intent logger.winston.info('intents.removeIntent'); - const intentID = Number(req.params.intent_id); - db.result('delete from intents where intent_id = $1', intentID) - .then(function(result) { - /* jshint ignore:start */ - res.status(200).json({ - status: 'success', - message: `Removed ${result.rowCount}`}); - /* jshint ignore:end */ - }) - .catch(function(err) { - return next(err); - }); -} -function updateIntent(req, res, next) { - logger.winston.info('intents.updateIntentEndpoint'); - db.none( - 'update intents set intent_name=$2,endpoint_enabled=$3 where intent_id=$1', - [ - Number(req.params.intent_id), - req.body.intent_name, - req.body.endpoint_enabled] - ) - .then(function() { - res.status(200).json({ - status: 'success', - message: 'Updated Intent'}); - }) - .catch(function(err) { - return next(err); - }); + db.run('delete from intents where intent_id = ?', req.params.intent_id, function(err) { + if (err) { + logger.winston.info("Error removing the record"); + } else { + res.status(200).json({ status: 'success', message: 'Removed' }); + } + }); } module.exports = { getAgentIntents, createAgentIntent, getSingleIntent, - removeIntent, - getUniqueIntents, - updateIntent}; + updateIntent, + removeIntent +}; diff --git a/server/db/logs.js b/server/db/logs.js old mode 100644 new mode 100755 index 8c2e34e..345b11a --- a/server/db/logs.js +++ b/server/db/logs.js @@ -1,4 +1,5 @@ const db = require('./db'); +const logger = require('../util/logger'); module.exports = { getLogs, @@ -12,9 +13,81 @@ module.exports = { getAvgNluResponseTimesLast30Days, getAvgUserResponseTimesLast30Days, getActiveUserCountLast12Months, - getActiveUserCountLast30Days}; + getActiveUserCountLast30Days, + getTotalLogEntries, + logRequest +}; -function getActiveUserCountLast30Days(req, res, next){ +function logRequest(req, type, data) { + try { + const obj = {}; + obj.ip_address = req.headers['x-forwarded-for'] || req.connection.remoteAddress; + obj.query = req.originalUrl; + obj.event_type = type; + obj.event_data = JSON.stringify(data); + + db.run('insert into nlu_log (ip_address, query, event_type, event_data)' + 'values (?,?,?,?)', [obj.ip_address, obj.query, obj.event_type, obj.event_data], function(err) { + if (err) { + logger.winston.info("Error inserting a new record"); + } + }); + } catch (err) { + logger.winston.info('Error: ' + err); + } +} + +function getLogs(req, res, next) { + db.all('select * from nlu_log where event_type = ? order by timestamp desc', req.params.query, function(err, data) { + if (err) { + logger.winston.info(err); + } else { + res.status(200).json(data); + } + }); +} + +function getRequestUsageTotal(req, res, next) { + db.get("select count(*) from nlu_log where event_type = 'parse'", req.params.query, function(err, data) { + if (err) { + logger.winston.info(err); + } else { + res.status(200).json({total_request_usage: data['count(*)']}); + } + }); +} + +function getTotalLogEntries(req, res, next) { + db.get("select count(*) from nlu_log", req.params.query, function(err, data) { + if (err) { + logger.winston.info(err); + } else { + res.status(200).json({total_log_entries: data['count(*)']}); + } + }); +} + +function getIntentUsageByDay(req, res, next) { + db.all("select strftime('%m/%d', timestamp) as day, count(*) as cnt from nlu_log group by strftime('%m/%d', timestamp)", req.params.query, function(err, data) { + if (err) { + logger.winston.info(err); + } else { + res.status(200).json(data); + } + }); +} + + +/* Not used yet */ + +function getIntentUsageTotal(req, res, next) { + const data = db.get('nlu_log') + .filter({ event_type: 'parse' }) + .size() + .value() + res.status(200).json({intent_usage: data}); +} + +function getActiveUserCountLast30Days(req, res, next) { db.any('select * from active_user_count_30_days') .then(function (data) { res.status(200) @@ -25,7 +98,7 @@ function getActiveUserCountLast30Days(req, res, next){ }); } -function getActiveUserCountLast12Months(req, res, next){ +function getActiveUserCountLast12Months(req, res, next) { db.any('select * from active_user_count_12_months') .then(function (data) { res.status(200) @@ -36,7 +109,7 @@ function getActiveUserCountLast12Months(req, res, next){ }); } -function getAvgUserResponseTimesLast30Days(req, res, next){ +function getAvgUserResponseTimesLast30Days(req, res, next) { db.any('select * from avg_user_response_times_30_days') .then(function (data) { res.status(200) @@ -47,7 +120,7 @@ function getAvgUserResponseTimesLast30Days(req, res, next){ }); } -function getAvgNluResponseTimesLast30Days(req, res, next){ +function getAvgNluResponseTimesLast30Days(req, res, next) { db.any('select * from avg_nlu_response_times_30_days') .then(function (data) { res.status(200) @@ -58,9 +131,9 @@ function getAvgNluResponseTimesLast30Days(req, res, next){ }); } -function getIntentsMostUsed(req, res, next){ +function getIntentsMostUsed(req, res, next) { const agent_id = req.params.agent_id; - db.any('select * from intents_most_used where agent_id=$1',agent_id) + db.any('select * from intents_most_used where agent_id=$1', agent_id) .then(function (data) { res.status(200) .json(data); @@ -70,11 +143,11 @@ function getIntentsMostUsed(req, res, next){ }); } -function getAgentsByIntentConfidencePct(req, res, next){ +function getAgentsByIntentConfidencePct(req, res, next) { const agent_id = req.params.agent_id; db.any('select count(*),intent_confidence_pct, agents.agent_id, agents.agent_name from nlu_parse_log, agents, messages ' - +' where messages.agent_id = agents.agent_id and messages.messages_id=nlu_parse_log.messages_id ' - +' and agents.agent_id=$1 group by intent_confidence_pct, agents.agent_id, agents.agent_name ',agent_id) + + ' where messages.agent_id = agents.agent_id and messages.messages_id=nlu_parse_log.messages_id ' + + ' and agents.agent_id=$1 group by intent_confidence_pct, agents.agent_id, agents.agent_name ', agent_id) .then(function (data) { res.status(200) .json(data); @@ -95,17 +168,6 @@ function getNluParseLogByAgent(req, res, next) { return next(err); }); } -function getLogs(req, res, next) { - const query = req.params.query; - db.any('select * from nlu_log where event_type = $1 order by timestamp desc LIMIT 100', query) - .then(function (data) { - res.status(200) - .json(data); - }) - .catch(function (err) { - return next(err); - }); -} function getAvgIntentUsageByDay(req, res, next) { db.any('select round(avg(count)) as avg from intent_usage_by_day') @@ -118,35 +180,4 @@ function getAvgIntentUsageByDay(req, res, next) { }); } -function getIntentUsageByDay(req, res, next) { - db.any('select * from intent_usage_by_day') - .then(function (data) { - res.status(200) - .json(data); - }) - .catch(function (err) { - return next(err); - }); -} - -function getIntentUsageTotal(req, res, next) { - db.any('select * from intent_usage_total') - .then(function (data) { - res.status(200) - .json(data); - }) - .catch(function (err) { - return next(err); - }); -} -function getRequestUsageTotal(req, res, next) { - db.any('select * from request_usage_total') - .then(function (data) { - res.status(200) - .json(data); - }) - .catch(function (err) { - return next(err); - }); -} diff --git a/server/db/messages.js b/server/db/messages.js old mode 100644 new mode 100755 diff --git a/server/db/parameters.js b/server/db/parameters.js old mode 100644 new mode 100755 index f4447a7..c693116 --- a/server/db/parameters.js +++ b/server/db/parameters.js @@ -1,112 +1,106 @@ const db = require('./db'); const logger = require('../util/logger'); +/* function getSingleParameter(req, res, next) { - const parameterID = Number(req.params.parameter_id); - db.one('select * from parameters where parameter_id = $1', parameterID) - .then(function(data) { - res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); + logger.winston.info('parameters.getSingleParameter'); + const parameterID = req.params.parameter_id; + + const data = db.get('parameters') + .filter({ parameter_id: parameterID }) + .value() + res.status(200).json(data); } -function getIntentParameters(req, res, next) { - logger.winston.info('parameters.getExpressionParameters'); - const intentId = Number(req.params.intent_id); - db.any('select * from expression_parameters where intent_id = $1', intentId) - .then(function(data) { - res.status(200).json(data); - }) - .catch(function(err) { - return next(err); +function removeParameter(req, res, next) { + const parameterID = req.params.parameter_id; + + db.get('parameters') + .remove({ parameter_id: parameterID }) + .write() + + res.status(200).json({ + status: 'success', + message: 'Removed' }); } +*/ function getExpressionParametersQuery(req, res, next) { logger.winston.info('parameters.getExpressionParametersQuery'); const expressionIds = req.query.expression_ids; - const sql = `select * from expression_parameters where expression_id in (${expressionIds})`; - db.any(sql) - .then(function(data) { + db.all('select * from expression_parameters where expression_id in (?)', expressionIds, function(err, data) { + if (err) { + logger.winston.info(err); + } else { res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); + } + }); + } -function updateParameter(req, res, next) { - logger.winston.info('parameters.updateParameter'); - db.none('update parameters set entity_id=$1 where parameter_id=$2', [ - req.body.entity_id, - Number(req.params.parameter_id)]) - .then(function() { - res.status(200).json({ - status: 'success', - message: 'Updated parameter'}); - }) - .catch(function(err) { - return next(err); - }); +function getIntentParameters(req, res, next) { + logger.winston.info('parameters.getIntentParameters'); + db.all('select * from expression_parameters where intent_id = ?', req.params.intent_id, function(err, data) { + if (err) { + logger.winston.info(err); + } else { + res.status(200).json(data); + } + }); } function getExpressionParameters(req, res, next) { logger.winston.info('parameters.getExpressionParameters'); - const expressionId = Number(req.params.expression_id); - db.any( - 'select * from expression_parameters where expression_id = $1', - expressionId - ) - .then(function(data) { + db.all('select * from expression_parameters where expression_id = ?', req.params.expression_id, function(err, data) { + if (err) { + logger.winston.info(err); + } else { res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); + } + }); } function createExpressionParameter(req, res, next) { logger.winston.info('parameters.createExpressionParameter'); - if (!req.body.entity_id) { - req.body.entity_id = null; - } - db.any( - 'insert into parameters (expression_id, parameter_end, parameter_start, parameter_value, entity_id)' + - 'values($(expression_id), $(parameter_end), $(parameter_start), $(parameter_value), $(entity_id))', - req.body - ) - .then(function() { - res.status(200).json({ - status: 'success', - message: 'Inserted'}); - }) - .catch(function(err) { - return next(err); - }); + db.run('insert into expression_parameters(expression_id, parameter_start, parameter_end, parameter_value, intent_id)' + 'values (?,?,?,?,?)', [req.body.expression_id, req.body.parameter_start, req.body.parameter_end, req.body.parameter_value, req.body.intent_id], function(err) { + if (err) { + logger.winston.info("Error inserting a new record"); + } else { + res.status(200).json({ status: 'success', message: 'Inserted' }); + } + }); } -function removeParameter(req, res, next) { - const parameterId = Number(req.params.parameter_id); - db.result('delete from parameters where parameter_id = $1', parameterId) - .then(function(result) { - /* jshint ignore:start */ - res.status(200).json({ - status: 'success', - message: `Removed ${result.rowCount}`}); - /* jshint ignore:end */ - }) - .catch(function(err) { - return next(err); - }); +function updateParameter(req, res, next) { + //Sets the entity once a new parameter has been created + logger.winston.info('parameters.updateParameter'); + db.run('update expression_parameters set entity_id = ? where parameter_id = ?', [req.body.entity_id, req.body.parameter_id], function(err) { + if (err) { + logger.winston.info("Error updating the record"); + } else { + res.status(200).json({ status: 'success', message: 'Updated' }); + } + }); +} + +function removeExpressionParameter(req, res, next) { + db.run('delete from expression_parameters where parameter_id = ?', req.params.parameter_id, function(err) { + if (err) { + logger.winston.info("Error removing the record"); + } else { + res.status(200).json({ status: 'success', message: 'Removed' }); + } + }); } module.exports = { - getSingleParameter, + //getSingleParameter, getExpressionParameters, getIntentParameters, createExpressionParameter, - removeParameter, + removeExpressionParameter, + //removeParameter, updateParameter, - getExpressionParametersQuery}; + getExpressionParametersQuery +}; diff --git a/server/db/regex.js b/server/db/regex.js old mode 100644 new mode 100755 index f9fcb2e..68de60b --- a/server/db/regex.js +++ b/server/db/regex.js @@ -3,73 +3,57 @@ const logger = require('../util/logger'); function getAgentRegex(req, res, next) { logger.winston.info('regex.getAgentRegex'); - const agentId = Number(req.params.agent_id); - db.any('select * from regex where agent_id = $1', agentId) - .then(function(data) { + db.all('select * from regex where agent_id = ?', req.params.agent_id, function(err, data) { + if (err) { + logger.winston.info(err); + } else { res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); + } + }); } function getSingleRegex(req, res, next) { logger.winston.info('regex.getSingleRegex'); - const regexID = Number(req.params.regex_id); - db.one('select * from regex where regex_id = $1', regexID) - .then(function(data) { + db.get('select * from regex where regex_id = ?', req.params.regex_id, function(err, data) { + if (err) { + logger.winston.info(err); + } else { res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); + } + }); } function createRegex(req, res, next) { logger.winston.info('regex.createRegex'); - db.any( - 'insert into regex(regex_name, regex_pattern, agent_id) values($(regex_name), $(regex_pattern), $(agent_id)) RETURNING regex_id', - req.body - ) - .then(function(data) { - res.status(200).json({ - status: 'success', - message: 'Inserted', - regex_id: data[0].regex_id}); - }) - .catch(function(err) { - return next(err); - }); + db.run('insert into regex(agent_id, regex_name, regex_pattern)' + 'values (?,?,?)', [req.body.agent_id, req.body.regex_name, req.body.regex_pattern], function(err) { + if (err) { + logger.winston.info("Error inserting a new record"); + } else { + res.status(200).json({ status: 'success', message: 'Inserted' }); + } + }); } function updateRegex(req, res, next) { - db.none( - 'update regex set regex_name=$1, regex_pattern=$3 where regex_id=$2', - [req.body.regex_name, Number(req.params.regex_id), req.body.regex_pattern] - ) - .then(function() { - res.status(200).json({ - status: 'success', - message: 'Updated regex'}); - }) - .catch(function(err) { - return next(err); - }); + logger.winston.info('regex.updateRegex'); + db.run('update regex set regex_name = ?, regex_pattern = ? where regex_id = ?', [req.body.regex_name, req.body.regex_pattern, req.body.regex_id], function(err) { + if (err) { + logger.winston.info("Error updating the record"); + } else { + res.status(200).json({ status: 'success', message: 'Updated' }); + } + }); } function removeRegex(req, res, next) { - const regexID = Number(req.params.regex_id); - db.result('delete from regex where regex_id = $1', regexID) - .then(function(result) { - /* jshint ignore:start */ - res.status(200).json({ - status: 'success', - message: `Removed ${result.rowCount}`}); - /* jshint ignore:end */ - }) - .catch(function(err) { - return next(err); - }); + logger.winston.info('regex.removeRegex'); + db.run('delete from regex where regex_id = ?', req.params.regex_id, function(err) { + if (err) { + logger.winston.info("Error removing the record"); + } else { + res.status(200).json({ status: 'success', message: 'Removed' }); + } + }); } module.exports = { diff --git a/server/db/responses.js b/server/db/responses.js old mode 100644 new mode 100755 index e202e11..5c1b42c --- a/server/db/responses.js +++ b/server/db/responses.js @@ -3,85 +3,53 @@ const logger = require('../util/logger'); function getIntentResponses(req, res, next) { logger.winston.info('responses.getIntentResponses'); - const intentID = Number(req.params.intent_id); - logger.winston.info('responses.getIntentResponses ::intentID' + intentID); - db.any('select * from responses where intent_id = $1', intentID) - .then(function(data) { + + db.all('select * from responses where intent_id = ?', req.params.intent_id, function(err, data) { + if (err) { + logger.winston.info(err); + } else { res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); + } + }); } function getActionResponses(req, res, next) { logger.winston.info('responses.getActionResponses'); - const action_id = Number(req.params.action_id); - db.any('select * from responses where action_id = $1', action_id) - .then(function(data) { + db.all('select * from responses where action_id = ?', req.params.action_id, function(err, data) { + if (err) { + logger.winston.info(err); + } else { res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); + } + }); } -function createActionResponse(req, res, next) { - logger.winston.info('responses.createActionResponse'); - //using default response type - db.any( - 'insert into responses(action_id, response_text, response_type, buttons_info, response_image_url)' + - 'values($(action_id), $(response_text),$(response_type),$(buttons_info),$(response_image_url))', - //using default response type - req.body - ) - .then(function() { - res.status(200).json({ - status: 'success', - message: 'Inserted'}); - }) - .catch(function(err) { - logger.winston.info(err); - return next(err); - }); -} function createIntentResponse(req, res, next) { logger.winston.info('responses.createIntentResponse'); - //using default response type - db.any( - 'insert into responses(intent_id, response_text, response_type)' + - 'values($(intent_id), $(response_text),$(response_type))', - //using default response type - req.body - ) - .then(function() { - res.status(200).json({ - status: 'success', - message: 'Inserted'}); - }) - .catch(function(err) { - return next(err); - }); + db.run('insert into responses(intent_id, response_text, response_type)' + 'values (?,?,?)', [req.body.intent_id, req.body.response_text, req.body.response_type], function(err) { + if (err) { + logger.winston.info("Error inserting a new record"); + } else { + res.status(200).json({ status: 'success', message: 'Inserted' }); + } + }); } function removeResponse(req, res, next) { - const responseID = Number(req.params.response_id); logger.winston.info('responses.removeResponse'); - db.result('delete from responses where response_id = $1', responseID) - .then(function(result) { - res.status(200).json({ - status: 'success', - message: 'Removed ' + result.rowCount}); - /* jshint ignore:end */ - }) - .catch(function(err) { - return next(err); - }); + db.run('delete from responses where response_id = ?', req.params.response_id, function(err) { + if (err) { + logger.winston.info("Error removing the record"); + } else { + res.status(200).json({ status: 'success', message: 'Removed' }); + } + }); } function getRandomResponseForIntent(req, res, next) { - logger.winston.info('responses.getRandomResponseForIntent'); + logger.winston.info('responses.getRandomResponseForIntent - not done'); + /* db.any( 'SELECT responses.response_text FROM responses, intents where responses.intent_id = intents.intent_id and intents.intent_name = $1 order by random() LIMIT 1', req.query.intent_name @@ -92,10 +60,12 @@ function getRandomResponseForIntent(req, res, next) { .catch(function(err) { return next(err); }); + */ } function getActionResponsesQuery(req, res, next) { - logger.winston.info('responses.getActionResponsesQuery'); + logger.winston.info('responses.getActionResponsesQuery - not done'); + /* const actionIds = req.query.action_ids; const sql = `select responses.*, actions.action_name from responses,actions where actions.action_id=responses.action_id and responses.action_id in (${actionIds})`; @@ -107,6 +77,21 @@ function getActionResponsesQuery(req, res, next) { .catch(function(err) { return next(err); }); + */ +} + +function createActionResponse(req, res, next) { + logger.winston.info('responses.createActionResponse'); + /* using default response type + const responseID = db.db_sequence('response_id_sequence'); + db.get('responses') + .push({ response_id: responseID, action_id: req.body.action_id, response_text: req.body.response_text, response_type: req.body.response_type, buttons_info: req.body.buttons_info, response_image_url: req.body.response_image_url }) + .write() + + res.status(200).json({ + status: 'success', + message: 'Inserted'}); + */ } module.exports = { diff --git a/server/db/settings.js b/server/db/settings.js old mode 100644 new mode 100755 index 1b8e662..d1b6782 --- a/server/db/settings.js +++ b/server/db/settings.js @@ -4,39 +4,36 @@ const logger = require('../util/logger'); function getSingleSetting(req, res, next) { logger.winston.info('settings.getSingleSetting'); const settingName = req.params.setting_name; - db.one('select * from settings where setting_name = $1', settingName) - .then(function(data) { + + db.get('select * from settings where setting_name = ?', req.params.agent_id, function(err, data) { + if (err) { + logger.winston.info(err); + } else { res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); + } + }); } function getSettings(req, res, next) { logger.winston.info('settings.getSettings'); - db.any('select * from settings') - .then(function(data) { + db.all('select * from settings', function(err, data) { + if (err) { + logger.winston.info(err); + } else { res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); + } + }); } function updateSetting(req, res, next) { logger.winston.info('settings.updateSetting'); - db.none('update settings set setting_value=$1 where setting_name=$2', [ - req.body.setting_value, - req.params.setting_name]) - .then(function() { - res.status(200).json({ - status: 'success', - message: 'Updated setting'}); - }) - .catch(function(err) { - return next(err); - }); + db.run('update settings set setting_value = ? where setting_name = ?', [req.body.setting_value, req.body.setting_name], function(err) { + if (err) { + logger.winston.info("Error updating the record"); + } else { + res.status(200).json({ status: 'success', message: 'Updated' }); + } + }); } module.exports = { diff --git a/server/db/synonyms.js b/server/db/synonyms.js old mode 100644 new mode 100755 index 643987e..b52f614 --- a/server/db/synonyms.js +++ b/server/db/synonyms.js @@ -3,60 +3,53 @@ const logger = require('../util/logger'); function getSingleSynonym(req, res, next) { logger.winston.info('synonym.getSingleSynonym'); - const synonymId = Number(req.params.synonym_id); - db.one('select * from synonyms where synonym_id = $1', synonymId) - .then(function(data) { + db.get('select * from synonyms where synonym_id = ?', req.params.synonym_id, function(err, data) { + if (err) { + logger.winston.info(err); + } else { res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); + } + }); } function getAgentSynonyms(req, res, next) { logger.winston.info('synonym.getAgentSynonyms'); - const agentId = Number(req.params.agent_id); - db.any('select * from synonyms where agent_id = $1', agentId) - .then(function(data) { + + db.all('select * from synonyms where agent_id = ?', req.params.agent_id, function(err, data) { + if (err) { + logger.winston.info(err); + } else { res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); + } + }); } function createAgentSynonym(req, res, next) { logger.winston.info('synonym.createAgentSynonym'); - db.any( - 'insert into synonyms(agent_id, synonym_reference)' + - 'values($(agent_id), $(synonym_reference)) RETURNING synonym_id', - req.body - ) - .then(function(data) { - res.status(200).json({ - status: 'success', - message: 'Inserted', - synonym_id: data[0].synonym_id}); - }) - .catch(function(err) { - return next(err); - }); + db.run('insert into synonyms(agent_id, synonym_reference, regex_pattern)' + 'values (?,?,?)', [req.body.agent_id, req.body.synonym_reference, req.body.regex_pattern], function(err) { + if (err) { + logger.winston.info("Error inserting a new record"); + } else { + db.get('SELECT last_insert_rowid()', function(err, data) { + if (err) { + res.status(500).json({ status: 'error', message: '' }); + } else { + res.status(200).json({ status: 'success', message: 'Inserted', synonym_id: data['last_insert_rowid()'] }); + } + }); + } + }); } function removeSynonym(req, res, next) { logger.winston.info('synonym.removeExpression'); - const synonymId = Number(req.params.synonym_id); - db.result('delete from synonyms where synonym_id = $1', synonymId) - .then(function(result) { - /* jshint ignore:start */ - res.status(200).json({ - status: 'success', - message: `Removed ${result.rowCount}`}); - /* jshint ignore:end */ - }) - .catch(function(err) { - return next(err); - }); + db.run('delete from synonyms where agent_id = ?', req.params.synonym_id, function(err) { + if (err) { + logger.winston.info("Error removing the record"); + } else { + res.status(200).json({ status: 'success', message: 'Removed', synonym_id: data }); + } + }); } module.exports = { diff --git a/server/db/variants.js b/server/db/variants.js old mode 100644 new mode 100755 index 5bae57f..97b66b8 --- a/server/db/variants.js +++ b/server/db/variants.js @@ -3,109 +3,86 @@ const logger = require('../util/logger'); function getSingleVariant(req, res, next) { logger.winston.info('variants.getSingleVariant'); - const synonymVariantId = Number(req.params.synonym_variant_id); - db.any( - 'select * from synonym_variant where synonym_variant_id = $1', - synonymVariantId - ) - .then(function(data) { + db.get('select * from synonym_variants where synonym_variant_id = ?', req.params.synonym_variant_id, function(err, data) { + if (err) { + logger.winston.info(err); + } else { res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); + } + }); } function getSynonymVariants(req, res, next) { logger.winston.info('variants.getSynonymVariants'); - const synonymId = Number(req.params.synonym_id); - db.any('select * from synonym_variant where synonym_id = $1', synonymId) - .then(function(data) { + db.all('select * from synonym_variants where synonym_id = ?', req.params.synonym_id, function(err, data) { + if (err) { + logger.winston.info(err); + } else { res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); + } + }); } function getSynonymsVariants(req, res, next) { logger.winston.info('variants.getSynonymVariants'); const synonymsId = req.params.synonyms_id; - db.any( - `select * from synonym_variant where synonym_id in (${synonymsId})` - ) - .then(function(data) { + db.all('select * from synonym_variants where synonym_id in (?)', synonymsId, function(err, data) { + if (err) { + logger.winston.info(err); + } else { res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); + } + }); } function getAllSynonymVariants(req, res, next) { logger.winston.info('variants.getAllSynonymVariants'); - - db.any( - "select synonym_reference as value, '[' || string_agg('\'' || synonym_value || '\'', ', ') || ']' as synonyms from entity_synonym_variants group by 1" - ) - .then(function(data) { + db.all("select synonym_reference as value, '[' || string_agg('\'' || synonym_value || '\'', ', ') || ']' as synonyms from entity_synonym_variants group by 1", function(err, data) { + if (err) { + logger.winston.info(err); + } else { res.status(200).json(data); - }) - .catch(function(err) { - return next(err); - }); + } + }); } function createVariant(req, res, next) { logger.winston.info('variants.createVariant'); - db.any( - 'insert into synonym_variant(synonym_id, synonym_value)' + - 'values($(synonym_id), $(synonym_value))', - req.body - ) - .then(function() { - res.status(200).json({ - status: 'success', - message: 'Inserted'}); - }) - .catch(function(err) { - return next(err); - }); + db.run('insert into synonym_variants (synonym_id, synonym_value)' + 'values (?, ?)', [req.body.synonym_id, req.body.synonym_value], function(err) { + if (err) { + logger.winston.info("Error inserting a new record"); + } else { + db.get('SELECT last_insert_rowid()', function(err, data) { + if (err) { + res.status(500).json({ status: 'error', message: '' }); + } else { + res.status(200).json({ status: 'success', message: 'Inserted', synonym_variant_id: data['last_insert_rowid()'] }); + } + }); + } + }); } function removeVariant(req, res, next) { logger.winston.info('variants.removeVariant'); - const variantId = Number(req.params.synonym_variant_id); - db.result( - 'delete from synonym_variant where synonym_variant_id = $1', - variantId - ) - .then(function(result) { - /* jshint ignore:start */ - res.status(200).json({ - status: 'success', - message: `Removed ${result.rowCount}`}); - /* jshint ignore:end */ - }) - .catch(function(err) { - return next(err); - }); + db.run('delete from synonym_variants where synonym_variant_id = ?', req.params.synonym_variant_id, function(err) { + if (err) { + logger.winston.info("Error removing the record"); + } else { + res.status(200).json({ status: 'success', message: 'Removed' }); + } + }); } function removeSynonymVariants(req, res, next) { logger.winston.info('variants.removeSynonymVariants'); - const synonymId = Number(req.params.synonym_id); - db.result('delete from synonym_variant where synonym_id = $1', synonymId) - .then(function(result) { - /* jshint ignore:start */ - res.status(200).json({ - status: 'success', - message: `Removed ${result.rowCount}`}); - /* jshint ignore:end */ - }) - .catch(function(err) { - return next(err); - }); + db.run('delete from synonym_variants where synonym_id = ?', req.params.synonym_id, function(err) { + if (err) { + logger.winston.info("Error removing the record"); + } else { + res.status(200).json({ status: 'success', message: 'Removed' }); + } + }); } module.exports = { diff --git a/server/routes/auth.js b/server/routes/auth.js old mode 100644 new mode 100755 index 26f1459..3d0ce86 --- a/server/routes/auth.js +++ b/server/routes/auth.js @@ -5,14 +5,19 @@ const logger = require('../util/logger'); function authenticateUser(req, res, next) { //authenticate user logger.winston.info('Authenticate User'); - if (req.body.username === 'admin' && req.body.password === 'admin') { + if (req.body.username === global.admin_username && req.body.password === global.admin_password) { //create token and send it back const tokenData = { username: 'admin', name: 'Portal Administrator' }; // if user is found and password is right - // create a token - const token = jwt.sign(tokenData, global.jwtsecret); + // create a token] + var token = "" + try { + token = jwt.sign(tokenData, global.jwtsecret); + } catch (err) { + console.log(err); + }; // return the information including token as JSON - res.json({ username: 'admin', token }); + res.json({ username: 'admin', token: token }); } else { logger.winston.info('Information didnt match or not provided.'); return res.status(401).send({ @@ -35,7 +40,11 @@ function authenticateClient(req, res, next) { name: req.body.user_fullname}; // if user is found and password is right // create a token - const token = jwt.sign(tokenData, global.jwtsecret); + try { + const token = jwt.sign(tokenData, global.jwtsecret); + } catch (err) { + console.log(err); + }; // return the information including token as JSON res.status(200).json({ username: req.body.username, token: token }); }) diff --git a/server/routes/health.js b/server/routes/health.js deleted file mode 100644 index fec55fc..0000000 --- a/server/routes/health.js +++ /dev/null @@ -1,7 +0,0 @@ -function liveness(req, res, next) { - res.json({message: "Rasa UI is running"}); -} - -module.exports = { - liveness: liveness -} \ No newline at end of file diff --git a/server/routes/index.js b/server/routes/index.js old mode 100644 new mode 100755 index 6dbccc0..4d1a6ee --- a/server/routes/index.js +++ b/server/routes/index.js @@ -13,13 +13,11 @@ const variants = require('../db/variants'); const settings = require('../db/settings'); const responses = require('../db/responses'); const messages = require('../db/messages'); -const middleware = require('./middleware'); -const health = require('./health'); -const rasa_events = require('./rasa_events'); -const core_router = require('./mw_routes/core_router'); + const nlu_router = require('./mw_routes/nlu_router'); const auth = require('./auth'); const logs = require('../db/logs'); + //routes agent router.get('/agents', agents.getAllAgents); router.get('/agents/:agent_id', agents.getSingleAgent); @@ -37,10 +35,6 @@ router.get('/agents/:agent_id/actions', actions.getAgentActions); //routes intents router.get('/agents/:agent_id/intents', intents.getAgentIntents); router.get('/intents/:intent_id', intents.getSingleIntent); -router.get( - '/intents/:intent_id/unique_intent_entities', - intents.getUniqueIntents -); router.put('/intents/:intent_id', intents.updateIntent); router.post('/agents/:agent_id/intents', intents.createAgentIntent); router.post('/intents', intents.createAgentIntent); @@ -54,15 +48,12 @@ router.post('/expressions', expressions.createIntentExpression); router.delete('/expressions/:expression_id', expressions.removeExpression); //routes parameters router.get('/expression_parameters', parameters.getExpressionParametersQuery); //Used for training -router.get( - '/expresions/:expression_id/parameters', - parameters.getExpressionParameters -); -router.get('/parameters/:parameter_id', parameters.getSingleParameter); +router.get('/expresions/:expression_id/parameters', parameters.getExpressionParameters); +//router.get('/parameters/:parameter_id', parameters.getSingleParameter); router.get('/intent/:intent_id/parameters', parameters.getIntentParameters); router.post('/parameters', parameters.createExpressionParameter); router.put('/parameters/:parameter_id', parameters.updateParameter); -router.delete('/parameters/:parameter_id', parameters.removeParameter); +router.delete('/parameters/:parameter_id', parameters.removeExpressionParameter); //routes entities router.get('/entities', entities.getAllEntities); router.get('/entities/agent/:agent_id', entities.getAllEntitiesForAgent); @@ -107,51 +98,37 @@ router.get('/nlu_log/:query', logs.getLogs); router.get('/intent_usage_by_day', logs.getIntentUsageByDay); router.get('/intent_usage_total', logs.getIntentUsageTotal); router.get('/request_usage_total', logs.getRequestUsageTotal); +router.get('/total_log_entries', logs.getTotalLogEntries); router.get('/avg_intent_usage_by_day', logs.getAvgIntentUsageByDay); router.get('/nlu_parse_log/:agent_id', logs.getNluParseLogByAgent); router.get('/agentsByIntentConfidencePct/:agent_id', logs.getAgentsByIntentConfidencePct); router.get('/intentsMostUsed/:agent_id', logs.getIntentsMostUsed); -router.get( - '/avgNluResponseTimesLast30Days', - logs.getAvgNluResponseTimesLast30Days -); -router.get( - '/avgUserResponseTimesLast30Days', - logs.getAvgUserResponseTimesLast30Days -); +router.get('/avgNluResponseTimesLast30Days', logs.getAvgNluResponseTimesLast30Days); +router.get('/avgUserResponseTimesLast30Days', logs.getAvgUserResponseTimesLast30Days); router.get('/activeUserCountLast12Months', logs.getActiveUserCountLast12Months); router.get('/activeUserCountLast30Days', logs.getActiveUserCountLast30Days); //rasa nlu api's router.get('/rasa/status', nlu_router.getRasaNluStatus); router.get('/rasa/url', nlu_router.getRasaNluEndpoint); -router.get('/rasa/config', nlu_router.getRasaNluConfig); +//router.get('/rasa/config', nlu_router.getRasaNluConfig); router.get('/rasa/version', nlu_router.getRasaNluVersion); -router.post('/rasa/train', nlu_router.trainRasaNlu); +router.post('/model/train', nlu_router.trainRasaNlu); router.delete('/rasa/models', nlu_router.unloadRasaModel); //common middleware for parse -router.post('/rasa/parse', middleware.parseRasaRequest); -//rasa core API -router.post('/rasa/restart', core_router.restartRasaCoreConversation); +router.post('/rasa/model/parse', nlu_router.parseRequest); + //rasa core events logging API -router.post('/rasa/logEvents', rasa_events.logEventsRoute); //messages api router.get('/agent/:agent_id/messages', messages.getUniqueUsersList); -router.get( - '/agent/:agent_id/recent9UniqueUsersList', - messages.getRecent9UniqueUsersList -); +router.get('/agent/:agent_id/recent9UniqueUsersList', messages.getRecent9UniqueUsersList); router.post('/messages/list', messages.getMessagesListByUser); router.put('/messages/:messages_id', messages.updateMessage); router.get('/messages/:messages_id', messages.getMessageDetails); router.delete('/messages/:message_id/entities', messages.deleteMessageEntities); -router.put( - '/messages/:message_id/entities/:entity_id', - messages.updateMessageEntities -); +router.put('/messages/:message_id/entities/:entity_id', messages.updateMessageEntities); router.post('/messages/:message_id/entities', messages.addMessageEntities); //authentication js router.post('/auth', auth.authenticateUser); router.post('/authclient', auth.authenticateClient); -router.get('/health', health.liveness); module.exports = router; diff --git a/server/routes/middleware.js b/server/routes/middleware.js deleted file mode 100644 index bd28ad5..0000000 --- a/server/routes/middleware.js +++ /dev/null @@ -1,96 +0,0 @@ -const logger = require('../util/logger'); -const db = require('../db/db'); -const messages = require('../db/messages'); -const NodeCache = require('node-cache'); -const core_router = require('./mw_routes/core_router'); -const nlu_router = require('./mw_routes/nlu_router'); -//https://github.com/mpneuried/nodecache -const agentCache = new NodeCache(); - - -/* - * Middleware for parse Request. All other requests go to specific modules. - */ -function parseRasaRequest(req, res, next) { - logger.winston.info('Got to parse middleware'); - let agentObj; - if (req.body.q === '') { - logger.winston.info('No Query in the RASA Parse Request.'); - sendOutput(500, res, '{"error" : "No Query in the Rasa Parse Request !!"}'); - return; - } - //attempt to get it from the cache: Sync call - const agent_name = req.body.project; - logger.winston.info(agent_name); - if (agent_name !== undefined) { - agentObj = agentCache.get(agent_name); - } - - const messageObj = {}; - messageObj.user_id = req.jwt.username; - messageObj.user_name = req.jwt.name; - messageObj.message_text = req.body.q; - messageObj.message_rich = null; - messageObj.user_message_ind = true; - - if (agentObj === undefined && agent_name === undefined) { - routeRequest(req, res, next, messageObj); - } else if (agentObj === undefined) { - logger.winston.info( - 'Cache Not Found for Agent. Making a DB call for: ' + agent_name - ); - db.any( - 'SELECT agent_id, agent_name, endpoint_enabled, endpoint_url, basic_auth_username, ' + - ' basic_auth_password, rasa_core_enabled from agents where agent_name = $1', - agent_name - ) - .then(function(data) { - try { - logger.winston.info('Agent Information: ' + JSON.stringify(data)); - //cache Agents only if Env variable is set. - if (global.cacheagents === 'true') { - //add this to the cache - logger.winston.info( - 'global.cacheagents is true. Setting Agent in cache' - ); - agentCache.set(agent_name, data[0]); - } - //route the req to appropriate router. - routeRequest(req, res, next, data[0]); - } catch (err) { - logger.winston.info(err); - } - }) - .catch(function(err) { - logger.winston.info('DB Error while getting agent details.'); - logger.winston.info(err); - }); - } else { - //insert user_message into message table. - logger.winston.info('parseRasaRequest'); - messageObj.agent_id = agentObj.agent_id; - routeRequest(req, res, next, agentObj); - } -} - -async function routeRequest(req, res, next, agentObj) { - logger.winston.info('routeRequest'); - if (agentObj !== undefined && agentObj.rasa_core_enabled) { - core_router.parseRequest(req, res, next, agentObj) - } else { - nlu_router.parseRequest(req, res, next, agentObj); - } -} - -function sendOutput(http_code, res, body) { - res.writeHead(http_code, { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json'}); - if (body !== '') { - res.write(body); - } - res.end(); -} -module.exports = { - parseRasaRequest: parseRasaRequest -}; diff --git a/server/routes/mw_routes/core_router.js b/server/routes/mw_routes/core_router.js deleted file mode 100644 index 49dcd2e..0000000 --- a/server/routes/mw_routes/core_router.js +++ /dev/null @@ -1,120 +0,0 @@ -const request = require('request'); -const logger = require('../../util/logger'); - -function sendHTTPResponse(http_code, res, body) { - if (body != null && body !== '') { - res.send(body); - } -} - -function restartRasaCoreConversation(req, res) { - logger.winston.info( - 'Rasa Core Restart Request -> ' + global.rasacoreendpoint - ); - try { - request( - { - method: 'POST', - uri: - `${global.rasacoreendpoint}/conversations/${req.jwt.username}/tracker/events`, - body: JSON.stringify({ events: [{ event: 'restart' }] })}, - function(error, response, body) { - if (error) { - logger.winston.info(error); - sendHTTPResponse(500, res, '{"error" : "Exception caught !!"}'); - return; - } - logger.winston.info('Restart Response' + JSON.stringify(body)); - sendHTTPResponse(200, res, body); - } - ); - } catch (err) { - logger.winston.info(err); - sendHTTPResponse(500, res, '{"error" : "Exception caught !!"}'); - } -} - -function parseRequest(req, res, next, agentObj) { - // Allow to add a project name and a conversation id in your rasa core url - const path_core = global.rasacorerequestpath - .replace('{id}', req.jwt.username) - .replace('{project}', req.body.project); - let core_url = global.rasacoreendpoint + path_core; - if (global.coresecuritytoken !== '') { - core_url = core_url + '?token=' + global.coresecuritytoken; - } - try { - request( - { - headers: { - Authorization: 'Bearer ' + global.corejwttoken - }, - method: 'POST', - uri: core_url, - body: {sender:req.jwt.username, message: req.body.q }, - json: true}, - function(error, response, body) { - if (error) { - logger.winston.info(error); - sendHTTPResponse( - 500, - res, - '{"error" : "A problem has occurred"}' - ); - return; - } - if (response.status !== 200 && typeof response.status !== 'undefined') { - sendHTTPResponse(response.statusCode, res, body); - } else { - sendHTTPResponse(200, res, body); -/* // Ignore formattting.. show the entire response from rasa core. - - // If the status is 200, only display the text for the moment - // TODO Display images - - let response = ''; - body.forEach(function(element) { - response += element.text + ' \r\n'; - logger.winston.info('Réponse : ', response); - if (element.hasOwnProperty('buttons')) { - logger.winston.info('Has property : ', element); - element.buttons.forEach(function(button) { - logger.winston.info('Button : ', button); - response += `- '${button.title}\r\n`; - }); - } - }); - sendHTTPResponse(200, res, response); - */ - } - } - ); - } catch (err) { - logger.winston.info(err); - sendHTTPResponse( - 500, - res, - '{"error" : "A problem has occurred"}' - ); - } -} - -function getRasaCoreVersion() { - logger.winston.info( - 'Rasa Core Version Request -> ' + global.rasacoreendpoint + '/version' - ); - return new Promise(function(resolve, reject) { - request(`${global.rasacoreendpoint}/version`, function(error, res, body) { - if (!error && res.statusCode === 200) { - resolve(body); - } else { - reject(error); - } - }); - }); -} - -module.exports = { - getRasaCoreVersion, - parseRequest, - restartRasaCoreConversation}; diff --git a/server/routes/mw_routes/nlu_router.js b/server/routes/mw_routes/nlu_router.js old mode 100644 new mode 100755 index 5ac13c1..a4ce0c8 --- a/server/routes/mw_routes/nlu_router.js +++ b/server/routes/mw_routes/nlu_router.js @@ -1,18 +1,12 @@ //All NLU specific functions and routes. const request = require('request'); const db = require('../../db/db'); -const NodeCache = require('node-cache'); +const logs = require('../../db/logs'); const logger = require('../../util/logger'); -//https://github.com/mpneuried/nodecache -const nluParseLogCache = new NodeCache(); -const YAML = require('yaml'); - function getRasaNluStatus(req, res, next) { - logger.winston.info( - 'Rasa NLU Status Request -> ' + global.rasanluendpoint + '/status' - ); - request(global.rasanluendpoint + '/status', function (error, response, body) { + logger.winston.info('Rasa NLU Status Request -> ' + global.rasa_endpoint + '/status'); + request(global.rasa_endpoint + '/status', function (error, response, body) { try { if (body !== undefined) sendOutput(200, res, body); else sendOutput(500, res, '{"error" : "Server Error"}'); @@ -24,15 +18,14 @@ function getRasaNluStatus(req, res, next) { } function getRasaNluEndpoint(req, res, next) { - console.log("Rasa NLU Endpoint Request"); - sendOutput(200, res, '{"url" : "' + global.rasanluendpoint + '"}'); + logger.winston.info("Rasa NLU Endpoint Request"); + sendOutput(200, res, '{"url" : "' + global.rasa_endpoint + '"}'); } +/* No longer available? function getRasaNluConfig(req, res, next) { - logger.winston.info( - 'Rasa NLU Config Request -> ' + global.rasanluendpoint + '/config' - ); - request(global.rasanluendpoint + '/config', function (error, response, body) { + logger.winston.info('Rasa NLU Config Request -> ' + global.rasa_endpoint + '/config'); + request(global.rasa_endpoint + '/config', function (error, response, body) { try { if (body !== undefined) sendOutput(200, res, body); else sendOutput(500, res, '{"error" : "Server Error"}'); @@ -42,12 +35,11 @@ function getRasaNluConfig(req, res, next) { } }); } +*/ function getRasaNluVersion(req, res, next) { - logger.winston.info( - 'Rasa NLU Version Request -> ' + global.rasanluendpoint + '/version' - ); - request(global.rasanluendpoint + '/version', function (error, response, body) { + logger.winston.info('Rasa NLU Version Request -> ' + global.rasa_endpoint + '/version'); + request(global.rasa_endpoint + '/version', function (error, response, body) { try { if (body !== undefined) sendOutput(200, res, body); else sendOutput(500, res, '{"error" : "Server Error"}'); @@ -59,34 +51,10 @@ function getRasaNluVersion(req, res, next) { } function trainRasaNlu(req, res, next) { - console.log("Rasa NLU Train Request -> " + global.rasanluendpoint + "/train?project=" + req.query.project + "&model=" + req.query.name); - - try { - nlu_pipeline = JSON.parse(req.body.pipeline) - } catch(err) { - nlu_pipeline = req.body.pipeline - } - - var reqBody = JSON.stringify({ - language: req.body.language, - pipeline: nlu_pipeline, - data: req.body.data - }); - logRequest(req, "train", { - project: req.query.project, - model: req.query.name, - data: reqBody - }); - + logger.winston.info("Rasa NLU Train Request -> " + global.rasa_endpoint + "/model/train"); + console.log(JSON.stringify(req.body)); try { - request({ - method: "POST", - uri: global.rasanluendpoint + "/train?project=" + req.query.project + "&model=" + req.query.name, - headers: { - 'Content-Type': 'application/json' - }, - body: reqBody - }, function (error, response, body) { + request({ method: "POST", uri: global.rasa_endpoint + "/model/train", headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(req.body) }, function (error, response, body) { console.log("Done with Request"); if (error) { @@ -116,11 +84,11 @@ function trainRasaNlu(req, res, next) { } function unloadRasaModel(req, res, next) { - const query = req.url.replace("/rasa/models",""); - console.log("Delete Rasa NLU Model Request -> " + global.rasanluendpoint + "/models"+ query); + const query = req.url.replace("/rasa/models", ""); + logger.winston.info("Delete Rasa NLU Model Request -> " + global.rasa_endpoint + "/models" + query); request({ method: "DELETE", - uri: global.rasanluendpoint + "/models" + query, + uri: global.rasa_endpoint + "/models" + query, }, function (error, response, body) { if (error) { console.log(error); @@ -138,193 +106,25 @@ function unloadRasaModel(req, res, next) { }); } -function parseRequest(req, res, next, agentObj) { - logger.winston.info( - 'Routing to NLU Parse Request -> ' + global.rasanluendpoint + '/parse' - ); - - if (req.body.q === '') { - logger.winston.info('Query not found'); - sendOutput(500, res, '{"error" : "Query not found !!"}'); - return; - } - - let modelName; - let projectName; - - let cache_key; - if (req.body.model !== undefined) { - projectName = req.body.project; - modelName = req.body.model; - cache_key = req.jwt.username + '_' + modelName + '_' + Date.now(); - logRequest(req, 'parse', { - project: projectName, - model: modelName, - intent: '', - query: req.body.q - }); - createInitialCacheRequest(req, cache_key, agentObj); - } - - request({ - method: 'POST', - uri: global.rasanluendpoint + '/parse', - body: JSON.stringify(req.body) - }, +function parseRequest(req, res, next) { + logger.winston.info('Routing to NLU Parse Request -> ' + global.rasa_endpoint + '/model/parse'); + request({ method: 'POST', uri: global.rasa_endpoint + '/model/parse', body: JSON.stringify(req.body) }, function (error, response, body) { - if (error) { - logger.winston.info(error); - sendOutput(500, res, '{"error" : ' + error + "}"); - } try { logger.winston.info('rasa_response:+++ ' + body); - updateCacheWithRasaNluResponse(JSON.parse(body), cache_key); - updateAndSendRasaResponse( - req, - cache_key, - JSON.parse(body), - modelName, - projectName, - res - ); + logs.logRequest(req, 'parse', { + // project: projectName, + // model: modelName, + // intent: '', + server_response: body, + query: req.body.q + }); + sendOutput(200, res, body); } catch (err) { logger.winston.info(err); sendOutput(500, res, '{"error" : ' + err + "}"); } - } - ); -} - -// ---------------------------------------------------------- -// Utility functions for middleware -// ---------------------------------------------------------- -function finalizeCacheFlushToDbAndRespond(cacheKey, http_code, res, body) { - nluParseLogCache.get(cacheKey, function (err, nlu_parse_cache) { - if (!err) { - if (nlu_parse_cache === undefined) { - // quit logging and return - logger.winston.info('Cache Not Found for key ' + cacheKey); - } else { - if (body !== '') { - if (body.response_text !== undefined) - nlu_parse_cache.response_text = body.response_text; - if (body.response_rich !== undefined) - nlu_parse_cache.message_rich = body.response_rich; - nlu_parse_cache.user_response_time_ms = - Date.now() - nlu_parse_cache.createTime; - } - //insert message and use that id to insert nlu_parse_log - nlu_parse_cache.message_text = nlu_parse_cache.response_text; - nlu_parse_cache.user_message_ind = false; - - if (nlu_parse_cache.agent_id !== undefined) { - //insert user message and nlu classification - db.any( - 'insert into messages(agent_id, user_id, user_name, message_text, user_message_ind, intent_id)' + - ' values($(agent_id), $(user_id),$(user_name), $(request_text), true, (SELECT intent_id FROM intents WHERE intent_name=$(intent_name) and agent_id=$(agent_id))) RETURNING messages_id', - nlu_parse_cache - ) - .then(function (returnData) { - nlu_parse_cache.messages_id = returnData[0].messages_id; - db.none( - 'INSERT INTO nlu_parse_log(intent_name, entity_data, messages_id,intent_confidence_pct, user_response_time_ms,nlu_response_time_ms) ' + - ' values($(intent_name), $(entity_data), $(messages_id), $(intent_confidence_pct),$(user_response_time_ms),$(nlu_response_time_ms))', - nlu_parse_cache - ) - .then(function () { - logger.winston.info('Cache inserted into db. Removing it'); - nluParseLogCache.del(cacheKey); - }) - .catch(function (err) { - logger.winston.info('Exception while inserting Parse log'); - logger.winston.info(err); - }); - //insert bot message - db.any( - 'insert into messages(agent_id, user_id, user_name, message_text, message_rich, user_message_ind)' + - ' values($(agent_id), $(user_id),$(user_name), $(message_text), $(message_rich), false) RETURNING messages_id', - nlu_parse_cache - ).then(function (returnData) { - logger.winston.info('Message Inserter Successfully!!'); - }).catch(function (err) { - logger.winston.info('Exception in the DB log'); - logger.winston.info(err); - }); - }) - .catch(function (err) { - logger.winston.info('Exception in the DB log'); - logger.winston.info(err); - }); - } - } - } else { - logger.winston.info('Cache Not Found for key ' + cacheKey); - return; - } - }); - //send response - res.writeHead(http_code, { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json' - }); - if (body !== '') { - res.write(JSON.stringify(body)); - } - res.end(); -} - -function updateCacheWithRasaNluResponse(rasa_response, cacheKey) { - nluParseLogCache.get(cacheKey, function (err, nlu_parse_cache) { - if (!err) { - if (nlu_parse_cache === undefined) { - // quite logging and return - logger.winston.info('Cache Not Found for key ' + cacheKey); - } else { - try { - nlu_parse_cache.intent_name = rasa_response.intent.name; - nlu_parse_cache.entity_data = JSON.stringify(rasa_response.entities); - nlu_parse_cache.intent_confidence_pct = - rasa_response.intent.confidence.toFixed(2) * 100; - nlu_parse_cache.nlu_response_time_ms = - Date.now() - nlu_parse_cache.createTime; - nluParseLogCache.set(cacheKey, nlu_parse_cache); - } catch (err) { - //logger.winston.info(err); - } - } - } else { - logger.winston.info('Cache Not Found for key ' + cacheKey); - } - }); -} - -function createInitialCacheRequest(req, cacheKey, agentObj) { - logger.winston.info('Create Initial cache'); - const nluParseReqObj = {}; - nluParseReqObj.request_text = req.body.q; - nluParseReqObj.model_name = req.body.model; - nluParseReqObj.project_name = req.body.project; - nluParseReqObj.user_id = req.jwt.username; - nluParseReqObj.user_name = req.jwt.name; - nluParseReqObj.createTime = Date.now(); - //empty object - nluParseReqObj.intent_name = ''; - nluParseReqObj.entity_data = '{}'; - nluParseReqObj.response_text = ''; - nluParseReqObj.message_rich = '{}'; - nluParseReqObj.intent_confidence_pct = 0; - nluParseReqObj.user_response_time_ms = 0; - nluParseReqObj.nlu_response_time_ms = 0; - //set agent_id - if (agentObj !== undefined) { - nluParseReqObj.agent_id = agentObj.agent_id; - } - //set it in the cache - nluParseLogCache.set(cacheKey, nluParseReqObj, function (err, success) { - if (!err && success) { - logger.winston.info('Object Inserted into Cache'); - } - }); + }); } function sendOutput(http_code, res, body) { @@ -338,177 +138,9 @@ function sendOutput(http_code, res, body) { res.end(); } -function logRequest(req, type, data) { - try { - const obj = {}; - obj.ip_address = - req.headers['x-forwarded-for'] || req.connection.remoteAddress; - obj.query = req.originalUrl; - obj.event_type = type; - obj.event_data = data; - logger.winston.info(obj); - - db.any( - 'insert into nlu_log(ip_address, query, event_type, event_data)' + - 'values($(ip_address), $(query), $(event_type), $(event_data))', - obj - ).catch(function (err) { - logger.winston.info(err); - }); - } catch (err) { - logger.winston.info('Error: ' + err); - } -} - -function updateAndSendRasaResponse( - req, - cacheKey, - rasa_response, - modelName, - projectName, - res -) { - if (rasa_response.intent === undefined) { - finalizeCacheFlushToDbAndRespond(cacheKey, 200, res, rasa_response); - } else { - db.any( - 'select agents.endpoint_enabled as agent_endpoint, agents.endpoint_url, agents.basic_auth_username,agents.basic_auth_password, ' + - 'intents.endpoint_enabled as intent_endpoint, intents.intent_id, intents.intent_name from agents, intents where agents.agent_name=$2 ' + - ' and intents.intent_name=$1 and intents.agent_id=agents.agent_id', - [rasa_response.intent.name, projectName] - ).then(function (data) { - //check if webhook is configured - if (data.length > 0) { - if (data[0].intent_endpoint === true) { - //post rasa_response to configured webhook - //Need to add HTTP Basic Authentication - request.post({ - url: data[0].endpoint_url, - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json', - Authorization: 'Bearer ' + req.original_token - }, - body: JSON.stringify(rasa_response) - }, - function (error, response, body) { - if (error) { - //Got error from webhook,log and and send original rasa nlu response - logger.winston.info(error); - rasa_response.response_text = - 'Configured Webhook threw an error. Check with the service provider.'; - finalizeCacheFlushToDbAndRespond( - cacheKey, - 200, - res, - rasa_response - ); - return; - } - try { - //respond back to client. - //Expecting API.ai style response element. - //var response_text={ - // 'speech': '', - // 'displayText': '', - // 'dataToClient':{} - //} - logger.winston.info( - 'Response from Webhook --> ' + JSON.stringify(body) - ); - if (body !== undefined) { - rasa_response.response_text = JSON.parse(body).displayText; - rasa_response.response_rich = JSON.parse(body).dataToClient; - logger.winston.info( - 'Sending Rasa NLU Response + Webhook response' - ); - finalizeCacheFlushToDbAndRespond( - cacheKey, - 200, - res, - rasa_response - ); - } else { - logger.winston.info( - 'Unknown response from webhook. Respond back with Rasa NLU only' - ); - finalizeCacheFlushToDbAndRespond( - cacheKey, - 200, - res, - rasa_response - ); - } - } catch (err) { - logger.winston.info( - 'Error from Webhook. Respond back with Rasa NLU only' - ); - logger.winston.info(err); - finalizeCacheFlushToDbAndRespond( - cacheKey, - 200, - res, - rasa_response - ); - } - } - ); - } else { - //no webhook, check if there is a static response configured - db.any( - 'SELECT responses.response_text FROM responses, intents where responses.intent_id = intents.intent_id and intents.intent_id = $1 order by random() LIMIT 1', - data[0].intent_id - ) - .then(function (data) { - if (data.length > 0) { - rasa_response.response_text = data[0].response_text; - logger.winston.info( - 'Sending Rasa NLU Response + Static response configured' - ); - finalizeCacheFlushToDbAndRespond( - cacheKey, - 200, - res, - rasa_response - ); - } else { - logger.winston.info( - 'No Static response configured. Respond back with Rasa NLU only' - ); - finalizeCacheFlushToDbAndRespond( - cacheKey, - 200, - res, - rasa_response - ); - } - }) - .catch(function (err) { - logger.winston.info( - 'Error occurred. Respond back with Rasa NLU only' - ); - logger.winston.info(err); - finalizeCacheFlushToDbAndRespond( - cacheKey, - 200, - res, - rasa_response - ); - }); - } - } else { - logger.winston.info( - 'No intent Data found. Respond back with Rasa NLU only' - ); - finalizeCacheFlushToDbAndRespond(cacheKey, 200, res, rasa_response); - } - }); - } -} - module.exports = { getRasaNluStatus: getRasaNluStatus, - getRasaNluConfig: getRasaNluConfig, + /*getRasaNluConfig: getRasaNluConfig,*/ getRasaNluVersion: getRasaNluVersion, trainRasaNlu: trainRasaNlu, parseRequest: parseRequest, diff --git a/server/routes/rasa_events.js b/server/routes/rasa_events.js deleted file mode 100755 index 3ecb349..0000000 --- a/server/routes/rasa_events.js +++ /dev/null @@ -1,347 +0,0 @@ -/* - RasaCore (Event Brokers) events are outputted to RabbitMQ - This route is dedicated to rasa core events logging - Conversation history - RasaCore called actions - - Logstash can transfert from RabbitMQ input to RasaUI /rasa/logEvents route: - With that logstash/pipeline/logstash.conf: - input { - rabbitmq { - queue => "queue" - host => "rabbitmq" - durable => true - user => "admin" - password => "admin" - } - } - - output { - http { - url => "http://rasa_ui:5001/api/v2/rasa/logEvents" - http_method => "post" - headers => { - "Authorization" => "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwidXNlcl9mdWxsbmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.mwUCpY096a34ttMYoNnE0ShY0sHJdRJUJSt9RiIoLpQ" - "Accept" => "application/json" - } - format=>"json" - } - - - Let RasaUI fill the proper DB for its consistency: - messages - nlu_log - nlu_parse_log - -*/ -const db = require('../db/db'); -const logger = require('../util/logger'); -const amqp = require('amqplib/callback_api'); - -async function insertNLUParseLogDB(nlulogData) { - db.none( - 'INSERT INTO nlu_parse_log(messages_id, intent_name, entity_data, intent_confidence_pct, user_response_time_ms, nlu_response_time_ms) VALUES ($(messages_id), $(intent_name), $(entity_data), $(intent_confidence_pct),$(user_response_time_ms),$(nlu_response_time_ms))', - nlulogData - ) - .then(function() { - logger.winston.info('Cache inserted into NLU db'); - }) - .catch(function(err) { - logger.winston.info('Exception while inserting NLU Parse log'); - logger.winston.info(err); - }); -} - -async function insertMessagesEntitiesDB(messagesEntitiesDataItem) { - logger.winston.info('insertMessagesEntitiesDB'); - logger.winston.info(messagesEntitiesDataItem); - - db.none( - 'INSERT INTO messages_entities(message_id, entity_id, entity_start, entity_end, entity_value, entity_confidence) VALUES ($(message_id), $(entity_id), $(entity_start), $(entity_end), $(entity_value), $(entity_confidence))', - messagesEntitiesDataItem - ) - .then(function() { - logger.winston.info('Cache inserted into MessagesEntities db'); - }) - .catch(function(err) { - logger.winston.info('Exception while inserting MessagesEntities db'); - logger.winston.info(err); - }); -} - -async function processAllEntitiesFromExpressionId(messagesEntitiesData) { - logger.winston.info('processAllEntitiesFromExpressionId'); - logger.winston.info(messagesEntitiesData); - - if (messagesEntitiesData.expression_id != null) { - db.any( - 'SELECT entity_id, parameter_start, parameter_end, parameter_value FROM parameters WHERE expression_id=$(expression_id)', - messagesEntitiesData - ) - .then(function(data) { - logger.winston.info(data); - for (let i = 0; i < data.length; i++) { - const messagesEntitiesDataItem = {}; - messagesEntitiesDataItem.message_id = messagesEntitiesData.message_id; - messagesEntitiesDataItem.entity_id = data[i].entity_id; - messagesEntitiesDataItem.entity_start = data[i].parameter_start; - messagesEntitiesDataItem.entity_end = data[i].parameter_end; - messagesEntitiesDataItem.entity_value = data[i].parameter_value; - messagesEntitiesDataItem.entity_confidence = 0; - - insertMessagesEntitiesDB(messagesEntitiesDataItem); - } - }) - .catch(function(err) { - logger.winston.info('Error in DB call' + err); - }); - } else { - // Just insert detected entities - const entities = messagesEntitiesData.entities; - for (let i = 0; i < entities.length; i++) { - messagesEntitiesData.current_entity = entities[i]; - // Find entity_id - db.any( - 'SELECT entity_id FROM entities WHERE entity_name=$(entity)', - entities[i] - ) - .then(function(data) { - logger.winston.info(data); - if (data[0] !== undefined) { - let messagesEntitiesDataItem = {}; - messagesEntitiesDataItem.message_id = - messagesEntitiesData.message_id; - messagesEntitiesDataItem.entity_id = data[0].entity_id; - messagesEntitiesDataItem.entity_start = - messagesEntitiesData.current_entity.start; - messagesEntitiesDataItem.entity_end = - messagesEntitiesData.current_entity.end; - messagesEntitiesDataItem.entity_value = - messagesEntitiesData.current_entity.value; - messagesEntitiesDataItem.entity_confidence = - messagesEntitiesData.current_entity.confidence; - - insertMessagesEntitiesDB(messagesEntitiesDataItem); - } - }) - .catch(function(err) { - logger.winston.info('Error in DB call' + err); - }); - } - } -} - -async function processInsertMessagesEntitiesDB(messagesEntitiesData) { - logger.winston.info('processInsertMessagesEntitiesDB 0'); - logger.winston.info(messagesEntitiesData); - db.any( - 'SELECT expression_id FROM expressions WHERE LOWER(expression_text)=LOWER($(message_text))', - messagesEntitiesData - ) - .then(function(data) { - logger.winston.info(data); - if (data[0] !== undefined) { - logger.winston.info('processInsertMessagesEntitiesDB 1'); - // If expression_id is found, get it - // If expression_id is not found, just insert the detected intents - messagesEntitiesData.expression_id = data[0].expression_id; - } - processAllEntitiesFromExpressionId(messagesEntitiesData); - }) - .catch(function(err) { - logger.winston.info('Error in DB call' + err); - messagesEntitiesData.expression_id = null; - }); -} - -async function insertlogEventMessageToDB( - message, - corelogData, - nlulogData, - messagesEntitiesData -) { - db.any( - 'INSERT INTO messages(timestamp, agent_id, user_id, user_name, message_text, message_rich, user_message_ind, intent_id)' + - ' VALUES($(timestamp), $(agent_id), $(user_id),$(user_name), $(message_text), $(message_rich), $(user_message_ind), (SELECT intent_id FROM intents WHERE intent_name=$(intent_name) and agent_id=$(agent_id))) RETURNING messages_id', - message - ) - - .then(function(response) { - logger.winston.info( - 'Message Inserted with Id: ' + response[0].messages_id - ); - - //corelogData.messages_id = response[0].messages_id; - if (nlulogData !== undefined && nlulogData !== null) { - nlulogData.messages_id = response[0].messages_id; - //insertCoreParseLogDB(corelogData); - insertNLUParseLogDB(nlulogData); - } - - if (messagesEntitiesData !== undefined && messagesEntitiesData !== null) { - messagesEntitiesData.message_id = response[0].messages_id; - messagesEntitiesData.message_text = message.message_text; - messagesEntitiesData.expression_id = null; - processInsertMessagesEntitiesDB(messagesEntitiesData); - } - }) - .catch(function(err) { - logger.winston.info('Exception while inserting inserting to DB'); - logger.winston.info(err); - }); -} - -async function processLogEventsToDBs( - message, - corelogData, - nlulogData, - messagesEntitiesData -) { - logger.winston.info('processLogEventsToDBs'); - let sqlCommand = ''; - - if (message.event == 'user') { - sqlCommand = 'SELECT agent_id FROM agents WHERE agent_name=$(agent_name)'; - } else if (message.event == 'bot') { - sqlCommand = - "SELECT agent_id FROM messages WHERE user_id=$(user_id) and user_name='user' ORDER BY timestamp DESC LIMIT 1"; - } - - db.any(sqlCommand, message) - .then(function(data) { - logger.winston.info(data); - if (data[0] !== undefined) { - message.agent_id = data[0].agent_id; - - insertlogEventMessageToDB( - message, - corelogData, - nlulogData, - messagesEntitiesData - ); - } - }) - .catch(function(err) { - logger.winston.info('Error in DB call' + err); - }); -} - -async function logEventsRoute(req, res, next) { - const rasaCoreEvent = req.body; - - logEvents( - rasaCoreEvent, - function() { - res.status(200).json({ - status: 'success', - message: 'Inserted'}); - }, - function(err) { - res.status(500).json({ 'Error logEvents': err }); - } - ); -} - -function startRabbitMQListener(){ - logger.winston.info("Starting AMQP listener"); - amqp.connect("amqp://"+global.rasacorerabbitmqhost, function (err, conn) { - conn.createChannel(function (err, ch) { - ch.consume(global.rasacorerabbitmqqueuename, function (msg) { - console.log(" [x] Received %s", msg.content.toString()); - logEvents( - JSON.parse(msg.content.toString()), - function() { - logger.winston.info("SuccessFully inserted rasa event to DB"); - }, - function(err) { - logger.winston.error("Failed to inserted rasa event to DB"); - } - ); - }, { - noAck: true - }); - }); - }); -} - -async function logEvents(rasaCoreEvent, success_callback, failure_callback) { - const message = {}; - let nluLogData = null; - if ( - rasaCoreEvent !== undefined && - (rasaCoreEvent.event === 'user' || rasaCoreEvent.event === 'bot') - ) { - logger.winston.info('user or bot event'); - logger.winston.info(rasaCoreEvent); - - var event_timestamp = new Date(0); - event_timestamp.setUTCSeconds(rasaCoreEvent.timestamp); - message.timestamp = event_timestamp; - message.user_id = rasaCoreEvent.sender_id; - - message.user_name = rasaCoreEvent.event; - message.message_text = rasaCoreEvent.text; - message.agent_id = 0; - - if (rasaCoreEvent.event === 'user') { - message.event = rasaCoreEvent.event; - message.user_message_ind = true; - message.message_rich = rasaCoreEvent.parse_data; - message.agent_name = rasaCoreEvent.parse_data.project; - message.intent_name = rasaCoreEvent.parse_data.intent.name; - } else { - message.event = rasaCoreEvent.event; - message.user_message_ind = false; - message.message_rich = rasaCoreEvent.data; - message.agent_name = ''; - message.intent_name = ''; - - if (rasaCoreEvent.data.elements && rasaCoreEvent.data.elements[0].text) { - // RasaCore logs for custom message has the text inside that field - message.message_text = rasaCoreEvent.data.elements[0].text; - } - } - - //logger.winston.info(message); - let messagesEntitiesData; - if (rasaCoreEvent.event === 'user') { - nluLogData = {}; - nluLogData.intent_name = rasaCoreEvent.parse_data.intent.name; - nluLogData.entity_data = JSON.stringify( - rasaCoreEvent.parse_data.entities - ); - nluLogData.intent_confidence_pct = - rasaCoreEvent.parse_data.intent.confidence.toFixed(2) * 100; - nluLogData.user_response_time_ms = 0; - nluLogData.nlu_response_time_ms = 0; - - //logger.winston.info(nluLogData); - messagesEntitiesData = {}; - messagesEntitiesData.entities = rasaCoreEvent.parse_data.entities; - } else { - nluLogData = null; - messagesEntitiesData = null; - } - - try { - await processLogEventsToDBs( - message, - null, - nluLogData, - messagesEntitiesData - ); - success_callback(); - } catch (err) { - logger.winston.info('Exception while inserting inserting to DB'); - logger.winston.info(err); - failure_callback(); - } - } else { - //logger.winston.info('NO user or bot event'); - success_callback(); - } -} - -module.exports = { - logEventsRoute, startRabbitMQListener -}; diff --git a/server/server.js b/server/server.js index 699678a..ac12ecc 100755 --- a/server/server.js +++ b/server/server.js @@ -1,44 +1,10 @@ // Global Variables -global.postgresserver = - process.env.postgresserver || process.env.npm_package_config_postgresserver; -global.rasanluendpoint = - process.env.rasanluendpoint || process.env.npm_package_config_rasanluendpoint; -global.rasacoreendpoint = - process.env.rasacoreendpoint || - process.env.npm_package_config_rasacoreendpoint; -global.jwtsecret = - process.env.jwtsecret || process.env.npm_package_config_jwtsecret; -global.coresecuritytoken = - process.env.coresecuritytoken || - process.env.npm_package_config_coresecuritytoken; -global.corejwttoken = - process.env.corejwttoken || process.env.npm_package_config_corejwttoken; -global.corejwttoken= process.env.corejwttoken || process.env.npm_package_config_corejwttoken;global.nlusecuritytoken = - process.env.nlusecuritytoken || - process.env.npm_package_config_nlusecuritytoken; -global.cacheagents = - process.env.cacheagents || process.env.npm_package_config_cacheagents; -global.rasacorerequestpath = - process.env.rasacorerequestpath || - process.env.npm_package_config_rasacorerequestpath; -global.adalauthentication = - process.env.adalauthentication || - process.env.npm_package_config_adalauthentication; -global.adalinstance = - process.env.adalinstance || process.env.npm_package_config_adalinstance; -global.adaltenantid = - process.env.adaltenantid || process.env.npm_package_config_adaltenantid; -global.adalclientid = - process.env.adalclientid || process.env.npm_package_config_adalclientid; -global.adaltokenissuer = -process.env.adaltokenissuer || process.env.npm_package_config_adaltokenissuer; -global.rasacorerequestpath = - process.env.rasacorerequestpath || - process.env.npm_package_config_rasacorerequestpath; - -global.rasacoreeventconsumer =process.env.rasacoreeventconsumer ||process.env.npm_package_config_rasacoreeventconsumer; -global.rasacorerabbitmqhost =process.env.rasacorerabbitmqhost ||process.env.npm_package_config_rasacorerabbitmqhost; -global.rasacorerabbitmqqueuename =process.env.rasacorerabbitmqqueuename ||process.env.npm_package_config_rasacorerabbitmqqueuename; +global.rasa_endpoint = process.env.rasa_endpoint || process.env.npm_package_config_rasa_endpoint; +global.jwtsecret = process.env.jwtsecret || process.env.npm_package_config_jwtsecret; +global.loglevel = process.env.loglevel || process.env.npm_package_config_loglevel; +global.admin_username = process.env.admin_username || process.env.npm_package_config_admin_username; +global.admin_password = process.env.admin_password || process.env.npm_package_config_admin_password; +global.db_schema = process.env.db_schema || process.env.npm_package_config_db_schema; const express = require('express'); const proxy = require('http-proxy-middleware'); @@ -46,49 +12,10 @@ const bodyParser = require('body-parser'); var app = express(); const request = require('request'); const routes = require('./routes/index'); -const cors = require('cors'); -const jwt = require('jsonwebtoken'); -const rasa_envents = require('./routes/rasa_events'); - const db = require('./db/db'); -// Passport for Azure AD -const passport = require('passport'); -const OIDCBearerStrategy = require('passport-azure-ad').BearerStrategy; - const logger = require('./util/logger'); -if(global.rasacoreeventconsumer === 'true'){ - rasa_envents.startRabbitMQListener(); -} - -if (global.adalauthentication === 'true') { - const options = { - // Metadata/Azure AD tenantID/clientID - identityMetadata: - global.adalinstance + '/' + - global.adaltenantid + - '/.well-known/openid-configuration', - clientID: global.adalclientid, - // Validate issuer - validateIssuer: true, - issuer: global.adaltokenissuer + '/' + global.adaltenantid + '/', - //passReqToCallback: false, - loggingLevel: 'error' - }; - - const bearerStrategy = new OIDCBearerStrategy(options, function(token, done) { - if (!token.oid) done(new Error('oid is not found in token')); - else { - done(null, token); - } - }); - - app.use(passport.initialize()); - passport.use(bearerStrategy); -} - -app.use(cors()); app.use( bodyParser.urlencoded({ parameterLimit: 10000, @@ -97,203 +24,57 @@ app.use( }) ); app.use(bodyParser.json({ limit: '2mb' })); + /** Serve static files for UI website on root / */ app.use('/', express.static('web/src/')); app.use('/scripts', express.static('node_modules/')); -// route middleware to verify a token -app.use(function(req, res, next) { - logger.winston.info(`${req.method} ${req.url}`); - if (req.originalUrl.endsWith('health')) { - next(); - } else { - if ( - global.adalauthentication === 'true' && - !req.originalUrl.endsWith('logEvents') - ) { - // Azure AD authentication - passport.authenticate('oauth-bearer', (err, user, info) => { - if (err) { - logger.winston.error('ERROR passport.authenticate oauth-bearer'); - res.status(401).send({ - success: false, - message: 'No token provided.' - }); - } else { - if (!user) { - logger.winston.error('ERROR JWT token verify failed'); - res.status(401).send({ - success: false, - message: 'No token provided.' - }); - } else { - // if everything is good, save to request for use in other routes - req.jwt = user; - //req.original_token=user; - - // Azure AD token has no username field;Propagate sessionId - req.jwt.username = 'admin'; - next(); - } - } - })(req, res, next); - } else { - // Basic Authentication - if (!req.headers.authorization) { - if ( - req.originalUrl.endsWith('auth') || - req.originalUrl.endsWith('authclient') - ) { - logger.winston.info('No Token, but got an Auth request. Allowing it'); - next(); - } else { - return res.status(401).send({ - success: false, - message: 'No Authorization header.'}); - } - } else { - // read token and check it - if (req.headers.authorization.split(' ')[0] === 'Bearer') { - const token = req.headers.authorization.split(' ')[1]; - // verifies secret and checks exp - jwt.verify(token, global.jwtsecret, function(err, decoded) { - if (err) { - return res.json({ - success: false, - message: 'Failed to authenticate token.'}); - } else { - // if everything is good, save to request for use in other routes - req.jwt = decoded; - req.original_token = token; - next(); - } - }); - } else { - // if there is no token send error..angularjs/ chat clients will figure how to create the token. - return res.status(401).send({ - success: false, - message: 'No token provided.'}); - } - } - } - } -}); - const server = require('http').createServer(app); - + app.use('/api/v2/', routes); -// error handlers -// development error handler -// will print stacktrace if (app.get('env') === 'development') { + // error handlers + // development error handler + // will print stacktrace app.use(function(err, req, res, next) { res.status(err.code || 500).json({ status: 'error', message: err }); }); -} - -// production error handler -// no stacktraces leaked to user -app.use(function(err, req, res, next) { - res.status(err.status || 500).json({ - status: 'error', - message: err.message +} else { + // production error handler + // no stacktraces leaked to user + app.use(function(err, req, res, next) { + res.status(err.status || 500).json({ + status: 'error', + message: err + }); }); -}); +} const listener = server.listen(5001); checkRasaUI(); -checkDB(); -checkRasaNLU(); -checkRasaCore(); +checkRasa(); function checkRasaUI() { logger.winston.info( 'Rasa UI Server: http://localhost:' + listener.address().port ); - logger.winston.info(''); -} - -function checkDB() { - const dbconn = - process.env.postgresserver !== undefined - ? 'process.env.postgresserver' - : 'package.json'; - db.one( - 'select current_database(), current_schema(), inet_server_port(), inet_server_addr()' - ) - .then(function(data) { - logger.winston.info(''); - logger.winston.info('Postgres DB Connected'); - logger.winston.info('Using connection string from: ' + dbconn); - logger.winston.info( - 'Postgres Server: ' + - data['inet_server_addr'] + - ':' + - data['inet_server_port'] - ); - logger.winston.info('Database:' + data['current_database']); - logger.winston.info('Schema:' + data['current_schema']); - logger.winston.info(''); - }) - .catch(function(err) { - logger.winston.info('Postgres DB Connection Error: ' + err); - logger.winston.info('Using connection string from: ' + dbconn); - }); -} - -function checkRasaNLU() { - const rasaconn = - process.env.rasanluendpoint !== undefined - ? 'process.env.rasanluendpoint' - : 'package.json'; - request(global.rasanluendpoint + '/config', function(error, response, body) { - try { - if (body !== undefined) { - logger.winston.info(''); - logger.winston.info('Rasa NLU Connected'); - logger.winston.info('Using connection string from: ' + rasaconn); - logger.winston.info('Rasa NLU Server: ' + global.rasanluendpoint); - } - if (error !== null) { - logger.winston.info(''); - logger.winston.info('Rasa NLU Error: ' + error); - logger.winston.info('Using connection string from: ' + rasaconn); - } - logger.winston.info(''); - } catch (err) { - logger.winston.info('Rasa Connection Error: ' + err); - } - }); } -function checkRasaCore() { - const rasacoreconn = - process.env.rasacoreendpoint !== undefined - ? 'process.env.rasacoreendpoint' - : 'package.json'; - request(global.rasacoreendpoint + '/version', function( - error, - response, - body - ) { +function checkRasa() { + request(global.rasa_endpoint + '/status', function(error, response, body) { try { + logger.winston.info('Rasa Server: ' + global.rasa_endpoint); if (body !== undefined) { - logger.winston.info(''); - logger.winston.info('Rasa Core Connected'); - logger.winston.info('Using connection string from: ' + rasacoreconn); - logger.winston.info('Rasa Core Server: ' + global.rasacoreendpoint); + logger.winston.info('--> Connected'); } if (error !== null) { - logger.winston.info(''); - logger.winston.info('Rasa Core Error: ' + error); - logger.winston.info('Using connection string from: ' + rasacoreconn); + logger.winston.info('--> Unable to connect to Rasa Server: ' + error); } - logger.winston.info(''); } catch (err) { logger.winston.info('Rasa Connection Error: ' + err); } diff --git a/server/util/logger.js b/server/util/logger.js old mode 100644 new mode 100755 index 1626d39..dcdf8b1 --- a/server/util/logger.js +++ b/server/util/logger.js @@ -1,6 +1,4 @@ const winston = require('winston'); -global.loglevel = - process.env.loglevel || process.env.npm_package_config_loglevel; class Logger { constructor(appliName) { diff --git a/web/src/app/app.js b/web/src/app/app.js index 7ea3365..2218b32 100755 --- a/web/src/app/app.js +++ b/web/src/app/app.js @@ -8,14 +8,12 @@ var app = angular "ngRoute", "chart.js", "ngResource", - "ngStorage", "ngTagsInput", "jsonFormatter", "angularModalService", - "AdalAngular" + "ngStorage" ]) - .run(function($rootScope, $http, $sessionStorage, appConfig, adalAuthenticationService) { - $rootScope.adalauthentication = appConfig.adalauthentication; + .run(function ($rootScope, $http, $sessionStorage, appConfig) { // keep user logged in after page refresh if ($sessionStorage.jwt) { @@ -27,25 +25,21 @@ var app = angular $rootScope.$broadcast("INVALID_JWT_TOKEN"); } - $rootScope.$on("USER_AUTHENTICATED", function(event) { + $rootScope.$on("USER_AUTHENTICATED", function (event) { $rootScope.authenticated = true; $http.defaults.headers.common.Authorization = "Bearer " + $sessionStorage.jwt; }); - $rootScope.$on("INVALID_JWT_TOKEN", function(event) { + $rootScope.$on("INVALID_JWT_TOKEN", function (event) { $rootScope.authenticated = false; $sessionStorage.$reset(); - - if (appConfig.adalauthentication) { - adalAuthenticationService.logOut(); - } }); }); angular .module("app") - .controller("appCtrl", function( + .controller("appCtrl", function ( $rootScope, $scope, $route, @@ -55,101 +49,34 @@ angular $http, $sessionStorage, $cookies, - adalAuthenticationService, - appConfig + appConfig, + Auth ) { $scope.$route = $route; $scope.$location = $location; $scope.$routeParams = $routeParams; - $scope.go = function(path) { + $scope.go = function (path) { $location.path(path); }; $scope.formData = {}; - $scope.$on("setAlertText", function(event, alert_text) { + $scope.$on("setAlertText", function (event, alert_text) { $("#alertTextDiv").addClass("show"); $scope.alert_text = alert_text; - $timeout(function() { + $timeout(function () { $("#alertTextDiv").removeClass("show"); }, 2000); }); - $scope.loginUser = function(user) { - $http - .post(appConfig.api_endpoint_v2 + "/auth", JSON.stringify(user)) - .then( - function(response) { - // success callback - $sessionStorage.jwt = response.data.token; - $cookies.put("loggedinjwt", $sessionStorage.jwt); - $rootScope.$broadcast("USER_AUTHENTICATED"); - }, - function(errorResponse) { - // failure callback - $("#alertTextDiv").addClass("show"); - $scope.alert_text = - "Invalid Username and Password. Please try again."; - $timeout(function() { - $("#alertTextDiv").removeClass("show"); - }, 2000); - } - ); - }; - - // ADAL - if (appConfig.adalauthentication) { - // this is referencing adal module to do login - //userInfo is defined at the $rootscope with adalAngular module - $scope.testMessage = ""; - $scope.init = function() { - $scope.testMessage = ""; - }; - - $scope.logout = function() { - adalAuthenticationService.logOut(); - $rootScope.$broadcast("INVALID_JWT_TOKEN"); - }; - - $scope.login = function() { - adalAuthenticationService.login(); - }; + $scope.loginUser = function (user) { - // optional - $scope.$on("adal:loginSuccess", function() { - $scope.testMessage = "loginSuccess"; - - // Inject Azure Token_ID as JWT Token - $sessionStorage.jwt = adalAuthenticationService.getCachedToken(appConfig.adalclientid); + Auth.save(JSON.stringify(user)).$promise.then(function(response) { + $sessionStorage.jwt = response.token; $cookies.put("loggedinjwt", $sessionStorage.jwt); $rootScope.$broadcast("USER_AUTHENTICATED"); }); - - // optional - $scope.$on("adal:loginFailure", function() { - $scope.testMessage = "loginFailure"; - $location.path("/login"); - }); - - // optional - $scope.$on("adal:notAuthorized", function(event, rejection, forResource) { - $scope.testMessage = "It is not Authorized for resource:" + forResource; - }); - - $scope.$on("adal:acquireTokenSuccess", function() { - $scope.testMessage = "acquireTokenSuccess"; - - // When ADAL.js refreshes token after expiration, $sessionStorage.jwt is desynchronized - $sessionStorage.jwt = adalAuthenticationService.getCachedToken(appConfig.adalclientid); - $cookies.put("loggedinjwt", $sessionStorage.jwt); - $rootScope.$broadcast("USER_AUTHENTICATED"); - }); - - $scope.$on("adal:acquireTokenFailure", function() { - $scope.testMessage = "acquireTokenFailure"; - adalAuthenticationService.logOut(); - $rootScope.$broadcast("INVALID_JWT_TOKEN"); - }); } - }); + + }); \ No newline at end of file diff --git a/web/src/app/components/actions/actions.html b/web/src/app/components/actions/actions.html old mode 100644 new mode 100755 diff --git a/web/src/app/components/actions/actions.js b/web/src/app/components/actions/actions.js old mode 100644 new mode 100755 diff --git a/web/src/app/components/agents/add_agent.html b/web/src/app/components/agents/add_agent.html old mode 100644 new mode 100755 index 6bd3cdb..6d7ed8a --- a/web/src/app/components/agents/add_agent.html +++ b/web/src/app/components/agents/add_agent.html @@ -1,6 +1,6 @@

@@ -8,27 +8,39 @@
-
-
- New Agent -
-
-
-
-
- - -
-
+
+
+ New Agent +
+
+
+
+
+ + +
+
+ + +
+
+ +
- - -
+
+ + +
-
-
+
+
\ No newline at end of file diff --git a/web/src/app/components/agents/add_agent.js b/web/src/app/components/agents/add_agent.js old mode 100644 new mode 100755 diff --git a/web/src/app/components/agents/agents.html b/web/src/app/components/agents/agents.html old mode 100644 new mode 100755 index c254e76..5592866 --- a/web/src/app/components/agents/agents.html +++ b/web/src/app/components/agents/agents.html @@ -1,12 +1,11 @@ - @@ -17,10 +16,8 @@
+
\ No newline at end of file diff --git a/web/src/app/components/regex/edit_regex.js b/web/src/app/components/regex/edit_regex.js index 4bc1055..3dfe3a7 100755 --- a/web/src/app/components/regex/edit_regex.js +++ b/web/src/app/components/regex/edit_regex.js @@ -3,27 +3,27 @@ angular.module('app').controller('EditRegexController', EditRegexController); function EditRegexController($rootScope, $scope, Regex, Agent) { $scope.message = ''; - Agent.get({ agent_id: $scope.$routeParams.agent_id }, function(data) { + Agent.get({ agent_id: $scope.$routeParams.agent_id }, function (data) { $scope.agent = data; }); - Regex.get({ regex_id: $scope.$routeParams.regex_id }, function(data) { + Regex.get({ regex_id: $scope.$routeParams.regex_id }, function (data) { $scope.regex = data; }); - $scope.deleteRegex = function() { + $scope.deleteRegex = function () { Regex.remove({ regex_id: $scope.$routeParams.regex_id }).$promise.then( - function() { + function () { $scope.go(`/agent/${$scope.$routeParams.agent_id}`); } ); }; - $scope.editRegex = function(agent) { + $scope.editRegex = function (agent) { Regex.update( { regex_id: $scope.regex.regex_id }, $scope.regex - ).$promise.then(function() { + ).$promise.then(function () { $rootScope.$broadcast('setAlertText', "Regex updated Sucessfully!!"); $scope.go(`/agent/${$scope.$routeParams.agent_id}`); }); diff --git a/web/src/app/components/settings/settings.html b/web/src/app/components/settings/settings.html index 52afaa9..d9e5b9b 100755 --- a/web/src/app/components/settings/settings.html +++ b/web/src/app/components/settings/settings.html @@ -1,5 +1,5 @@
@@ -7,25 +7,23 @@
-
- UI -
- -
- -
-
-
+
+
+ \ No newline at end of file diff --git a/web/src/app/components/settings/settings.js b/web/src/app/components/settings/settings.js index a7b6b9b..5cfa9fa 100755 --- a/web/src/app/components/settings/settings.js +++ b/web/src/app/components/settings/settings.js @@ -1,12 +1,12 @@ angular -.module('app') -.controller('SettingsController', SettingsController); + .module('app') + .controller('SettingsController', SettingsController); function SettingsController($rootScope, $scope, Settings) { - $scope.updateSettings = function(setting_name, setting_value) { - Settings.update({setting_name: setting_name}, {setting_name: setting_name, setting_value: setting_value}).$promise.then(function() { - $rootScope.$broadcast('refreshIntervelUpdate'); - $rootScope.$broadcast('setAlertText', 'Refresh interval updated Successfully'); + $scope.updateSettings = function (setting_name, setting_value) { + Settings.update({ setting_name: setting_name }, { setting_name: setting_name, setting_value: setting_value }).$promise.then(function () { + $rootScope.$broadcast('refreshIntervelUpdate'); + $rootScope.$broadcast('setAlertText', 'Refresh interval updated Successfully'); }); } } diff --git a/web/src/app/components/stories/stories.html b/web/src/app/components/stories/stories.html deleted file mode 100755 index 5b93859..0000000 --- a/web/src/app/components/stories/stories.html +++ /dev/null @@ -1,78 +0,0 @@ - - - -
-
-
-
-
- -
-
-
-
-
- - -
-
-
    -
  • {{intent.intent_name}}
  • -
-
-
-
-
- -
-
-
    -
  • {{ action.action_name }}
  • -
-
-
-
-
- -
-
-
    -
  • {{ entity.entity_name }}
  • -
-
-
-
-
-
-
-
-
\ No newline at end of file diff --git a/web/src/app/components/stories/stories.js b/web/src/app/components/stories/stories.js deleted file mode 100755 index 1372a26..0000000 --- a/web/src/app/components/stories/stories.js +++ /dev/null @@ -1,169 +0,0 @@ -angular.module('app').controller('StoriesController', StoriesController); - -function StoriesController( - $rootScope, - $scope, - $sce, - Agent, - AgentStories, - Intents, - AgentEntities, - AgentActions -) { - $scope.graphData = ''; - - var simplemde = new window.SimpleMDE({ - element: $('#MyID')[0], - toolbar: [ - { - name: 'heading2', - action: window.SimpleMDE.toggleHeading2, - className: 'fa fa-header', - title: 'Heading2' - }, - { - name: 'unorderedlist', - action: window.SimpleMDE.toggleUnorderedList, - className: 'fa fa-list-ul', - title: 'Generic List' - }, - '|', - { - name: 'preview', - action: window.SimpleMDE.togglePreview, - className: 'fa fa-eye no-disable', - title: 'Toggle Preview' - }, - //Story Visualization - /*{ - name: 'flowchart', - action: function customFunction(editor){ - processDataForVisual(simplemde.value()); - }, - className: 'fa fa-connectdevelop', - title: 'Visualize (Flowchart view)', - },*/ '|', - { - name: 'save', - action: function () { - const formdata = {}; - formdata.story_details = simplemde.value(); - formdata.agent_id = $scope.agent.agent_id; - AgentStories.save(formdata).$promise.then(function (resp) { - $rootScope.$broadcast( - 'setAlertText', - 'Stories Added to the Agent Sucessfully!!' - ); - $scope.go('/agent/' + $scope.$routeParams.agent_id); - }); - }, - className: 'fa fa-save', - title: 'Save' - } - ] - }); - - Agent.get({ agent_id: $scope.$routeParams.agent_id }, data => { - $scope.agent = data; - simplemde.value(data.story_details); - }); - Intents.query({ agent_id: $scope.$routeParams.agent_id }, function (data) { - $scope.intentList = data; - }); - - AgentEntities.query({ agent_id: $scope.$routeParams.agent_id }, function ( - data - ) { - $scope.entitiesList = data; - }); - - AgentActions.query({ agent_id: $scope.$routeParams.agent_id }, function ( - data - ) { - $scope.actionsList = data; - }); - - function processDataForVisual(mdData) { - const lines = mdData.split('\n'); - const graphArr = []; - let storyFlow = ''; - let story_line_count = 0; - for (let i = 0; i < lines.length; i++) { - const currentLine = lines[i]; - if (currentLine.startsWith('##')) { - //got a new story. - //push the old story if there is one. - if (storyFlow.length > 0) { - storyFlow = storyFlow.substring(0, storyFlow.lastIndexOf(';') + 1); - graphArr.push(storyFlow); - storyFlow = ''; - story_line_count = 0; - } - continue; - } else if (currentLine.startsWith('*')) { - //story:intent {entities} - let currentIntent, - entities = ''; - if (currentLine.indexOf('{') !== -1) { - //contains entities - currentIntent = currentLine.substring(2, currentLine.indexOf('{')); - entities = currentLine.substring( - currentLine.indexOf('{'), - currentLine.indexOf('}') - ); - } else { - currentIntent = currentLine.substring(2, currentLine.length); - } - if (story_line_count !== 0) { - //first action for the story - storyFlow = storyFlow + currentIntent + ';'; - } - storyFlow = storyFlow + currentIntent + '-->'; - } else if ( - currentLine.startsWith('\t-') || - currentLine.startsWith(' -') - ) { - //story:intent:action - storyFlow = - storyFlow + - currentLine.substring( - currentLine.indexOf('-') + 2, - currentLine.length - ) + - '((' + - currentLine.substring( - currentLine.indexOf('-') + 2, - currentLine.length - ) + - '));'; - storyFlow = - storyFlow + - currentLine.substring( - currentLine.indexOf('-') + 2, - currentLine.length - ) + - '-->'; - } - story_line_count++; - } - //process last story - storyFlow = storyFlow.substring(0, storyFlow.lastIndexOf(';') + 1); - graphArr.push(storyFlow); - - $scope.graphData = 'graph TD;' + graphArr.join(''); - } - - /* Remove mermaid.min.js file from assets/libs - $scope.getGraph = function () { - if ($scope.graphData.length > 0) { - setTimeout(function () { - window.mermaid.init(); - }, 2000); - return $sce.trustAsHtml($scope.graphData); - } else { - return ''; - } - }; -*/ - -} diff --git a/web/src/app/components/synonyms/add_synonym.js b/web/src/app/components/synonyms/add_synonym.js index 19589ac..7bfe050 100755 --- a/web/src/app/components/synonyms/add_synonym.js +++ b/web/src/app/components/synonyms/add_synonym.js @@ -6,11 +6,7 @@ function AddSynonymController($scope, Synonym, EntitySynonymVariants, Agent, Syn }); $scope.addSynonym = function (params) { - //First save the synonym into the synonym table - WTF is this mess? - const obNew = { - agent_id: $scope.$routeParams.agent_id, - synonym_reference: $("#synonym_reference").val() - }; + const obNew = { agent_id: $scope.$routeParams.agent_id, synonym_reference: $("#synonym_reference").val() }; $('#synonym_reference').val(''); Synonym.save(obNew).$promise.then(function (resp) { $scope.go('/agent/' + $scope.agent.agent_id + '/synonym/' + resp.synonym_id) diff --git a/web/src/app/components/synonyms/edit_synonym.html b/web/src/app/components/synonyms/edit_synonym.html index 844dc83..f859c42 100755 --- a/web/src/app/components/synonyms/edit_synonym.html +++ b/web/src/app/components/synonyms/edit_synonym.html @@ -18,14 +18,14 @@ - + - + {{ selectedBot.output_folder + "/" + model.server_path }}
{{ synonym.synonym_reference }}{{ synonym.synonym_reference }} + diff --git a/web/src/app/components/training/training.html b/web/src/app/components/training/training.html index 5fc583f..0f386c6 100755 --- a/web/src/app/components/training/training.html +++ b/web/src/app/components/training/training.html @@ -1,5 +1,5 @@
@@ -12,43 +12,54 @@ Training is currently running.
-
- Create Model -
-
-
- -
- -
-
+
+ Agent +
+
+
+ +
+
+
+
-
-
-
-
- Raw Training Data +
+
+
+
+ Raw Training Data +
+
+
+
+
-
-
- +
+
+ +
+
- +
+
+
+
+
+ -
-
-
-
- Available Models -
-
- - - - - - - - - - - - - -
Create Date/TimeName
{{ model.xdate }}{{ model.name }}
-
-
-
-
-
+
\ No newline at end of file diff --git a/web/src/app/components/training/training.js b/web/src/app/components/training/training.js index 9ca6e61..f63b395 100755 --- a/web/src/app/components/training/training.js +++ b/web/src/app/components/training/training.js @@ -1,340 +1,114 @@ angular.module('app').controller('TrainingController', TrainingController); function TrainingController($scope, $rootScope, $interval, $http, Rasa_Status, Agent, AgentRegex, ExpressionParameters, IntentExpressions, yaml, AgentEntities, AgentActions, AgentSynonyms, SynonymsVariants, appConfig) { - let statuscheck = $interval(getRasaStatus, 5000); let exportData; $scope.generateError = ''; $scope.toLowercase = false; $scope.message = ''; - $scope.raw_data = ''; + $scope.comment = ''; + //TODO: Tmp set raw data to working contents + $scope.raw_data = '{"config":"language: en\\npipeline: supervised_embeddings", "nlu": "## intent:greet \\n- hey \\n- hello \\n ## intent:goodbye \\n- cu \\n- goodbye", "out": "models", "force": false }'; - getRasaStatus(); - - $scope.$on('$destroy', function() { - $interval.cancel(statuscheck); - }); - - Agent.query(function(data) { + //TODO: All http functions need to be replaced with factory methods + Agent.query(function (data) { $scope.agentList = data; }); - $scope.trainUsingRaw = function() { - //Working text: {"config":"language: en\npipeline: supervised_embeddings", "nlu": "## intent:greet \n- hey \n- hello \n ## intent:goodbye \n- cu \n- goodbye", "out": "models", "force": false } - //Need to figure out how to query and load/unload models after training them + $scope.trainUsingRawData = function () { + let agentToTrain = objectFindByKey($scope.agentList, 'agent_id', $scope.agent.agent_id); $rootScope.trainings_under_this_process = 1; - $http.post(appConfig.api_endpoint_v2 + "/model/train", JSON.parse($scope.raw_data)).then( - function(response){ - $scope.message = "Training for " + "test" + " completed successfully"; - $rootScope.trainings_under_this_process = 0; - }, - function(err) { - $scope.generateError = JSON.stringify(err.data.errorBody); - $rootScope.trainings_under_this_process = 0; - } - ); - + $http.post(appConfig.api_endpoint_v2 + "/rasa/model/train?agent_name=" + agentToTrain.agent_name + "&agent_id=" + agentToTrain.agent_id + "&comment=" + $scope.comment, JSON.parse($scope.raw_data)).then( + function (response) { + $scope.message = "Training for " + agentToTrain.agent_name + " completed successfully, open models to view and load the agents models"; + $rootScope.trainings_under_this_process = 0; + }, + function (err) { + $scope.message = "Training for " + agentToTrain.agent_name + " failed"; + $scope.generateError = JSON.stringify(err); + $rootScope.trainings_under_this_process = 0; + } + ); } - - - - - - - - - $scope.train = function() { - - let id = new XDate().toString('yyyyMMdd-HHmmss'); - reset(); - let modelName=agentToTrain.agent_name + "_" + id; - //Add pipeline and language - let dataToPost = { language:agentToTrain.rasa_nlu_language, pipeline:agentToTrain.rasa_nlu_pipeline, data:exportData }; - - // Use Fixed model name if available - if(agentToTrain.rasa_nlu_fixed_model_name!=null && agentToTrain.rasa_nlu_fixed_model_name !== ''){ - modelName = agentToTrain.rasa_nlu_fixed_model_name; - } - - $http.post(appConfig.api_endpoint_v2 + "/rasa/train?name=" + modelName+ "&project=" + agentToTrain.agent_name, JSON.stringify(dataToPost)).then( - function(response){ - $scope.message = "Training for " + agentToTrain.agent_name + " completed successfully"; - $rootScope.trainings_under_this_process = 0; - }, - function(errorResponse) { - $scope.generateError = JSON.stringify(errorResponse.data.errorBody); - $rootScope.trainings_under_this_process = 0; - } - ); - }; - - $scope.savetofile = function() { - let data = new Blob([JSON.stringify($scope.exportdata, null, 2)], { + $scope.saveRawDataToFile = function () { + let data = new Blob([JSON.stringify($scope.raw_data, null, 2)], { type: 'text/plain' }); let a = document.getElementById('a'); - a.download = 'trainingdata.json'; + a.download = 'raw_data.json'; a.href = URL.createObjectURL(data); a.click(); }; - $scope.savecoretofiles = function() { - let data = new Blob([$scope.domain_yml], { type: 'text/plain' }); - let core_domain = document.getElementById('core_domain'); - core_domain.download = '_domain.yml'; - core_domain.href = URL.createObjectURL(data); - core_domain.click(); - - let stories_data = new Blob([$scope.stories_md], { type: 'text/plain' }); - let core_stories = document.getElementById('core_stories'); - core_stories.download = '_stories.md'; - core_stories.href = URL.createObjectURL(stories_data); - core_stories.click(); - - var core_credentials_data = new Blob([$scope.credentials_yml], {type: 'text/plain'}); - var core_credentials = document.getElementById("core_credentials"); - core_credentials.download = "credentials.yml"; - core_credentials.href = URL.createObjectURL(core_credentials_data); - core_credentials.click(); - - var endpoints_data = new Blob([$scope.endpoints_yml], {type: 'text/plain'}); - var endpoints = document.getElementById("endpoints_yml"); - endpoints.download = "endpoints.yml"; - endpoints.href = URL.createObjectURL(endpoints_data); - endpoints.click(); - }; - $scope.convertToLowerCase = function() { - $scope.exportdata = JSON.parse( - JSON.stringify($scope.exportdata).toLowerCase() - ); - }; - - function reset() { - $scope.toLowercase = false; - $scope.generateError = ''; - $scope.message = ''; - } - - $scope.getData = function(agent_id) { - $scope.selectedAgent = window.objectFindByKey( - $scope.agentList, - 'agent_id', - agent_id - ); + $scope.getData = function (agent_id) { + $scope.selectedAgent = window.objectFindByKey($scope.agentList, 'agent_id', agent_id); reset(); - Agent.query( - { agent_id: agent_id, path: 'intents' }, - function(intents) { - //Fetch rasa core data only if its enabled - if ($scope.selectedAgent.rasa_core_enabled === true) - populateCoreDomainYaml(agent_id, intents); - AgentRegex.query({ agent_id: agent_id }, function(regex) { - AgentSynonyms.query({ agent_id: agent_id }, function(synonyms) { - let intentIds = intents - .map(function(item) { - return item['intent_id']; - }) - .toString(); - if (intentIds.length > 0) { - IntentExpressions.query( - { intent_ids: intentIds }, - function(expressions) { - let expressionIds = expressions - .map(function(item) { - return item['expression_id']; - }) - .toString(); - if (expressionIds.length > 0) { - ExpressionParameters.query( - { expression_ids: expressionIds }, - function(params) { - let synonymsIds = synonyms.map(function(item) { - return item['synonym_id']; - }); - if (synonymsIds.length > 0) { - SynonymsVariants.query( - { synonyms_id: synonymsIds }, - function(variants) { - generateData( - regex, - intents, - expressions, - params, - synonyms, - variants - ); - }, - function(error) { - $scope.generateError = error; - $scope.exportdata = undefined; - } - ); - } else { - generateData(regex, intents, expressions, params); - } + Agent.query({ agent_id: agent_id, path: 'intents' }, function (intents) { + //Fetch rasa core data only if its enabled + //if ($scope.selectedAgent.rasa_core_enabled === true) + // populateCoreDomainYaml(agent_id, intents); + AgentRegex.query({ agent_id: agent_id }, function (regex) { + AgentSynonyms.query({ agent_id: agent_id }, function (synonyms) { + let intentIds = intents + .map(function (item) { + return item['intent_id']; + }) + .toString(); + if (intentIds.length > 0) { + IntentExpressions.query({ intent_ids: intentIds }, function (expressions) { + let expressionIds = expressions + .map(function (item) { + return item['expression_id']; + }).toString(); + if (expressionIds.length > 0) { + ExpressionParameters.query({ expression_ids: expressionIds }, function (params) { + let synonymsIds = synonyms.map(function (item) { + return item['synonym_id']; + }); + if (synonymsIds.length > 0) { + SynonymsVariants.query({ synonyms_id: synonymsIds }, + function (variants) { + generateData(regex, intents, expressions, params, synonyms, variants); }, - function(error) { + function (error) { $scope.generateError = error; $scope.exportdata = undefined; } ); } else { - generateData(regex, intents, expressions); + generateData(regex, intents, expressions, params); } }, - function(error) { - $scope.generateError = error; - $scope.exportdata = undefined; - } - ); - } else { - $scope.generateError = - 'At least one intent is required to train a model'; - $scope.exportdata = undefined; - } - }); + function (error) { + $scope.generateError = error; + $scope.exportdata = undefined; + } + ); + } else { + generateData(regex, intents, expressions); + } + }, + function (error) { + $scope.generateError = error; + $scope.exportdata = undefined; + } + ); + } else { + $scope.generateError = 'At least one intent is required to train a model'; + $scope.exportdata = undefined; + } }); - }, - function(error) { + }); + }, + function (error) { $scope.generateError = error; $scope.exportdata = undefined; } ); }; - function populateCoreDomainYaml(agent_id, intents) { - //get entities by agentid - let domain_yml_obj = {}; - var endpoints_yml_obj={}; - var credentials_yml_obj={rest:""}; - var endpoints_yml_obj={}; - var credentials_yml_obj={rest:""}; - $scope.stories_md = ''; - Agent.get({ agent_id: agent_id }, function(data) { - $scope.stories_md = data.story_details; - if(data.endpoint_enabled){ - endpoints_yml_obj.action_endpoint={"url":data.endpoint_url}; - } - $scope.credentials_yml=yaml.stringify(credentials_yml_obj); - $http({method: 'GET', url: appConfig.api_endpoint_v2 + '/rasa/url'}).then( - function(response){ - endpoints_yml_obj.nlu=response.data; - $scope.endpoints_yml=yaml.stringify(endpoints_yml_obj); - }, - function(errorResponse){ - console.log("Error Message while Getting Messages." + errorResponse); - }); - }); - - AgentEntities.query({ agent_id: agent_id }, function(allEntities) { - let requiredSlots = allEntities.filter( - entity => - entity.slot_data_type !== 'NOT_USED' && entity.slot_data_type !== '' - ); - if (requiredSlots.length > 0) { - //build slots - let slots_yml_str = requiredSlots - .map(function(slot) { - return ( - '"' + - slot["entity_name"] + - '":{"type":"' + - slot["slot_data_type"] + - '"}' - ); - }) - .join(','); - domain_yml_obj.slots = JSON.parse('{' + slots_yml_str + '}'); - } - - if (intents.length > 0) { - //build intents - domain_yml_obj.intents = intents.map(function(intent) { - return intent['intent_name']; - }); - } - - if (allEntities.length > 0) { - //build entities - domain_yml_obj.entities = allEntities.map(function(entity) { - return entity['entity_name']; - }); - } - domain_yml_obj.action_factory = 'remote'; - - AgentActions.query({ agent_id: agent_id }, function(actionsList) { - if (actionsList != null && actionsList.length > 0) { - //build actions - domain_yml_obj.actions = actionsList.map(function(action) { - return action['action_name']; - }); - - let action_ids = actionsList - .map(function(action) { - return action['action_id']; - }) - .toString(); - - $http({ - method: 'GET', - url: - appConfig.api_endpoint_v2 + - '/action_responses?action_ids=' + - action_ids}).then( - function(data) { - if (data.data.length > 0) { - let responsesArrObj = {}; - data.data.map(function(response) { - let response_templete = {}; - if (!responsesArrObj.hasOwnProperty(response.action_name)) { - responsesArrObj[response.action_name] = []; - } - //add response text if there is one - if ( - response.response_text != null && - response.response_text !== '' - ) { - response_templete.text = response.response_text; - } - //add buttons if there are any - if ( - response.buttons_info != null && - response.buttons_info !== '' - ) { - response_templete.buttons = response.buttons_info.map( - function(button) { - let buttonObj = {}; - buttonObj.title = button.title; - buttonObj.payload = button.payload; - return buttonObj; - } - ); - } - //add image if it is available. - if ( - response.response_image_url != null && - response.response_image_url !== '' - ) { - response_templete.image = response.response_image_url; - } - responsesArrObj[response.action_name].push(response_templete); - }); - domain_yml_obj.templates = responsesArrObj; - } - //build templetes - try { - if (!angular.equals(domain_yml_obj, {})) - $scope.domain_yml = yaml.stringify(domain_yml_obj); - } catch (e) {} - }, - function() {} - ); - } - }); - }); - } function generateData(regex, intents, expressions, params, synonyms, variants) { let tmpData = {}; @@ -347,10 +121,10 @@ function TrainingController($scope, $rootScope, $interval, $http, Rasa_Status, A tmpData.rasa_nlu_data.entity_synonyms = []; for (let synonym_i = 0; synonym_i < synonyms.length; synonym_i++) { let variants_synonyme = variants - .filter(function(obj) { + .filter(function (obj) { return obj.synonym_id === synonyms[synonym_i].synonym_id; }) - .map(function(obj) { + .map(function (obj) { return obj.synonym_value; }); if (variants_synonyme.length !== 0) { @@ -368,7 +142,8 @@ function TrainingController($scope, $rootScope, $interval, $http, Rasa_Status, A for (let regex_i = 0; regex_i < regex.length; regex_i++) { tmpData.rasa_nlu_data.regex_features.push({ name: regex[regex_i].regex_name, - pattern: regex[regex_i].regex_pattern}); + pattern: regex[regex_i].regex_pattern + }); } for (let intent_i = 0; intent_i <= intents.length - 1; intent_i++) { @@ -376,11 +151,7 @@ function TrainingController($scope, $rootScope, $interval, $http, Rasa_Status, A expression => expression.intent_id === intents[intent_i].intent_id ); if (expressionList !== undefined) { - for ( - let expression_i = 0; - expression_i <= expressionList.length - 1; - expression_i++ - ) { + for (let expression_i = 0; expression_i <= expressionList.length - 1; expression_i++) { tmpIntent = {}; tmpExpression = {}; @@ -395,11 +166,7 @@ function TrainingController($scope, $rootScope, $interval, $http, Rasa_Status, A param.expression_id === expressionList[expression_i].expression_id ); if (parameterList !== undefined) { - for ( - let parameter_i = 0; - parameter_i <= parameterList.length - 1; - parameter_i++ - ) { + for (let parameter_i = 0; parameter_i <= parameterList.length - 1; parameter_i++) { tmpParam = {}; tmpParam.start = parameterList[parameter_i].parameter_start; tmpParam.end = parameterList[parameter_i].parameter_end; @@ -418,30 +185,20 @@ function TrainingController($scope, $rootScope, $interval, $http, Rasa_Status, A } } - for ( - let i = 0; - i <= tmpData.rasa_nlu_data.common_examples.length - 1; - i++ - ) { + for (let i = 0; i <= tmpData.rasa_nlu_data.common_examples.length - 1; i++) { let parameterList = params.filter( param => param.expression_id === tmpData.rasa_nlu_data.common_examples[i].expression_id ); - if ( - tmpData.rasa_nlu_data.common_examples[i].entities.length !== - parameterList.length + if (tmpData.rasa_nlu_data.common_examples[i].entities.length !== parameterList.length ) { let missingEntities = parameterList.filter( param => param.entity_id !== tmpData.rasa_nlu_data.common_examples[i].entities[0].entity_id ); - for ( - let parameter_i = 0; - parameter_i <= missingEntities.length - 1; - parameter_i++ - ) { + for (let parameter_i = 0; parameter_i <= missingEntities.length - 1; parameter_i++) { tmpParam = {}; let start = tmpData.rasa_nlu_data.common_examples[i].text.indexOf( missingEntities[parameter_i].parameter_value @@ -466,37 +223,162 @@ function TrainingController($scope, $rootScope, $interval, $http, Rasa_Status, A exportData = tmpData; $scope.exportdata = tmpData; - $scope.raw_data = JSON.stringify(dataToPost); $scope.generateError = ''; } - function getRasaStatus() { //? We already have this? - Rasa_Status.get(function(statusdata) { - try { - $rootScope.config.isonline = 1; - $rootScope.config.server_model_dirs_array = window.getAvailableModels( - statusdata - ); - if ($rootScope.config.server_model_dirs_array.length > 0) { - $rootScope.modelname = - $rootScope.config.server_model_dirs_array[0].name; - } else { - $rootScope.modelname = 'Default'; - } - if ( - statusdata !== undefined || - statusdata.available_models !== undefined - ) { - $rootScope.available_models = window.sortArrayByDate( - window.getAvailableModels(statusdata), - 'xdate' - ); - $rootScope.trainings_under_this_process = window.getNoOfTrainingJobs( - statusdata + + $scope.savecoretofiles = function () { + let data = new Blob([$scope.domain_yml], { type: 'text/plain' }); + let core_domain = document.getElementById('core_domain'); + core_domain.download = '_domain.yml'; + core_domain.href = URL.createObjectURL(data); + core_domain.click(); + + let stories_data = new Blob([$scope.stories_md], { type: 'text/plain' }); + let core_stories = document.getElementById('core_stories'); + core_stories.download = '_stories.md'; + core_stories.href = URL.createObjectURL(stories_data); + core_stories.click(); + + var core_credentials_data = new Blob([$scope.credentials_yml], { type: 'text/plain' }); + var core_credentials = document.getElementById("core_credentials"); + core_credentials.download = "credentials.yml"; + core_credentials.href = URL.createObjectURL(core_credentials_data); + core_credentials.click(); + + var endpoints_data = new Blob([$scope.endpoints_yml], { type: 'text/plain' }); + var endpoints = document.getElementById("endpoints_yml"); + endpoints.download = "endpoints.yml"; + endpoints.href = URL.createObjectURL(endpoints_data); + endpoints.click(); + }; + + $scope.convertToLowerCase = function () { + $scope.exportdata = JSON.parse( + JSON.stringify($scope.exportdata).toLowerCase() + ); + }; + + function reset() { + $scope.toLowercase = false; + $scope.generateError = ''; + $scope.message = ''; + } + + function populateCoreDomainYaml(agent_id, intents) { + //get entities by agentid + let domain_yml_obj = {}; + var endpoints_yml_obj = {}; + var credentials_yml_obj = { rest: "" }; + var endpoints_yml_obj = {}; + var credentials_yml_obj = { rest: "" }; + $scope.stories_md = ''; + Agent.get({ agent_id: agent_id }, function (data) { + $scope.stories_md = data.story_details; + if (data.endpoint_enabled) { + endpoints_yml_obj.action_endpoint = { "url": data.endpoint_url }; + } + $scope.credentials_yml = yaml.stringify(credentials_yml_obj); + $http({ method: 'GET', url: appConfig.api_endpoint_v2 + '/rasa/url' }).then( + function (response) { + endpoints_yml_obj.nlu = response.data; + $scope.endpoints_yml = yaml.stringify(endpoints_yml_obj); + }, + function (errorResponse) { + console.log("Error Message while Getting Messages." + errorResponse); + }); + }); + + AgentEntities.query({ agent_id: agent_id }, function (allEntities) { + let requiredSlots = allEntities.filter( + entity => entity.slot_data_type !== 'NOT_USED' && entity.slot_data_type !== '' + ); + if (requiredSlots.length > 0) { + //build slots + let slots_yml_str = requiredSlots + .map(function (slot) { + return ( + '"' + + slot["entity_name"] + + '":{"type":"' + + slot["slot_data_type"] + + '"}' + ); + }) + .join(','); + domain_yml_obj.slots = JSON.parse('{' + slots_yml_str + '}'); + } + + if (intents.length > 0) { + //build intents + domain_yml_obj.intents = intents.map(function (intent) { + return intent['intent_name']; + }); + } + + if (allEntities.length > 0) { + //build entities + domain_yml_obj.entities = allEntities.map(function (entity) { + return entity['entity_name']; + }); + } + domain_yml_obj.action_factory = 'remote'; + + AgentActions.query({ agent_id: agent_id }, function (actionsList) { + if (actionsList != null && actionsList.length > 0) { + //build actions + domain_yml_obj.actions = actionsList.map(function (action) { + return action['action_name']; + }); + + let action_ids = actionsList + .map(function (action) { + return action['action_id']; + }).toString(); + + $http({ method: 'GET', url: appConfig.api_endpoint_v2 + '/action_responses?action_ids=' + action_ids }).then( + function (data) { + if (data.data.length > 0) { + let responsesArrObj = {}; + data.data.map(function (response) { + let response_templete = {}; + if (!responsesArrObj.hasOwnProperty(response.action_name)) { + responsesArrObj[response.action_name] = []; + } + //add response text if there is one + if (response.response_text != null && response.response_text !== '') { + response_templete.text = response.response_text; + } + //add buttons if there are any + if (response.buttons_info != null && response.buttons_info !== '') { + response_templete.buttons = response.buttons_info.map( + function (button) { + let buttonObj = {}; + buttonObj.title = button.title; + buttonObj.payload = button.payload; + return buttonObj; + } + ); + } + //add image if it is available. + if (response.response_image_url != null && response.response_image_url !== '') { + response_templete.image = response.response_image_url; + } + responsesArrObj[response.action_name].push(response_templete); + }); + domain_yml_obj.templates = responsesArrObj; + } + //build templetes + try { + if (!angular.equals(domain_yml_obj, {})) + $scope.domain_yml = yaml.stringify(domain_yml_obj); + } catch (e) { } + }, + function () { } ); } - } catch (err) {} + }); }); } } diff --git a/web/src/app/directives.js b/web/src/app/directives.js index d5a7e5b..97ccad9 100755 --- a/web/src/app/directives.js +++ b/web/src/app/directives.js @@ -1,53 +1,53 @@ angular.module('app') -.directive('a', navigationDirective) -.directive('confirmClick', confirmClickDirective) -.directive('a', navigationDirective) -.directive('button', layoutToggleDirective) -.directive('button', collapseMenuTogglerDirective) -.directive('scrollBottom', function(){ + .directive('a', navigationDirective) + .directive('confirmClick', confirmClickDirective) + .directive('a', navigationDirective) + .directive('button', layoutToggleDirective) + .directive('button', collapseMenuTogglerDirective) + .directive('scrollBottom', function () { return { - link: function(scope, element){ - scope.$watch(function() { - element.scrollTop(element[0].scrollHeight); - }); - } + link: function (scope, element) { + scope.$watch(function () { + element.scrollTop(element[0].scrollHeight); + }); + } } -}) -.directive('tooltip', function(){ + }) + .directive('tooltip', function () { return { - restrict: 'A', - link: function(scope, element){ - element.hover( - function(){ - element.tooltip('show'); - }, - function(){ - element.tooltip('hide'); - } - ); - element.click( - function(){ - element.tooltip('hide'); - } - ); - } + restrict: 'A', + link: function (scope, element) { + element.hover( + function () { + element.tooltip('show'); + }, + function () { + element.tooltip('hide'); + } + ); + element.click( + function () { + element.tooltip('hide'); + } + ); + } }; -}).filter('trusted', - function($sce) { - return function(ss) { - return $sce.trustAsHtml(ss) - }; - } -); + }).filter('trusted', + function ($sce) { + return function (ss) { + return $sce.trustAsHtml(ss) + }; + } + ); function confirmClickDirective() { let i = 0; return { restrict: 'A', - priority: 1, + priority: 1, compile: function (tElem, tAttrs) { const fn = '$$confirmClick' + i++, - _ngClick = tAttrs.ngClick; + _ngClick = tAttrs.ngClick; tAttrs.ngClick = fn + '($event)'; return function (scope, elem, attrs) { @@ -59,12 +59,12 @@ function confirmClickDirective() { $('#modal_body').text(confirmMsg); $('#modal_title').text(confirmTitle); $('#modal_confirm').one('click', '#modal_save_btn', function (e) { - scope.$eval(_ngClick, {$event: event}); - try { - $('#modal_confirm').modal('hide'); - } catch (err) { - // Bug in bootstrap 4 with hiding = transition error - } + scope.$eval(_ngClick, { $event: event }); + try { + $('#modal_confirm').modal('hide'); + } catch (err) { + // Bug in bootstrap 4 with hiding = transition error + } }); }; }; @@ -74,19 +74,19 @@ function confirmClickDirective() { function navigationDirective() { return { - restrict: 'E', - link + restrict: 'E', + link }; function link(scope, element, attrs) { - if(element.hasClass('nav-dropdown-toggle') && angular.element('body').width() > 782) { - element.on('click', function(){ - if(!angular.element('body').hasClass('compact-nav')) { + if (element.hasClass('nav-dropdown-toggle') && angular.element('body').width() > 782) { + element.on('click', function () { + if (!angular.element('body').hasClass('compact-nav')) { element.parent().toggleClass('open').find('.open').removeClass('open'); } }); } else if (element.hasClass('nav-dropdown-toggle') && angular.element('body').width() < 783) { - element.on('click', function(){ + element.on('click', function () { element.parent().toggleClass('open').find('.open').removeClass('open'); }); } @@ -97,15 +97,15 @@ function navigationDirective() { sidebarNavDynamicResizeDirective.$inject = ['$window', '$timeout']; function sidebarNavDynamicResizeDirective($window, $timeout) { return { - restrict: 'E', - link + restrict: 'E', + link }; function link(scope, element, attrs) { if (element.hasClass('sidebar-nav') && angular.element('body').hasClass('fixed-nav')) { const bodyHeight = angular.element(window).height(); - scope.$watch(function(){ + scope.$watch(function () { const headerHeight = angular.element('header').outerHeight(); if (angular.element('body').hasClass('sidebar-off-canvas')) { @@ -115,7 +115,7 @@ function sidebarNavDynamicResizeDirective($window, $timeout) { } }); - angular.element($window).bind('resize', function(){ + angular.element($window).bind('resize', function () { const bodyHeight = angular.element(window).height(); const headerHeight = angular.element('header').outerHeight(); const sidebarHeaderHeight = angular.element('.sidebar-header').outerHeight(); @@ -135,12 +135,12 @@ function sidebarNavDynamicResizeDirective($window, $timeout) { layoutToggleDirective.$inject = ['$interval']; function layoutToggleDirective($interval) { return { - restrict: 'E', - link + restrict: 'E', + link }; function link(scope, element, attrs) { - element.on('click', function(){ + element.on('click', function () { if (element.hasClass('sidebar-toggler')) { angular.element('body').toggleClass('sidebar-hidden'); @@ -156,12 +156,12 @@ function layoutToggleDirective($interval) { //Collapse menu toggler function collapseMenuTogglerDirective() { return { - restrict: 'E', - link + restrict: 'E', + link }; function link(scope, element, attrs) { - element.on('click', function(){ + element.on('click', function () { if (element.hasClass('navbar-toggler') && !element.hasClass('layout-toggler')) { angular.element('body').toggleClass('sidebar-mobile-show') } diff --git a/web/src/app/router.js b/web/src/app/router.js index 06a3d87..c515a9f 100755 --- a/web/src/app/router.js +++ b/web/src/app/router.js @@ -138,5 +138,10 @@ angular templateUrl: '/app/components/settings/settings.html', activePage: 'settings' }) + .when('/models', { + controller: 'ModelController', + templateUrl: '/app/components/models/models.html', + activePage: 'models' + }) .otherwise({ redirectTo: '/' }); }); diff --git a/web/src/app/services/api.js b/web/src/app/services/api.js index 38e5c75..d00be60 100755 --- a/web/src/app/services/api.js +++ b/web/src/app/services/api.js @@ -230,3 +230,10 @@ app.factory('Response', function ($resource, appConfig) { app.factory('IntentResponse', function ($resource, appConfig) { return $resource(appConfig.api_endpoint_v2 + '/rndmresponse'); }); + +app.factory('Model', function ($resource, appConfig) { + return $resource( + appConfig.api_endpoint_v2 + '/models/:agent_id', + { agent_id: '@id', path: '@path' } + ); +}); diff --git a/web/src/app/services/rasa_api.js b/web/src/app/services/rasa_api.js index 62206ea..c8d82b1 100644 --- a/web/src/app/services/rasa_api.js +++ b/web/src/app/services/rasa_api.js @@ -17,10 +17,4 @@ app.factory('Rasa_Config', function($resource, appConfig) { app.factory('Rasa_Version', function($resource, appConfig) { return $resource(appConfig.api_endpoint_v2 + '/rasa/version'); -}); - -/* TODO: future feature -app.factory('Set_Rasa_Config', function($resource) { - return $resource(rasa_api_endpoint + '/setconfig?:key=:value', {key: '@id', value: '@id'}); -}); -*/ +}); \ No newline at end of file diff --git a/web/src/app/shared/aside/aside.html b/web/src/app/shared/aside/aside.html index 4b0bb15..f4db720 100755 --- a/web/src/app/shared/aside/aside.html +++ b/web/src/app/shared/aside/aside.html @@ -3,23 +3,21 @@
-
-
- Input -
-
+
+
+ Input +
+
-
- + - +
+
+ Output + +
+
+
+
{{resp}}
-
- Output - -
-
-
{{resp}}
-
-
- JSON Data - -
-
- -
-
+
+
+ JSON Data + +
+
+ +
+
- + \ No newline at end of file diff --git a/web/src/app/shared/aside/aside.js b/web/src/app/shared/aside/aside.js index f440b6f..f4f6cc0 100755 --- a/web/src/app/shared/aside/aside.js +++ b/web/src/app/shared/aside/aside.js @@ -1,61 +1,54 @@ angular.module('app').controller('AsideController', AsideController); -function AsideController($scope, $rootScope, $interval, $http, Rasa_Version, Settings, Rasa_Status, appConfig) { +function AsideController($scope, $rootScope, $interval, $http, Rasa_Version, Settings, Rasa_Status, appConfig, Rasa_Parse) { $scope.test_text = 'I want italian food in new york'; $scope.test_text_response = {}; $rootScope.config = {}; //Initilize in case server is not online at startup let configcheck; - Rasa_Version.get().$promise.then(function(data) { + Rasa_Version.get(function (data) { $rootScope.rasa_version = data.version; }); - + executeRefreshSettings(); function executeRefreshSettings() { - Settings.query().$promise.then(function(data) { + Settings.query(function (data) { $rootScope.settings = data; for (let key in data) { $rootScope.settings[data[key]['setting_name']] = data[key]['setting_value']; } - if ($rootScope.settings['refresh_time'] !== '-1' && $rootScope.settings['refresh_time'] !== undefined ) { - configcheck = $interval(getRasaConfig, Number($rootScope.settings['refresh_time'])); + if ($rootScope.settings['refresh_time'] !== '-1' && $rootScope.settings['refresh_time'] !== undefined) { + configcheck = $interval(getRasaStatus, Number($rootScope.settings['refresh_time'])); } - getRasaConfig(); + getRasaStatus(); }); } - $scope.$on('executeTestRequest', function(event, expression_text) { + $scope.$on('executeTestRequest', function (event, expression_text) { $scope.test_text = expression_text; $scope.executeTestRequest(); }); - $scope.$on('refreshIntervelUpdate', function(event, expression_text) { + $scope.$on('refreshIntervelUpdate', function (event, expression_text) { $interval.cancel(configcheck); executeRefreshSettings(); }); - $scope.$on('$destroy', function() { + $scope.$on('$destroy', function () { $interval.cancel(configcheck); }); - function getRasaConfig() { - Rasa_Status.get(function(statusdata) { - $rootScope.config.isonline = 1; - /* load models available to query - $rootScope.config.server_model_dirs_array = window.getAvailableModels( - statusdata - ); - if ($rootScope.config.server_model_dirs_array.length > 0) { - $rootScope.modelname = - $rootScope.config.server_model_dirs_array[0].name; - } - */ - }, function(error) { - // error handler - $rootScope.config.isonline = 0; - }); + function getRasaStatus() { + Rasa_Status.get(function (statusdata) { + $rootScope.config = JSON.parse(angular.toJson(statusdata));; + $rootScope.config.isonline = 1; + }, function (error) { + $rootScope.config.isonline = 0; + }); } + + /* TODO: Currently do not have support for conversations in v3, coming soon. $scope.restartConversation = function() { $scope.test_text_response = {}; $http.post(appConfig.api_endpoint_v2 + '/rasa/restart'); @@ -64,6 +57,7 @@ function AsideController($scope, $rootScope, $interval, $http, Rasa_Version, Set $scope.test_text = ''; $rootScope.$broadcast('setAlertText', 'Conversation restarted!!'); }; + */ function addOverlay() { $('.aside-menu').addClass('dimmed'); @@ -73,41 +67,33 @@ function AsideController($scope, $rootScope, $interval, $http, Rasa_Version, Set $('.aside-menu').removeClass('dimmed'); } - $scope.executeTestRequest = function() { + $scope.executeTestRequest = function () { $scope.response_text = []; $scope.test_text_response = {}; let reqMessage = {}; - + reqMessage = { text: $scope.test_text }; - - //We should use the factory method for this? + + //TODO: We should use a factory method for this if ($scope.test_text) { //make a httpcall addOverlay(); - $http - .post( - appConfig.api_endpoint_v2 + '/rasa/model/parse', - JSON.stringify(reqMessage) - ) - .then( - function(response) { - // success callback - removeOverlay(); - $scope.test_text_response = response.data; - if (!$scope.wsEnabled) { - if ($scope.test_text_response > 0) { - $scope.test_text_response.forEach(function(response) { - $scope.response_text.push(response.response_text); - }); - } - } - //$scope.test_text=''; - }, - function(errorResponse) { - // failure callback - removeOverlay(); + $http.post(appConfig.api_endpoint_v2 + '/rasa/model/parse', JSON.stringify(reqMessage)).then(function (response) { + // success callback + removeOverlay(); + $scope.test_text_response = response.data; + if (!$scope.wsEnabled) { + if ($scope.test_text_response > 0) { + $scope.test_text_response.forEach(function (response) { + $scope.response_text.push(response.response_text); + }); } - ); + } + }, + function (errorResponse) { + removeOverlay(); + } + ); } }; } diff --git a/web/src/app/shared/navbar/navbar.html b/web/src/app/shared/navbar/navbar.html index 4f9ee21..20fb459 100755 --- a/web/src/app/shared/navbar/navbar.html +++ b/web/src/app/shared/navbar/navbar.html @@ -8,10 +8,10 @@ - + \ No newline at end of file diff --git a/web/src/app/shared/navbar/navbar.js b/web/src/app/shared/navbar/navbar.js index 2a6d6f7..69d2b6c 100755 --- a/web/src/app/shared/navbar/navbar.js +++ b/web/src/app/shared/navbar/navbar.js @@ -1,7 +1,7 @@ angular.module("app").controller("NavBarController", NavBarController); function NavBarController($scope, $rootScope, appConfig, $route) { - $scope.toggleAside = function() { + $scope.toggleAside = function () { if (angular.element("body").hasClass("aside-menu-hidden")) { angular .element("body") @@ -15,7 +15,7 @@ function NavBarController($scope, $rootScope, appConfig, $route) { } }; - $scope.toggleSidebar = function() { + $scope.toggleSidebar = function () { if (angular.element("body").hasClass("sidebar-fixed")) { angular .element("body") @@ -29,7 +29,7 @@ function NavBarController($scope, $rootScope, appConfig, $route) { } }; - $scope.logout = function() { + $scope.logout = function () { $rootScope.$broadcast("INVALID_JWT_TOKEN"); $route.reload(); }; diff --git a/web/src/app/shared/sidebar/sidebar.html b/web/src/app/shared/sidebar/sidebar.html index 94fe409..6d8e297 100755 --- a/web/src/app/shared/sidebar/sidebar.html +++ b/web/src/app/shared/sidebar/sidebar.html @@ -7,30 +7,33 @@ - + + +
  • - + diff --git a/web/src/app/shared/sidebar/sidebar.js b/web/src/app/shared/sidebar/sidebar.js index 693c4a3..59317ee 100755 --- a/web/src/app/shared/sidebar/sidebar.js +++ b/web/src/app/shared/sidebar/sidebar.js @@ -1,9 +1,9 @@ angular -.module('app') -.controller('SideBarController', SideBarController); + .module('app') + .controller('SideBarController', SideBarController); function SideBarController($rootScope, $scope) { - $scope.logout = function() { + $scope.logout = function () { $rootScope.$broadcast("INVALID_JWT_TOKEN"); }; } diff --git a/web/src/app/utils.js b/web/src/app/utils.js index b72e16c..164da84 100755 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -1,5 +1,5 @@ function sortArrayByDate(arr, dt_property) { - arr.sort(function(a, b) { + arr.sort(function (a, b) { a = new Date(a[dt_property]); b = new Date(b[dt_property]); return a > b ? -1 : a < b ? 1 : 0; @@ -83,16 +83,16 @@ function getAvailableModels(statusData) { */ } -function timeConverter(UNIX_timestamp){ +function timeConverter(UNIX_timestamp) { var a = new Date(UNIX_timestamp * 1000); - var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; + var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; var year = a.getFullYear(); var month = months[a.getMonth()]; var date = a.getDate(); var hour = a.getHours(); var min = a.getMinutes(); var sec = a.getSeconds(); - var time = date + ' ' + month + ' ' + year + ' ' + hour + ':' + min + ':' + sec ; + var time = date + ' ' + month + ' ' + year + ' ' + hour + ':' + min + ':' + sec; return time; } diff --git a/web/src/assets/css/style.css b/web/src/assets/css/style.css index f731f9e..0413298 100755 --- a/web/src/assets/css/style.css +++ b/web/src/assets/css/style.css @@ -24,6 +24,16 @@ canvas.chart { width: 350px; } +.datainput { + width: 100%; + height: 250px; + color: #3e515b; +} + +textarea { + border: 1px solid #c2cfd6; +} + .dimmed { position: relative; } diff --git a/web/src/assets/img/add.svg b/web/src/assets/img/add.svg deleted file mode 100755 index 4ee5de0..0000000 --- a/web/src/assets/img/add.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - + - - - diff --git a/web/src/assets/img/check.svg b/web/src/assets/img/check.svg deleted file mode 100755 index 1964cd8..0000000 --- a/web/src/assets/img/check.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/web/src/assets/img/delete.svg b/web/src/assets/img/delete.svg deleted file mode 100755 index 0f8d8c9..0000000 --- a/web/src/assets/img/delete.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/web/src/assets/img/edit.svg b/web/src/assets/img/edit.svg deleted file mode 100755 index e7c3899..0000000 --- a/web/src/assets/img/edit.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/web/src/assets/img/info.svg b/web/src/assets/img/info.svg deleted file mode 100755 index 49afa55..0000000 --- a/web/src/assets/img/info.svg +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/src/assets/img/plus.svg b/web/src/assets/img/plus.svg deleted file mode 100755 index 01f2a19..0000000 --- a/web/src/assets/img/plus.svg +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/web/src/assets/img/test_page_logo.png b/web/src/assets/img/test_page_logo.png deleted file mode 100755 index dd0d0f849d98419cfb82ea7bcb2e3ee590719e9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31573 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 Y0k5HzL)G|4g8%>k07*qoM6N<$g3(c(;s5{u diff --git a/web/src/assets/libs/mermaid_7.1.0.min.js b/web/src/assets/libs/mermaid_7.1.0.min.js deleted file mode 100755 index 89f0fc9..0000000 --- a/web/src/assets/libs/mermaid_7.1.0.min.js +++ /dev/null @@ -1,6 +0,0 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.mermaid=e():t.mermaid=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var a=n[r]={i:r,l:!1,exports:{}};return t[r].call(a.exports,a,a.exports,e),a.l=!0,a.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=200)}([function(t,e,n){(function(t){!function(e,n){t.exports=n()}(0,function(){"use strict";function e(){return Mr.apply(null,arguments)}function r(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function a(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function i(t){var e;for(e in t)return!1;return!0}function o(t){return void 0===t}function s(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function u(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function l(t,e){var n,r=[];for(n=0;n0)for(n=0;n0?"future":"past"];return D(n)?n(e):n.replace(/%s/i,e)}function H(t,e){var n=t.toLowerCase();Cr[n]=Cr[n+"s"]=Cr[e]=t}function P(t){return"string"==typeof t?Cr[t]||Cr[t.toLowerCase()]:void 0}function N(t){var e,n,r={};for(n in t)c(t,n)&&(e=P(n))&&(r[e]=t[n]);return r}function B(t,e){Fr[t]=e}function I(t){var e=[];for(var n in t)e.push({unit:n,priority:Fr[n]});return e.sort(function(t,e){return t.priority-e.priority}),e}function R(t,n){return function(r){return null!=r?(W(this,t,r),e.updateOffset(this,n),this):z(this,t)}}function z(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function W(t,e,n){t.isValid()&&t._d["set"+(t._isUTC?"UTC":"")+e](n)}function q(t){return t=P(t),D(this[t])?this[t]():this}function U(t,e){if("object"==typeof t){t=N(t);for(var n=I(t),r=0;r=0?n?"+":"":"-")+Math.pow(10,Math.max(0,a)).toString().substr(1)+r}function $(t,e,n,r){var a=r;"string"==typeof r&&(a=function(){return this[r]()}),t&&(Nr[t]=a),e&&(Nr[e[0]]=function(){return V(a.apply(this,arguments),e[1],e[2])}),n&&(Nr[n]=function(){return this.localeData().ordinal(a.apply(this,arguments),t)})}function G(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function J(t){var e,n,r=t.match(Or);for(e=0,n=r.length;e=0&&Hr.test(t);)t=t.replace(Hr,n),Hr.lastIndex=0,r-=1;return t}function X(t,e,n){na[t]=D(e)?e:function(t,r){return t&&n?n:e}}function Q(t,e){return c(na,t)?na[t](e._strict,e._locale):new RegExp(tt(t))}function tt(t){return et(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,n,r,a){return e||n||r||a}))}function et(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function nt(t,e){var n,r=e;for("string"==typeof t&&(t=[t]),s(e)&&(r=function(t,n){n[e]=b(t)}),n=0;n=0&&isFinite(s.getFullYear())&&s.setFullYear(t),s}function Mt(t){var e=new Date(Date.UTC.apply(null,arguments));return t<100&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function bt(t,e,n){var r=7+e-n;return-(7+Mt(t,0,r).getUTCDay()-e)%7+r-1}function kt(t,e,n,r,a){var i,o,s=(7+n-r)%7,u=bt(t,r,a),l=1+7*(e-1)+s+u;return l<=0?(i=t-1,o=mt(i)+l):l>mt(t)?(i=t+1,o=l-mt(t)):(i=t,o=l),{year:i,dayOfYear:o}}function Lt(t,e,n){var r,a,i=bt(t.year(),e,n),o=Math.floor((t.dayOfYear()-i-1)/7)+1;return o<1?(a=t.year()-1,r=o+wt(a,e,n)):o>wt(t.year(),e,n)?(r=o-wt(t.year(),e,n),a=t.year()+1):(a=t.year(),r=o),{week:r,year:a}}function wt(t,e,n){var r=bt(t,e,n),a=bt(t+1,e,n);return(mt(t)-r+a)/7}function xt(t){return Lt(t,this._week.dow,this._week.doy).week}function Dt(){return this._week.dow}function Yt(){return this._week.doy}function Tt(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function At(t){var e=Lt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function St(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(t),"number"==typeof t?t:null):parseInt(t,10)}function Et(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}function jt(t,e){return t?r(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]:r(this._weekdays)?this._weekdays:this._weekdays.standalone}function Ct(t){return t?this._weekdaysShort[t.day()]:this._weekdaysShort}function Ft(t){return t?this._weekdaysMin[t.day()]:this._weekdaysMin}function Ot(t,e,n){var r,a,i,o=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)i=f([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(i,"").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(i,"").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(i,"").toLocaleLowerCase();return n?"dddd"===e?(a=ha.call(this._weekdaysParse,o),-1!==a?a:null):"ddd"===e?(a=ha.call(this._shortWeekdaysParse,o),-1!==a?a:null):(a=ha.call(this._minWeekdaysParse,o),-1!==a?a:null):"dddd"===e?-1!==(a=ha.call(this._weekdaysParse,o))?a:-1!==(a=ha.call(this._shortWeekdaysParse,o))?a:(a=ha.call(this._minWeekdaysParse,o),-1!==a?a:null):"ddd"===e?-1!==(a=ha.call(this._shortWeekdaysParse,o))?a:-1!==(a=ha.call(this._weekdaysParse,o))?a:(a=ha.call(this._minWeekdaysParse,o),-1!==a?a:null):-1!==(a=ha.call(this._minWeekdaysParse,o))?a:-1!==(a=ha.call(this._weekdaysParse,o))?a:(a=ha.call(this._shortWeekdaysParse,o),-1!==a?a:null)}function Ht(t,e,n){var r,a,i;if(this._weekdaysParseExact)return Ot.call(this,t,e,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(a=f([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(a,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(a,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(a,"").replace(".",".?")+"$","i")),this._weekdaysParse[r]||(i="^"+this.weekdays(a,"")+"|^"+this.weekdaysShort(a,"")+"|^"+this.weekdaysMin(a,""),this._weekdaysParse[r]=new RegExp(i.replace(".",""),"i")),n&&"dddd"===e&&this._fullWeekdaysParse[r].test(t))return r;if(n&&"ddd"===e&&this._shortWeekdaysParse[r].test(t))return r;if(n&&"dd"===e&&this._minWeekdaysParse[r].test(t))return r;if(!n&&this._weekdaysParse[r].test(t))return r}}function Pt(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=St(t,this.localeData()),this.add(t-e,"d")):e}function Nt(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function Bt(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=Et(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7}function It(t){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||Wt.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(c(this,"_weekdaysRegex")||(this._weekdaysRegex=wa),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)}function Rt(t){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||Wt.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(c(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=xa),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function zt(t){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||Wt.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(c(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Da),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Wt(){function t(t,e){return e.length-t.length}var e,n,r,a,i,o=[],s=[],u=[],l=[];for(e=0;e<7;e++)n=f([2e3,1]).day(e),r=this.weekdaysMin(n,""),a=this.weekdaysShort(n,""),i=this.weekdays(n,""),o.push(r),s.push(a),u.push(i),l.push(r),l.push(a),l.push(i);for(o.sort(t),s.sort(t),u.sort(t),l.sort(t),e=0;e<7;e++)s[e]=et(s[e]),u[e]=et(u[e]),l[e]=et(l[e]);this._weekdaysRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function qt(){return this.hours()%12||12}function Ut(){return this.hours()||24}function Vt(t,e){$(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function $t(t,e){return e._meridiemParse}function Gt(t){return"p"===(t+"").toLowerCase().charAt(0)}function Jt(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"}function Zt(t){return t?t.toLowerCase().replace("_","-"):t}function Kt(t){for(var e,n,r,a,i=0;i0;){if(r=Xt(a.slice(0,e).join("-")))return r;if(n&&n.length>=e&&k(a,n,!0)>=e-1)break;e--}i++}return null}function Xt(e){var r=null;if(!Ea[e]&&void 0!==t&&t&&t.exports)try{r=Ya._abbr,n(203)("./"+e),Qt(r)}catch(t){}return Ea[e]}function Qt(t,e){var n;return t&&(n=o(e)?ne(t):te(t,e))&&(Ya=n),Ya._abbr}function te(t,e){if(null!==e){var n=Sa;if(e.abbr=t,null!=Ea[t])x("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),n=Ea[t]._config;else if(null!=e.parentLocale){if(null==Ea[e.parentLocale])return ja[e.parentLocale]||(ja[e.parentLocale]=[]),ja[e.parentLocale].push({name:t,config:e}),null;n=Ea[e.parentLocale]._config}return Ea[t]=new A(T(n,e)),ja[t]&&ja[t].forEach(function(t){te(t.name,t.config)}),Qt(t),Ea[t]}return delete Ea[t],null}function ee(t,e){if(null!=e){var n,r=Sa;null!=Ea[t]&&(r=Ea[t]._config),e=T(r,e),n=new A(e),n.parentLocale=Ea[t],Ea[t]=n,Qt(t)}else null!=Ea[t]&&(null!=Ea[t].parentLocale?Ea[t]=Ea[t].parentLocale:null!=Ea[t]&&delete Ea[t]);return Ea[t]}function ne(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Ya;if(!r(t)){if(e=Xt(t))return e;t=[t]}return Kt(t)}function re(){return Tr(Ea)}function ae(t){var e,n=t._a;return n&&-2===_(t).overflow&&(e=n[ia]<0||n[ia]>11?ia:n[oa]<1||n[oa]>it(n[aa],n[ia])?oa:n[sa]<0||n[sa]>24||24===n[sa]&&(0!==n[ua]||0!==n[la]||0!==n[ca])?sa:n[ua]<0||n[ua]>59?ua:n[la]<0||n[la]>59?la:n[ca]<0||n[ca]>999?ca:-1,_(t)._overflowDayOfYear&&(eoa)&&(e=oa),_(t)._overflowWeeks&&-1===e&&(e=da),_(t)._overflowWeekday&&-1===e&&(e=fa),_(t).overflow=e),t}function ie(t){var e,n,r,a,i,o,s=t._i,u=Ca.exec(s)||Fa.exec(s);if(u){for(_(t).iso=!0,e=0,n=Ha.length;e10?"YYYY ":"YY "),i="HH:mm"+(n[4]?":ss":""),n[1]){var d=new Date(n[2]),f=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][d.getDay()];if(n[1].substr(0,3)!==f)return _(t).weekdayMismatch=!0,void(t._isValid=!1)}switch(n[5].length){case 2:0===u?s=" +0000":(u=c.indexOf(n[5][1].toUpperCase())-12,s=(u<0?" -":" +")+(""+u).replace(/^-?/,"0").match(/..$/)[0]+"00");break;case 4:s=l[n[5]];break;default:s=l[" GMT"]}n[5]=s,t._i=n.splice(1).join(""),o=" ZZ",t._f=r+a+i+o,fe(t),_(t).rfc2822=!0}else t._isValid=!1}function se(t){var n=Na.exec(t._i);if(null!==n)return void(t._d=new Date(+n[1]));ie(t),!1===t._isValid&&(delete t._isValid,oe(t),!1===t._isValid&&(delete t._isValid,e.createFromInputFallback(t)))}function ue(t,e,n){return null!=t?t:null!=e?e:n}function le(t){var n=new Date(e.now());return t._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()]}function ce(t){var e,n,r,a,i=[];if(!t._d){for(r=le(t),t._w&&null==t._a[oa]&&null==t._a[ia]&&de(t),null!=t._dayOfYear&&(a=ue(t._a[aa],r[aa]),(t._dayOfYear>mt(a)||0===t._dayOfYear)&&(_(t)._overflowDayOfYear=!0),n=Mt(a,0,t._dayOfYear),t._a[ia]=n.getUTCMonth(),t._a[oa]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=i[e]=r[e];for(;e<7;e++)t._a[e]=i[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[sa]&&0===t._a[ua]&&0===t._a[la]&&0===t._a[ca]&&(t._nextDay=!0,t._a[sa]=0),t._d=(t._useUTC?Mt:vt).apply(null,i),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[sa]=24)}}function de(t){var e,n,r,a,i,o,s,u;if(e=t._w,null!=e.GG||null!=e.W||null!=e.E)i=1,o=4,n=ue(e.GG,t._a[aa],Lt(Me(),1,4).year),r=ue(e.W,1),((a=ue(e.E,1))<1||a>7)&&(u=!0);else{i=t._locale._week.dow,o=t._locale._week.doy;var l=Lt(Me(),i,o);n=ue(e.gg,t._a[aa],l.year),r=ue(e.w,l.week),null!=e.d?((a=e.d)<0||a>6)&&(u=!0):null!=e.e?(a=e.e+i,(e.e<0||e.e>6)&&(u=!0)):a=i}r<1||r>wt(n,i,o)?_(t)._overflowWeeks=!0:null!=u?_(t)._overflowWeekday=!0:(s=kt(n,r,a,i,o),t._a[aa]=s.year,t._dayOfYear=s.dayOfYear)}function fe(t){if(t._f===e.ISO_8601)return void ie(t);if(t._f===e.RFC_2822)return void oe(t);t._a=[],_(t).empty=!0;var n,r,a,i,o,s=""+t._i,u=s.length,l=0;for(a=K(t._f,t._locale).match(Or)||[],n=0;n0&&_(t).unusedInput.push(o),s=s.slice(s.indexOf(r)+r.length),l+=r.length),Nr[i]?(r?_(t).empty=!1:_(t).unusedTokens.push(i),at(i,r,t)):t._strict&&!r&&_(t).unusedTokens.push(i);_(t).charsLeftOver=u-l,s.length>0&&_(t).unusedInput.push(s),t._a[sa]<=12&&!0===_(t).bigHour&&t._a[sa]>0&&(_(t).bigHour=void 0),_(t).parsedDateParts=t._a.slice(0),_(t).meridiem=t._meridiem,t._a[sa]=he(t._locale,t._a[sa],t._meridiem),ce(t),ae(t)}function he(t,e,n){var r;return null==n?e:null!=t.meridiemHour?t.meridiemHour(e,n):null!=t.isPM?(r=t.isPM(n),r&&e<12&&(e+=12),r||12!==e||(e=0),e):e}function _e(t){var e,n,r,a,i;if(0===t._f.length)return _(t).invalidFormat=!0,void(t._d=new Date(NaN));for(a=0;athis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Re(){if(!o(this._isDSTShifted))return this._isDSTShifted;var t={};if(y(t,this),t=ye(t),t._a){var e=t._isUTC?f(t._a):Me(t._a);this._isDSTShifted=this.isValid()&&k(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function ze(){return!!this.isValid()&&!this._isUTC}function We(){return!!this.isValid()&&this._isUTC}function qe(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ue(t,e){var n,r,a,i=t,o=null;return Te(t)?i={ms:t._milliseconds,d:t._days,M:t._months}:s(t)?(i={},e?i[e]=t:i.milliseconds=t):(o=Ua.exec(t))?(n="-"===o[1]?-1:1,i={y:0,d:b(o[oa])*n,h:b(o[sa])*n,m:b(o[ua])*n,s:b(o[la])*n,ms:b(Ae(1e3*o[ca]))*n}):(o=Va.exec(t))?(n="-"===o[1]?-1:1,i={y:Ve(o[2],n),M:Ve(o[3],n),w:Ve(o[4],n),d:Ve(o[5],n),h:Ve(o[6],n),m:Ve(o[7],n),s:Ve(o[8],n)}):null==i?i={}:"object"==typeof i&&("from"in i||"to"in i)&&(a=Ge(Me(i.from),Me(i.to)),i={},i.ms=a.milliseconds,i.M=a.months),r=new Ye(i),Te(t)&&c(t,"_locale")&&(r._locale=t._locale),r}function Ve(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)?0:n)*e}function $e(t,e){var n={milliseconds:0,months:0};return n.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(n.months,"M").isAfter(e)&&--n.months,n.milliseconds=+e-+t.clone().add(n.months,"M"),n}function Ge(t,e){var n;return t.isValid()&&e.isValid()?(e=je(e,t),t.isBefore(e)?n=$e(t,e):(n=$e(e,t),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function Je(t,e){return function(n,r){var a,i;return null===r||isNaN(+r)||(x(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),i=n,n=r,r=i),n="string"==typeof n?+n:n,a=Ue(n,r),Ze(this,a,t),this}}function Ze(t,n,r,a){var i=n._milliseconds,o=Ae(n._days),s=Ae(n._months);t.isValid()&&(a=null==a||a,i&&t._d.setTime(t._d.valueOf()+i*r),o&&W(t,"Date",z(t,"Date")+o*r),s&&ct(t,z(t,"Month")+s*r),a&&e.updateOffset(t,o||s))}function Ke(t,e){var n=t.diff(e,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"}function Xe(t,n){var r=t||Me(),a=je(r,this).startOf("day"),i=e.calendarFormat(this,a)||"sameElse",o=n&&(D(n[i])?n[i].call(this,r):n[i]);return this.format(o||this.localeData().calendar(i,this,Me(r)))}function Qe(){return new g(this)}function tn(t,e){var n=v(t)?t:Me(t);return!(!this.isValid()||!n.isValid())&&(e=P(o(e)?"millisecond":e),"millisecond"===e?this.valueOf()>n.valueOf():n.valueOf()9999?Z(t,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):D(Date.prototype.toISOString)?this.toDate().toISOString():Z(t,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function dn(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var n="["+t+'("]',r=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",a=e+'[")]';return this.format(n+r+"-MM-DD[T]HH:mm:ss.SSS"+a)}function fn(t){t||(t=this.isUtc()?e.defaultFormatUtc:e.defaultFormat);var n=Z(this,t);return this.localeData().postformat(n)}function hn(t,e){return this.isValid()&&(v(t)&&t.isValid()||Me(t).isValid())?Ue({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function _n(t){return this.from(Me(),t)}function pn(t,e){return this.isValid()&&(v(t)&&t.isValid()||Me(t).isValid())?Ue({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function mn(t){return this.to(Me(),t)}function yn(t){var e;return void 0===t?this._locale._abbr:(e=ne(t),null!=e&&(this._locale=e),this)}function gn(){return this._locale}function vn(t){switch(t=P(t)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===t&&this.weekday(0),"isoWeek"===t&&this.isoWeekday(1),"quarter"===t&&this.month(3*Math.floor(this.month()/3)),this}function Mn(t){return void 0===(t=P(t))||"millisecond"===t?this:("date"===t&&(t="day"),this.startOf(t).add(1,"isoWeek"===t?"week":t).subtract(1,"ms"))}function bn(){return this._d.valueOf()-6e4*(this._offset||0)}function kn(){return Math.floor(this.valueOf()/1e3)}function Ln(){return new Date(this.valueOf())}function wn(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]}function xn(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}}function Dn(){return this.isValid()?this.toISOString():null}function Yn(){return p(this)}function Tn(){return d({},_(this))}function An(){return _(this).overflow}function Sn(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function En(t,e){$(0,[t,t.length],0,e)}function jn(t){return Hn.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Cn(t){return Hn.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)}function Fn(){return wt(this.year(),1,4)}function On(){var t=this.localeData()._week;return wt(this.year(),t.dow,t.doy)}function Hn(t,e,n,r,a){var i;return null==t?Lt(this,r,a).year:(i=wt(t,r,a),e>i&&(e=i),Pn.call(this,t,e,n,r,a))}function Pn(t,e,n,r,a){var i=kt(t,e,n,r,a),o=Mt(i.year,0,i.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}function Nn(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}function Bn(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")}function In(t,e){e[ca]=b(1e3*("0."+t))}function Rn(){return this._isUTC?"UTC":""}function zn(){return this._isUTC?"Coordinated Universal Time":""}function Wn(t){return Me(1e3*t)}function qn(){return Me.apply(null,arguments).parseZone()}function Un(t){return t}function Vn(t,e,n,r){var a=ne(),i=f().set(r,e);return a[n](i,t)}function $n(t,e,n){if(s(t)&&(e=t,t=void 0),t=t||"",null!=e)return Vn(t,e,n,"month");var r,a=[];for(r=0;r<12;r++)a[r]=Vn(t,r,n,"month");return a}function Gn(t,e,n,r){"boolean"==typeof t?(s(e)&&(n=e,e=void 0),e=e||""):(e=t,n=e,t=!1,s(e)&&(n=e,e=void 0),e=e||"");var a=ne(),i=t?a._week.dow:0;if(null!=n)return Vn(e,(n+i)%7,r,"day");var o,u=[];for(o=0;o<7;o++)u[o]=Vn(e,(o+i)%7,r,"day");return u}function Jn(t,e){return $n(t,e,"months")}function Zn(t,e){return $n(t,e,"monthsShort")}function Kn(t,e,n){return Gn(t,e,n,"weekdays")}function Xn(t,e,n){return Gn(t,e,n,"weekdaysShort")}function Qn(t,e,n){return Gn(t,e,n,"weekdaysMin")}function tr(){var t=this._data;return this._milliseconds=ri(this._milliseconds),this._days=ri(this._days),this._months=ri(this._months),t.milliseconds=ri(t.milliseconds),t.seconds=ri(t.seconds),t.minutes=ri(t.minutes),t.hours=ri(t.hours),t.months=ri(t.months),t.years=ri(t.years),this}function er(t,e,n,r){var a=Ue(e,n);return t._milliseconds+=r*a._milliseconds,t._days+=r*a._days,t._months+=r*a._months,t._bubble()}function nr(t,e){return er(this,t,e,1)}function rr(t,e){return er(this,t,e,-1)}function ar(t){return t<0?Math.floor(t):Math.ceil(t)}function ir(){var t,e,n,r,a,i=this._milliseconds,o=this._days,s=this._months,u=this._data;return i>=0&&o>=0&&s>=0||i<=0&&o<=0&&s<=0||(i+=864e5*ar(sr(s)+o),o=0,s=0),u.milliseconds=i%1e3,t=M(i/1e3),u.seconds=t%60,e=M(t/60),u.minutes=e%60,n=M(e/60),u.hours=n%24,o+=M(n/24),a=M(or(o)),s+=a,o-=ar(sr(a)),r=M(s/12),s%=12,u.days=o,u.months=s,u.years=r,this}function or(t){return 4800*t/146097}function sr(t){return 146097*t/4800}function ur(t){if(!this.isValid())return NaN;var e,n,r=this._milliseconds;if("month"===(t=P(t))||"year"===t)return e=this._days+r/864e5,n=this._months+or(e),"month"===t?n:n/12;switch(e=this._days+Math.round(sr(this._months)),t){case"week":return e/7+r/6048e5;case"day":return e+r/864e5;case"hour":return 24*e+r/36e5;case"minute":return 1440*e+r/6e4;case"second":return 86400*e+r/1e3;case"millisecond":return Math.floor(864e5*e)+r;default:throw new Error("Unknown unit "+t)}}function lr(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*b(this._months/12):NaN}function cr(t){return function(){return this.as(t)}}function dr(t){return t=P(t),this.isValid()?this[t+"s"]():NaN}function fr(t){return function(){return this.isValid()?this._data[t]:NaN}}function hr(){return M(this.days()/7)}function _r(t,e,n,r,a){return a.relativeTime(e||1,!!n,t,r)}function pr(t,e,n){var r=Ue(t).abs(),a=vi(r.as("s")),i=vi(r.as("m")),o=vi(r.as("h")),s=vi(r.as("d")),u=vi(r.as("M")),l=vi(r.as("y")),c=a<=Mi.ss&&["s",a]||a0,c[4]=n,_r.apply(null,c)}function mr(t){return void 0===t?vi:"function"==typeof t&&(vi=t,!0)}function yr(t,e){return void 0!==Mi[t]&&(void 0===e?Mi[t]:(Mi[t]=e,"s"===t&&(Mi.ss=e-1),!0))}function gr(t){if(!this.isValid())return this.localeData().invalidDate();var e=this.localeData(),n=pr(this,!t,e);return t&&(n=e.pastFuture(+this,n)),e.postformat(n)}function vr(){if(!this.isValid())return this.localeData().invalidDate();var t,e,n,r=bi(this._milliseconds)/1e3,a=bi(this._days),i=bi(this._months);t=M(r/60),e=M(t/60),r%=60,t%=60,n=M(i/12),i%=12;var o=n,s=i,u=a,l=e,c=t,d=r,f=this.asSeconds();return f?(f<0?"-":"")+"P"+(o?o+"Y":"")+(s?s+"M":"")+(u?u+"D":"")+(l||c||d?"T":"")+(l?l+"H":"")+(c?c+"M":"")+(d?d+"S":""):"P0D"}var Mr,br;br=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),n=e.length>>>0,r=0;r68?1900:2e3)};var va=R("FullYear",!0);$("w",["ww",2],"wo","week"),$("W",["WW",2],"Wo","isoWeek"),H("week","w"),H("isoWeek","W"),B("week",5),B("isoWeek",5),X("w",qr),X("ww",qr,Ir),X("W",qr),X("WW",qr,Ir),rt(["w","ww","W","WW"],function(t,e,n,r){e[r.substr(0,1)]=b(t)});var Ma={dow:0,doy:6};$("d",0,"do","day"),$("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),$("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),$("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),$("e",0,0,"weekday"),$("E",0,0,"isoWeekday"),H("day","d"),H("weekday","e"),H("isoWeekday","E"),B("day",11),B("weekday",11),B("isoWeekday",11),X("d",qr),X("e",qr),X("E",qr),X("dd",function(t,e){return e.weekdaysMinRegex(t)}),X("ddd",function(t,e){return e.weekdaysShortRegex(t)}),X("dddd",function(t,e){return e.weekdaysRegex(t)}),rt(["dd","ddd","dddd"],function(t,e,n,r){var a=n._locale.weekdaysParse(t,r,n._strict);null!=a?e.d=a:_(n).invalidWeekday=t}),rt(["d","e","E"],function(t,e,n,r){e[r]=b(t)});var ba="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),ka="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),La="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),wa=ea,xa=ea,Da=ea;$("H",["HH",2],0,"hour"),$("h",["hh",2],0,qt),$("k",["kk",2],0,Ut),$("hmm",0,0,function(){return""+qt.apply(this)+V(this.minutes(),2)}),$("hmmss",0,0,function(){return""+qt.apply(this)+V(this.minutes(),2)+V(this.seconds(),2)}),$("Hmm",0,0,function(){return""+this.hours()+V(this.minutes(),2)}),$("Hmmss",0,0,function(){return""+this.hours()+V(this.minutes(),2)+V(this.seconds(),2)}),Vt("a",!0),Vt("A",!1),H("hour","h"),B("hour",13),X("a",$t),X("A",$t),X("H",qr),X("h",qr),X("k",qr),X("HH",qr,Ir),X("hh",qr,Ir),X("kk",qr,Ir),X("hmm",Ur),X("hmmss",Vr),X("Hmm",Ur),X("Hmmss",Vr),nt(["H","HH"],sa),nt(["k","kk"],function(t,e,n){var r=b(t);e[sa]=24===r?0:r}),nt(["a","A"],function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t}),nt(["h","hh"],function(t,e,n){e[sa]=b(t),_(n).bigHour=!0}),nt("hmm",function(t,e,n){var r=t.length-2;e[sa]=b(t.substr(0,r)),e[ua]=b(t.substr(r)),_(n).bigHour=!0}),nt("hmmss",function(t,e,n){var r=t.length-4,a=t.length-2;e[sa]=b(t.substr(0,r)),e[ua]=b(t.substr(r,2)),e[la]=b(t.substr(a)),_(n).bigHour=!0}),nt("Hmm",function(t,e,n){var r=t.length-2;e[sa]=b(t.substr(0,r)),e[ua]=b(t.substr(r))}),nt("Hmmss",function(t,e,n){var r=t.length-4,a=t.length-2;e[sa]=b(t.substr(0,r)),e[ua]=b(t.substr(r,2)),e[la]=b(t.substr(a))});var Ya,Ta=/[ap]\.?m?\.?/i,Aa=R("Hours",!0),Sa={calendar:Ar,longDateFormat:Sr,invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:Er,relativeTime:jr,months:pa,monthsShort:ma,week:Ma,weekdays:ba,weekdaysMin:La,weekdaysShort:ka,meridiemParse:Ta},Ea={},ja={},Ca=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Fa=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Oa=/Z|[+-]\d\d(?::?\d\d)?/,Ha=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Pa=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Na=/^\/?Date\((\-?\d+)/i,Ba=/^((?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d?\d\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(?:\d\d)?\d\d\s)(\d\d:\d\d)(\:\d\d)?(\s(?:UT|GMT|[ECMP][SD]T|[A-IK-Za-ik-z]|[+-]\d{4}))$/;e.createFromInputFallback=w("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),e.ISO_8601=function(){},e.RFC_2822=function(){};var Ia=w("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=Me.apply(null,arguments);return this.isValid()&&t.isValid()?tthis?this:t:m()}),za=function(){return Date.now?Date.now():+new Date},Wa=["year","quarter","month","week","day","hour","minute","second","millisecond"];Se("Z",":"),Se("ZZ",""),X("Z",Qr),X("ZZ",Qr),nt(["Z","ZZ"],function(t,e,n){n._useUTC=!0,n._tzm=Ee(Qr,t)});var qa=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Ua=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Va=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;Ue.fn=Ye.prototype,Ue.invalid=De;var $a=Je(1,"add"),Ga=Je(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",e.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Ja=w("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return void 0===t?this.localeData():this.locale(t)});$(0,["gg",2],0,function(){return this.weekYear()%100}),$(0,["GG",2],0,function(){return this.isoWeekYear()%100}),En("gggg","weekYear"),En("ggggg","weekYear"),En("GGGG","isoWeekYear"),En("GGGGG","isoWeekYear"),H("weekYear","gg"),H("isoWeekYear","GG"),B("weekYear",1),B("isoWeekYear",1),X("G",Kr),X("g",Kr),X("GG",qr,Ir),X("gg",qr,Ir),X("GGGG",Gr,zr),X("gggg",Gr,zr),X("GGGGG",Jr,Wr),X("ggggg",Jr,Wr),rt(["gggg","ggggg","GGGG","GGGGG"],function(t,e,n,r){e[r.substr(0,2)]=b(t)}),rt(["gg","GG"],function(t,n,r,a){n[a]=e.parseTwoDigitYear(t)}),$("Q",0,"Qo","quarter"),H("quarter","Q"),B("quarter",7),X("Q",Br),nt("Q",function(t,e){e[ia]=3*(b(t)-1)}),$("D",["DD",2],"Do","date"),H("date","D"),B("date",9),X("D",qr),X("DD",qr,Ir),X("Do",function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient}),nt(["D","DD"],oa),nt("Do",function(t,e){e[oa]=b(t.match(qr)[0],10)});var Za=R("Date",!0);$("DDD",["DDDD",3],"DDDo","dayOfYear"),H("dayOfYear","DDD"),B("dayOfYear",4),X("DDD",$r),X("DDDD",Rr),nt(["DDD","DDDD"],function(t,e,n){n._dayOfYear=b(t)}),$("m",["mm",2],0,"minute"),H("minute","m"),B("minute",14),X("m",qr),X("mm",qr,Ir),nt(["m","mm"],ua);var Ka=R("Minutes",!1);$("s",["ss",2],0,"second"),H("second","s"),B("second",15),X("s",qr),X("ss",qr,Ir),nt(["s","ss"],la);var Xa=R("Seconds",!1);$("S",0,0,function(){return~~(this.millisecond()/100)}),$(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),$(0,["SSS",3],0,"millisecond"),$(0,["SSSS",4],0,function(){return 10*this.millisecond()}),$(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),$(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),$(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),$(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),$(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),H("millisecond","ms"),B("millisecond",16),X("S",$r,Br),X("SS",$r,Ir),X("SSS",$r,Rr);var Qa;for(Qa="SSSS";Qa.length<=9;Qa+="S")X(Qa,Zr);for(Qa="S";Qa.length<=9;Qa+="S")nt(Qa,In);var ti=R("Milliseconds",!1);$("z",0,0,"zoneAbbr"),$("zz",0,0,"zoneName");var ei=g.prototype;ei.add=$a,ei.calendar=Xe,ei.clone=Qe,ei.diff=sn,ei.endOf=Mn,ei.format=fn,ei.from=hn,ei.fromNow=_n,ei.to=pn,ei.toNow=mn,ei.get=q,ei.invalidAt=An,ei.isAfter=tn,ei.isBefore=en,ei.isBetween=nn,ei.isSame=rn,ei.isSameOrAfter=an,ei.isSameOrBefore=on,ei.isValid=Yn,ei.lang=Ja,ei.locale=yn,ei.localeData=gn,ei.max=Ra,ei.min=Ia,ei.parsingFlags=Tn,ei.set=U,ei.startOf=vn,ei.subtract=Ga,ei.toArray=wn,ei.toObject=xn,ei.toDate=Ln,ei.toISOString=cn,ei.inspect=dn,ei.toJSON=Dn,ei.toString=ln,ei.unix=kn,ei.valueOf=bn,ei.creationData=Sn,ei.year=va,ei.isLeapYear=gt,ei.weekYear=jn,ei.isoWeekYear=Cn,ei.quarter=ei.quarters=Nn,ei.month=dt,ei.daysInMonth=ft,ei.week=ei.weeks=Tt,ei.isoWeek=ei.isoWeeks=At,ei.weeksInYear=On,ei.isoWeeksInYear=Fn,ei.date=Za,ei.day=ei.days=Pt,ei.weekday=Nt,ei.isoWeekday=Bt,ei.dayOfYear=Bn,ei.hour=ei.hours=Aa,ei.minute=ei.minutes=Ka,ei.second=ei.seconds=Xa,ei.millisecond=ei.milliseconds=ti,ei.utcOffset=Fe,ei.utc=He,ei.local=Pe,ei.parseZone=Ne,ei.hasAlignedHourOffset=Be,ei.isDST=Ie,ei.isLocal=ze,ei.isUtcOffset=We,ei.isUtc=qe,ei.isUTC=qe,ei.zoneAbbr=Rn,ei.zoneName=zn,ei.dates=w("dates accessor is deprecated. Use date instead.",Za),ei.months=w("months accessor is deprecated. Use month instead",dt),ei.years=w("years accessor is deprecated. Use year instead",va),ei.zone=w("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Oe),ei.isDSTShifted=w("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Re);var ni=A.prototype;ni.calendar=S,ni.longDateFormat=E,ni.invalidDate=j,ni.ordinal=C,ni.preparse=Un,ni.postformat=Un,ni.relativeTime=F,ni.pastFuture=O,ni.set=Y,ni.months=ot,ni.monthsShort=st,ni.monthsParse=lt,ni.monthsRegex=_t,ni.monthsShortRegex=ht,ni.week=xt,ni.firstDayOfYear=Yt,ni.firstDayOfWeek=Dt,ni.weekdays=jt,ni.weekdaysMin=Ft,ni.weekdaysShort=Ct,ni.weekdaysParse=Ht,ni.weekdaysRegex=It,ni.weekdaysShortRegex=Rt,ni.weekdaysMinRegex=zt,ni.isPM=Gt,ni.meridiem=Jt,Qt("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1===b(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}}),e.lang=w("moment.lang is deprecated. Use moment.locale instead.",Qt),e.langData=w("moment.langData is deprecated. Use moment.localeData instead.",ne);var ri=Math.abs,ai=cr("ms"),ii=cr("s"),oi=cr("m"),si=cr("h"),ui=cr("d"),li=cr("w"),ci=cr("M"),di=cr("y"),fi=fr("milliseconds"),hi=fr("seconds"),_i=fr("minutes"),pi=fr("hours"),mi=fr("days"),yi=fr("months"),gi=fr("years"),vi=Math.round,Mi={ss:44,s:45,m:45,h:22,d:26,M:11},bi=Math.abs,ki=Ye.prototype;return ki.isValid=xe,ki.abs=tr,ki.add=nr,ki.subtract=rr,ki.as=ur,ki.asMilliseconds=ai,ki.asSeconds=ii,ki.asMinutes=oi,ki.asHours=si,ki.asDays=ui,ki.asWeeks=li,ki.asMonths=ci,ki.asYears=di,ki.valueOf=lr,ki._bubble=ir,ki.get=dr,ki.milliseconds=fi,ki.seconds=hi,ki.minutes=_i,ki.hours=pi,ki.days=mi,ki.weeks=hr,ki.months=yi,ki.years=gi,ki.humanize=gr,ki.toISOString=vr,ki.toString=vr,ki.toJSON=vr,ki.locale=yn,ki.localeData=gn,ki.toIsoString=w("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",vr),ki.lang=Ja,$("X",0,0,"unix"),$("x",0,0,"valueOf"),X("x",Kr),X("X",ta),nt("X",function(t,e,n){n._d=new Date(1e3*parseFloat(t,10))}),nt("x",function(t,e,n){n._d=new Date(b(t))}),e.version="2.18.1",function(t){Mr=t}(Me),e.fn=ei,e.min=ke,e.max=Le,e.now=za,e.utc=f,e.unix=Wn,e.months=Jn,e.isDate=u,e.locale=Qt,e.invalid=m,e.duration=Ue,e.isMoment=v,e.weekdays=Kn,e.parseZone=qn,e.localeData=ne,e.isDuration=Te,e.monthsShort=Zn,e.weekdaysMin=Qn,e.defineLocale=te,e.updateLocale=ee,e.locales=re,e.weekdaysShort=Xn,e.normalizeUnits=P,e.relativeTimeRounding=mr,e.relativeTimeThreshold=yr,e.calendarFormat=Ke,e.prototype=ei,e})}).call(e,n(3)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.setLogLevel=e.logger=e.LEVELS=void 0;var r=n(0),a=function(t){return t&&t.__esModule?t:{default:t}}(r),i=e.LEVELS={debug:1,info:2,warn:3,error:4,fatal:5},o=e.logger={debug:function(){},info:function(){},warn:function(){},error:function(){},fatal:function(){}},s=(e.setLogLevel=function(t){o.debug=function(){},o.info=function(){},o.warn=function(){},o.error=function(){},o.fatal=function(){},t<=i.fatal&&(o.fatal=console.log.bind(console,"",s("FATAL"))),t<=i.error&&(o.error=console.log.bind(console,"",s("ERROR"))),t<=i.warn&&(o.warn=console.log.bind(console,"",s("WARN"))),t<=i.info&&(o.info=console.log.bind(console,"",s("INFO"))),t<=i.debug&&(o.debug=console.log.bind(console,"",s("DEBUG")))},function(t){return(0,a.default)().format("HH:mm:ss.SSS")+" : "+t+" : "})},function(t,e){var n=Array.isArray;t.exports=n},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){var r;try{r=n(17)}catch(t){}r||(r=window._),t.exports=r},function(t,e,n){var r=n(177),a="object"==typeof self&&self&&self.Object===Object&&self,i=r||a||Function("return this")();t.exports=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a=n(30),i=function(t){return t&&t.__esModule?t:{default:t}}(a);!function(){var t=!1;if(t="tspans",i.default.selection.prototype.textwrap)return!1;void 0===t&&(t=!1),i.default.selection.prototype.textwrap=i.default.selection.enter.prototype.textwrap=function(e,n){n=parseInt(n)||0;var a,o=this,s=function(t){var e=t[0][0];if("rect"!==e.tagName.toString())return!1;var n={};return n.x=i.default.select(e).attr("x")||0,n.y=i.default.select(e).attr("y")||0,n.width=i.default.select(e).attr("width")||0,n.height=i.default.select(e).attr("height")||0,n.attr=t.attr,n},u=function(t){if(t.attr||(t.attr=function(t){if(this[t])return this[t]}),"object"===(void 0===t?"undefined":r(t))&&void 0!==t.x&&void 0!==t.y&&void 0!==t.width&&void 0!==t.height)return t;if("function"==typeof Array.isArray&&Array.isArray(t)||"[object Array]"===Object.prototype.toString.call(t)){return s(t)}return!1}(e);if(n&&(u=function(t,e){var n=t;return 0!==e&&(n.x=parseInt(n.x)+e,n.y=parseInt(n.y)+e,n.width-=2*e,n.height-=2*e),n}(u,n)),0!==o.length&&i.default&&e&&u){e=u;var l,c=function(t){var n=i.default.select(t[0].parentNode),r=n.select("text"),o=r.style("line-height"),s=r.text();r.remove();var u=n.append("foreignObject");u.attr("requiredFeatures","http://www.w3.org/TR/SVG11/feature#Extensibility").attr("x",e.x).attr("y",e.y).attr("width",e.width).attr("height",e.height);var l=u.append("xhtml:div").attr("class","wrapped");l.style("height",e.height).style("width",e.width).html(s),o&&l.style("line-height",o),a=n.select("foreignObject")},d=function(t){var r,o=t[0],s=o.parentNode,u=i.default.select(o),l=o.getBBox().height,c=o.getBBox().width,d=l,f=u.style("line-height");if(r=f&&parseInt(f)?parseInt(f.replace("px","")):d,c>e.width){var h=u.text();if(u.text(""),h){var _,p;if(-1!==h.indexOf(" "))_=" ",p=h.split(" ");else{_="";var m=h.length,y=Math.ceil(c/e.width),g=Math.floor(m/y);g*y>=m||y++,p=[];for(var v,M,b=0;be.width&&Y&&""!==Y&&(L+=T,w={string:Y,width:T,offset:L},k.push(w),u.text(""),u.text(D),b===p.length-1&&(x=D,u.text(x),A=o.getComputedTextLength())),b===p.length-1){u.text("");var S=x;S&&""!==S&&(A-L>0&&(A-=L),w={string:S,width:A,offset:L},k.push(w))}}var E;for(u.text(""),b=0;b0)return r}),E.attr("x",function(){var t=e.x;return n&&(t+=n),t}))}}u.attr("y",function(){var t=e.y;return r&&(t+=r),n&&(t+=n),t}),u.attr("x",function(){var t=e.x;return n&&(t+=n),t}),a=i.default.select(s).selectAll("text")};t&&("foreignobjects"===t?l=c:"tspans"===t&&(l=d)),t||(l="undefined"!=typeof SVGForeignObjectElement?c:d);for(var f=0;f1)for(var n=1;n=0;r--){var a=t[r];"."===a?t.splice(r,1):".."===a?(t.splice(r,1),n++):n&&(t.splice(r,1),n--)}if(e)for(;n--;n)t.unshift("..");return t}function r(t,e){if(t.filter)return t.filter(e);for(var n=[],r=0;r=-1&&!a;i--){var o=i>=0?arguments[i]:t.cwd();if("string"!=typeof o)throw new TypeError("Arguments to path.resolve must be strings");o&&(e=o+"/"+e,a="/"===o.charAt(0))}return e=n(r(e.split("/"),function(t){return!!t}),!a).join("/"),(a?"/":"")+e||"."},e.normalize=function(t){var a=e.isAbsolute(t),i="/"===o(t,-1);return t=n(r(t.split("/"),function(t){return!!t}),!a).join("/"),t||a||(t="."),t&&i&&(t+="/"),(a?"/":"")+t},e.isAbsolute=function(t){return"/"===t.charAt(0)},e.join=function(){var t=Array.prototype.slice.call(arguments,0);return e.normalize(r(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},e.relative=function(t,n){function r(t){for(var e=0;e=0&&""===t[n];n--);return e>n?[]:t.slice(e,n-e+1)}t=e.resolve(t).substr(1),n=e.resolve(n).substr(1);for(var a=r(t.split("/")),i=r(n.split("/")),o=Math.min(a.length,i.length),s=o,u=0;u-1}function f(t,e,n){for(var r=-1,a=null==t?0:t.length;++r-1;);return n}function P(t,e){for(var n=t.length;n--&&k(e,t[n],0)>-1;);return n}function N(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}function B(t){return"\\"+Dn[t]}function I(t,e){return null==t?nt:t[e]}function R(t){return yn.test(t)}function z(t){return gn.test(t)}function W(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}function q(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function U(t,e){return function(n){return t(e(n))}}function V(t,e){for(var n=-1,r=t.length,a=0,i=[];++n>>1,Pt=[["ary",bt],["bind",_t],["bindKey",pt],["curry",yt],["curryRight",gt],["flip",Lt],["partial",vt],["partialRight",Mt],["rearg",kt]],Nt="[object Arguments]",Bt="[object Array]",It="[object AsyncFunction]",Rt="[object Boolean]",zt="[object Date]",Wt="[object DOMException]",qt="[object Error]",Ut="[object Function]",Vt="[object GeneratorFunction]",$t="[object Map]",Gt="[object Number]",Jt="[object Null]",Zt="[object Object]",Kt="[object Proxy]",Xt="[object RegExp]",Qt="[object Set]",te="[object String]",ee="[object Symbol]",ne="[object Undefined]",re="[object WeakMap]",ae="[object WeakSet]",ie="[object ArrayBuffer]",oe="[object DataView]",se="[object Float32Array]",ue="[object Float64Array]",le="[object Int8Array]",ce="[object Int16Array]",de="[object Int32Array]",fe="[object Uint8Array]",he="[object Uint8ClampedArray]",_e="[object Uint16Array]",pe="[object Uint32Array]",me=/\b__p \+= '';/g,ye=/\b(__p \+=) '' \+/g,ge=/(__e\(.*?\)|\b__t\)) \+\n'';/g,ve=/&(?:amp|lt|gt|quot|#39);/g,Me=/[&<>"']/g,be=RegExp(ve.source),ke=RegExp(Me.source),Le=/<%-([\s\S]+?)%>/g,we=/<%([\s\S]+?)%>/g,xe=/<%=([\s\S]+?)%>/g,De=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ye=/^\w*$/,Te=/^\./,Ae=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Se=/[\\^$.*+?()[\]{}|]/g,Ee=RegExp(Se.source),je=/^\s+|\s+$/g,Ce=/^\s+/,Fe=/\s+$/,Oe=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,He=/\{\n\/\* \[wrapped with (.+)\] \*/,Pe=/,? & /,Ne=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Be=/\\(\\)?/g,Ie=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Re=/\w*$/,ze=/^[-+]0x[0-9a-f]+$/i,We=/^0b[01]+$/i,qe=/^\[object .+?Constructor\]$/,Ue=/^0o[0-7]+$/i,Ve=/^(?:0|[1-9]\d*)$/,$e=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Ge=/($^)/,Je=/['\n\r\u2028\u2029\\]/g,Ze="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Ke="\\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",Xe="["+Ke+"]",Qe="["+Ze+"]",tn="[a-z\\xdf-\\xf6\\xf8-\\xff]",en="[^\\ud800-\\udfff"+Ke+"\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",nn="\\ud83c[\\udffb-\\udfff]",rn="(?:\\ud83c[\\udde6-\\uddff]){2}",an="[\\ud800-\\udbff][\\udc00-\\udfff]",on="[A-Z\\xc0-\\xd6\\xd8-\\xde]",sn="(?:"+tn+"|"+en+")",un="(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?",ln="(?:\\u200d(?:"+["[^\\ud800-\\udfff]",rn,an].join("|")+")[\\ufe0e\\ufe0f]?"+un+")*",cn="[\\ufe0e\\ufe0f]?"+un+ln,dn="(?:"+["[\\u2700-\\u27bf]",rn,an].join("|")+")"+cn,fn="(?:"+["[^\\ud800-\\udfff]"+Qe+"?",Qe,rn,an,"[\\ud800-\\udfff]"].join("|")+")",hn=RegExp("['’]","g"),_n=RegExp(Qe,"g"),pn=RegExp(nn+"(?="+nn+")|"+fn+cn,"g"),mn=RegExp([on+"?"+tn+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[Xe,on,"$"].join("|")+")","(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\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\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[Xe,on+sn,"$"].join("|")+")",on+"?"+sn+"+(?:['’](?:d|ll|m|re|s|t|ve))?",on+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:(?:1ST|2ND|3RD|(?![123])\\dTH)\\b)","\\d*(?:(?:1st|2nd|3rd|(?![123])\\dth)\\b)","\\d+",dn].join("|"),"g"),yn=RegExp("[\\u200d\\ud800-\\udfff"+Ze+"\\ufe0e\\ufe0f]"),gn=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,vn=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Mn=-1,bn={};bn[se]=bn[ue]=bn[le]=bn[ce]=bn[de]=bn[fe]=bn[he]=bn[_e]=bn[pe]=!0,bn[Nt]=bn[Bt]=bn[ie]=bn[Rt]=bn[oe]=bn[zt]=bn[qt]=bn[Ut]=bn[$t]=bn[Gt]=bn[Zt]=bn[Xt]=bn[Qt]=bn[te]=bn[re]=!1;var kn={};kn[Nt]=kn[Bt]=kn[ie]=kn[oe]=kn[Rt]=kn[zt]=kn[se]=kn[ue]=kn[le]=kn[ce]=kn[de]=kn[$t]=kn[Gt]=kn[Zt]=kn[Xt]=kn[Qt]=kn[te]=kn[ee]=kn[fe]=kn[he]=kn[_e]=kn[pe]=!0,kn[qt]=kn[Ut]=kn[re]=!1;var Ln={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"},wn={"&":"&","<":"<",">":">",'"':""","'":"'"},xn={"&":"&","<":"<",">":">",""":'"',"'":"'"},Dn={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Yn=parseFloat,Tn=parseInt,An="object"==typeof t&&t&&t.Object===Object&&t,Sn="object"==typeof self&&self&&self.Object===Object&&self,En=An||Sn||Function("return this")(),jn="object"==typeof e&&e&&!e.nodeType&&e,Cn=jn&&"object"==typeof n&&n&&!n.nodeType&&n,Fn=Cn&&Cn.exports===jn,On=Fn&&An.process,Hn=function(){try{return On&&On.binding&&On.binding("util")}catch(t){}}(),Pn=Hn&&Hn.isArrayBuffer,Nn=Hn&&Hn.isDate,Bn=Hn&&Hn.isMap,In=Hn&&Hn.isRegExp,Rn=Hn&&Hn.isSet,zn=Hn&&Hn.isTypedArray,Wn=D("length"),qn=Y(Ln),Un=Y(wn),Vn=Y(xn),$n=function t(e){function n(t){if(iu(t)&&!yf(t)&&!(t instanceof J)){if(t instanceof Y)return t;if(mc.call(t,"__wrapped__"))return eo(t)}return new Y(t)}function g(){}function Y(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=nt}function J(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=Ft,this.__views__=[]}function Q(){var t=new J(this.__wrapped__);return t.__actions__=Pa(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Pa(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Pa(this.__views__),t}function tt(){if(this.__filtered__){var t=new J(this);t.__dir__=-1,t.__filtered__=!0}else t=this.clone(),t.__dir__*=-1;return t}function Ne(){var t=this.__wrapped__.value(),e=this.__dir__,n=yf(t),r=e<0,a=n?t.length:0,i=Di(0,a,this.__views__),o=i.start,s=i.end,u=s-o,l=r?s:o-1,c=this.__iteratees__,d=c.length,f=0,h=Vc(u,this.__takeCount__);if(!n||!r&&a==u&&h==u)return ga(t,this.__actions__);var _=[];t:for(;u--&&f-1}function un(t,e){var n=this.__data__,r=Zn(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}function ln(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e=e?t:e)),t}function rr(t,e,n,r,a,i){var o,u=e<,l=e&ct,c=e&dt;if(n&&(o=a?n(t,r,a,i):n(t)),o!==nt)return o;if(!au(t))return t;var d=yf(t);if(d){if(o=Ai(t),!u)return Pa(t,o)}else{var f=Dd(t),h=f==Ut||f==Vt;if(vf(t))return xa(t,u);if(f==Zt||f==Nt||h&&!a){if(o=l||h?{}:Si(t),!u)return l?Ia(t,Qn(o,t)):Ba(t,Xn(o,t))}else{if(!kn[f])return a?t:{};o=Ei(t,f,rr,u)}}i||(i=new wn);var _=i.get(t);if(_)return _;i.set(t,o);var p=c?l?gi:yi:l?Ru:Iu,m=d?nt:p(t);return s(m||t,function(r,a){m&&(a=r,r=t[a]),Jn(o,a,rr(r,e,n,a,t,i))}),o}function ar(t){var e=Iu(t);return function(n){return ir(n,t,e)}}function ir(t,e,n){var r=n.length;if(null==t)return!r;for(t=sc(t);r--;){var a=n[r],i=e[a],o=t[a];if(o===nt&&!(a in t)||!i(o))return!1}return!0}function or(t,e,n){if("function"!=typeof t)throw new cc(it);return Ad(function(){t.apply(nt,n)},e)}function sr(t,e,n,r){var a=-1,i=d,o=!0,s=t.length,u=[],l=e.length;if(!s)return u;n&&(e=h(e,C(n))),r?(i=f,o=!1):e.length>=rt&&(i=O,o=!1,e=new yn(e));t:for(;++aa?0:a+n),r=r===nt||r>a?a:ku(r),r<0&&(r+=a),r=n>r?0:Lu(r);n0&&n(s)?e>1?fr(s,e-1,n,r,a):_(a,s):r||(a[a.length]=s)}return a}function hr(t,e){return t&&md(t,e,Iu)}function _r(t,e){return t&&yd(t,e,Iu)}function pr(t,e){return c(e,function(e){return eu(t[e])})}function mr(t,e){e=La(e,t);for(var n=0,r=e.length;null!=t&&ne}function Mr(t,e){return null!=t&&mc.call(t,e)}function br(t,e){return null!=t&&e in sc(t)}function kr(t,e,n){return t>=Vc(e,n)&&t=120&&c.length>=120)?new yn(o&&c):nt}c=t[0];var _=-1,p=s[0];t:for(;++_-1;)s!==t&&Sc.call(s,u,1),Sc.call(t,u,1);return t}function Xr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var a=e[n];if(n==r||a!==i){var i=a;Fi(a)?Sc.call(t,a,1):pa(t,a)}}return t}function Qr(t,e){return t+Bc(Jc()*(e-t+1))}function ta(t,e,n,r){for(var a=-1,i=Uc(Nc((e-t)/(n||1)),0),o=nc(i);i--;)o[r?i:++a]=t,t+=n;return o}function ea(t,e){var n="";if(!t||e<1||e>Et)return n;do{e%2&&(n+=t),(e=Bc(e/2))&&(t+=t)}while(e);return n}function na(t,e){return Sd(Vi(t,e,Sl),t+"")}function ra(t){return On(Qu(t))}function aa(t,e){var n=Qu(t);return Ki(n,nr(e,0,n.length))}function ia(t,e,n,r){if(!au(t))return t;e=La(e,t);for(var a=-1,i=e.length,o=i-1,s=t;null!=s&&++aa?0:a+e),n=n>a?a:n,n<0&&(n+=a),a=e>n?0:n-e>>>0,e>>>=0;for(var i=nc(a);++r>>1,o=t[i];null!==o&&!mu(o)&&(n?o<=e:o=rt){var l=e?null:kd(t);if(l)return $(l);o=!1,a=O,u=new yn}else u=e?[]:s;t:for(;++r=r?t:sa(t,e,n)}function xa(t,e){if(e)return t.slice();var n=t.length,r=Dc?Dc(n):new t.constructor(n);return t.copy(r),r}function Da(t){var e=new t.constructor(t.byteLength);return new xc(e).set(new xc(t)),e}function Ya(t,e){var n=e?Da(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}function Ta(t,e,n){return p(e?n(q(t),lt):q(t),r,new t.constructor)}function Aa(t){var e=new t.constructor(t.source,Re.exec(t));return e.lastIndex=t.lastIndex,e}function Sa(t,e,n){return p(e?n($(t),lt):$(t),a,new t.constructor)}function Ea(t){return dd?sc(dd.call(t)):{}}function ja(t,e){var n=e?Da(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Ca(t,e){if(t!==e){var n=t!==nt,r=null===t,a=t===t,i=mu(t),o=e!==nt,s=null===e,u=e===e,l=mu(e);if(!s&&!l&&!i&&t>e||i&&o&&u&&!s&&!l||r&&o&&u||!n&&u||!a)return 1;if(!r&&!i&&!l&&t=s)return u;return u*("desc"==n[r]?-1:1)}}return t.index-e.index}function Oa(t,e,n,r){for(var a=-1,i=t.length,o=n.length,s=-1,u=e.length,l=Uc(i-o,0),c=nc(u+l),d=!r;++s1?n[a-1]:nt,o=a>2?n[2]:nt;for(i=t.length>3&&"function"==typeof i?(a--,i):nt,o&&Oi(n[0],n[1],o)&&(i=a<3?nt:i,a=1),e=sc(e);++r-1?a[i?e[o]:o]:nt}}function Ka(t){return mi(function(e){var n=e.length,r=n,a=Y.prototype.thru;for(t&&e.reverse();r--;){var i=e[r];if("function"!=typeof i)throw new cc(it);if(a&&!o&&"wrapper"==vi(i))var o=new Y([],!0)}for(r=o?r:n;++r1&&g.reverse(),d&&us))return!1;var l=i.get(t);if(l&&i.get(e))return l==e;var c=-1,d=!0,f=n&ht?new yn:nt;for(i.set(t,e),i.set(e,t);++c1?"& ":"")+e[r],e=e.join(n>2?", ":" "),t.replace(Oe,"{\n/* [wrapped with "+e+"] */\n")}function Ci(t){return yf(t)||mf(t)||!!(Ec&&t&&t[Ec])}function Fi(t,e){return!!(e=null==e?Et:e)&&("number"==typeof t||Ve.test(t))&&t>-1&&t%1==0&&t0){if(++e>=Dt)return arguments[0]}else e=0;return t.apply(nt,arguments)}}function Ki(t,e){var n=-1,r=t.length,a=r-1;for(e=e===nt?r:e;++n=this.__values__.length;return{done:t,value:t?nt:this.__values__[this.__index__++]}}function ns(){return this}function rs(t){for(var e,n=this;n instanceof g;){var r=eo(n);r.__index__=0,r.__values__=nt,e?a.__wrapped__=r:e=r;var a=r;n=n.__wrapped__}return a.__wrapped__=t,e}function as(){var t=this.__wrapped__;if(t instanceof J){var e=t;return this.__actions__.length&&(e=new J(this)),e=e.reverse(),e.__actions__.push({func:Xo,args:[To],thisArg:nt}),new Y(e,this.__chain__)}return this.thru(To)}function is(){return ga(this.__wrapped__,this.__actions__)}function os(t,e,n){var r=yf(t)?l:ur;return n&&Oi(t,e,n)&&(e=nt),r(t,bi(e,3))}function ss(t,e){return(yf(t)?c:dr)(t,bi(e,3))}function us(t,e){return fr(_s(t,e),1)}function ls(t,e){return fr(_s(t,e),St)}function cs(t,e,n){return n=n===nt?1:ku(n),fr(_s(t,e),n)}function ds(t,e){return(yf(t)?s:_d)(t,bi(e,3))}function fs(t,e){return(yf(t)?u:pd)(t,bi(e,3))}function hs(t,e,n,r){t=Vs(t)?t:Qu(t),n=n&&!r?ku(n):0;var a=t.length;return n<0&&(n=Uc(a+n,0)),pu(t)?n<=a&&t.indexOf(e,n)>-1:!!a&&k(t,e,n)>-1}function _s(t,e){return(yf(t)?h:Rr)(t,bi(e,3))}function ps(t,e,n,r){return null==t?[]:(yf(e)||(e=null==e?[]:[e]),n=r?nt:n,yf(n)||(n=null==n?[]:[n]),$r(t,e,n))}function ms(t,e,n){var r=yf(t)?p:T,a=arguments.length<3;return r(t,bi(e,4),n,a,_d)}function ys(t,e,n){var r=yf(t)?m:T,a=arguments.length<3;return r(t,bi(e,4),n,a,pd)}function gs(t,e){return(yf(t)?c:dr)(t,js(bi(e,3)))}function vs(t){return(yf(t)?On:ra)(t)}function Ms(t,e,n){return e=(n?Oi(t,e,n):e===nt)?1:ku(e),(yf(t)?Hn:aa)(t,e)}function bs(t){return(yf(t)?Wn:oa)(t)}function ks(t){if(null==t)return 0;if(Vs(t))return pu(t)?K(t):t.length;var e=Dd(t);return e==$t||e==Qt?t.size:Nr(t).length}function Ls(t,e,n){var r=yf(t)?y:ua;return n&&Oi(t,e,n)&&(e=nt),r(t,bi(e,3))}function ws(t,e){if("function"!=typeof e)throw new cc(it);return t=ku(t),function(){if(--t<1)return e.apply(this,arguments)}}function xs(t,e,n){return e=n?nt:e,e=t&&null==e?t.length:e,li(t,bt,nt,nt,nt,nt,e)}function Ds(t,e){var n;if("function"!=typeof e)throw new cc(it);return t=ku(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=nt),n}}function Ys(t,e,n){e=n?nt:e;var r=li(t,yt,nt,nt,nt,nt,nt,e);return r.placeholder=Ys.placeholder,r}function Ts(t,e,n){e=n?nt:e;var r=li(t,gt,nt,nt,nt,nt,nt,e);return r.placeholder=Ts.placeholder,r}function As(t,e,n){function r(e){var n=f,r=h;return f=h=nt,g=e,p=t.apply(r,n)}function a(t){return g=t,m=Ad(s,e),v?r(t):p}function i(t){var n=t-y,r=t-g,a=e-n;return M?Vc(a,_-r):a}function o(t){var n=t-y,r=t-g;return y===nt||n>=e||n<0||M&&r>=_}function s(){var t=af();if(o(t))return u(t);m=Ad(s,i(t))}function u(t){return m=nt,b&&f?r(t):(f=h=nt,p)}function l(){m!==nt&&bd(m),g=0,f=y=h=m=nt}function c(){return m===nt?p:u(af())}function d(){var t=af(),n=o(t);if(f=arguments,h=this,y=t,n){if(m===nt)return a(y);if(M)return m=Ad(s,e),r(y)}return m===nt&&(m=Ad(s,e)),p}var f,h,_,p,m,y,g=0,v=!1,M=!1,b=!0;if("function"!=typeof t)throw new cc(it);return e=wu(e)||0,au(n)&&(v=!!n.leading,M="maxWait"in n,_=M?Uc(wu(n.maxWait)||0,e):_,b="trailing"in n?!!n.trailing:b),d.cancel=l,d.flush=c,d}function Ss(t){return li(t,Lt)}function Es(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new cc(it);var n=function(){var r=arguments,a=e?e.apply(this,r):r[0],i=n.cache;if(i.has(a))return i.get(a);var o=t.apply(this,r);return n.cache=i.set(a,o)||i,o};return n.cache=new(Es.Cache||ln),n}function js(t){if("function"!=typeof t)throw new cc(it);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}function Cs(t){return Ds(2,t)}function Fs(t,e){if("function"!=typeof t)throw new cc(it);return e=e===nt?e:ku(e),na(t,e)}function Os(t,e){if("function"!=typeof t)throw new cc(it);return e=null==e?0:Uc(ku(e),0),na(function(n){var r=n[e],a=wa(n,0,e);return r&&_(a,r),i(t,this,a)})}function Hs(t,e,n){var r=!0,a=!0;if("function"!=typeof t)throw new cc(it);return au(n)&&(r="leading"in n?!!n.leading:r,a="trailing"in n?!!n.trailing:a),As(t,e,{leading:r,maxWait:e,trailing:a})}function Ps(t){return xs(t,1)}function Ns(t,e){return df(ka(e),t)}function Bs(){if(!arguments.length)return[];var t=arguments[0];return yf(t)?t:[t]}function Is(t){return rr(t,dt)}function Rs(t,e){return e="function"==typeof e?e:nt,rr(t,dt,e)}function zs(t){return rr(t,lt|dt)}function Ws(t,e){return e="function"==typeof e?e:nt,rr(t,lt|dt,e)}function qs(t,e){return null==e||ir(t,e,Iu(e))}function Us(t,e){return t===e||t!==t&&e!==e}function Vs(t){return null!=t&&ru(t.length)&&!eu(t)}function $s(t){return iu(t)&&Vs(t)}function Gs(t){return!0===t||!1===t||iu(t)&&gr(t)==Rt}function Js(t){return iu(t)&&1===t.nodeType&&!hu(t)}function Zs(t){if(null==t)return!0;if(Vs(t)&&(yf(t)||"string"==typeof t||"function"==typeof t.splice||vf(t)||wf(t)||mf(t)))return!t.length;var e=Dd(t);if(e==$t||e==Qt)return!t.size;if(Ii(t))return!Nr(t).length;for(var n in t)if(mc.call(t,n))return!1;return!0}function Ks(t,e){return Ar(t,e)}function Xs(t,e,n){n="function"==typeof n?n:nt;var r=n?n(t,e):nt;return r===nt?Ar(t,e,nt,n):!!r}function Qs(t){if(!iu(t))return!1;var e=gr(t);return e==qt||e==Wt||"string"==typeof t.message&&"string"==typeof t.name&&!hu(t)}function tu(t){return"number"==typeof t&&zc(t)}function eu(t){if(!au(t))return!1;var e=gr(t);return e==Ut||e==Vt||e==It||e==Kt}function nu(t){return"number"==typeof t&&t==ku(t)}function ru(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=Et}function au(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function iu(t){return null!=t&&"object"==typeof t}function ou(t,e){return t===e||jr(t,e,Li(e))}function su(t,e,n){return n="function"==typeof n?n:nt,jr(t,e,Li(e),n)}function uu(t){return fu(t)&&t!=+t}function lu(t){if(Yd(t))throw new ac(at);return Cr(t)}function cu(t){return null===t}function du(t){return null==t}function fu(t){return"number"==typeof t||iu(t)&&gr(t)==Gt}function hu(t){if(!iu(t)||gr(t)!=Zt)return!1;var e=Yc(t);if(null===e)return!0;var n=mc.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&pc.call(n)==Mc}function _u(t){return nu(t)&&t>=-Et&&t<=Et}function pu(t){return"string"==typeof t||!yf(t)&&iu(t)&&gr(t)==te}function mu(t){return"symbol"==typeof t||iu(t)&&gr(t)==ee}function yu(t){return t===nt}function gu(t){return iu(t)&&Dd(t)==re}function vu(t){return iu(t)&&gr(t)==ae}function Mu(t){if(!t)return[];if(Vs(t))return pu(t)?X(t):Pa(t);if(jc&&t[jc])return W(t[jc]());var e=Dd(t);return(e==$t?q:e==Qt?$:Qu)(t)}function bu(t){if(!t)return 0===t?t:0;if((t=wu(t))===St||t===-St){return(t<0?-1:1)*jt}return t===t?t:0}function ku(t){var e=bu(t),n=e%1;return e===e?n?e-n:e:0}function Lu(t){return t?nr(ku(t),0,Ft):0}function wu(t){if("number"==typeof t)return t;if(mu(t))return Ct;if(au(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=au(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(je,"");var n=We.test(t);return n||Ue.test(t)?Tn(t.slice(2),n?2:8):ze.test(t)?Ct:+t}function xu(t){return Na(t,Ru(t))}function Du(t){return t?nr(ku(t),-Et,Et):0===t?t:0}function Yu(t){return null==t?"":ha(t)}function Tu(t,e){var n=hd(t);return null==e?n:Xn(n,e)}function Au(t,e){return M(t,bi(e,3),hr)}function Su(t,e){return M(t,bi(e,3),_r)}function Eu(t,e){return null==t?t:md(t,bi(e,3),Ru)}function ju(t,e){return null==t?t:yd(t,bi(e,3),Ru)}function Cu(t,e){return t&&hr(t,bi(e,3))}function Fu(t,e){return t&&_r(t,bi(e,3))}function Ou(t){return null==t?[]:pr(t,Iu(t))}function Hu(t){return null==t?[]:pr(t,Ru(t))}function Pu(t,e,n){var r=null==t?nt:mr(t,e);return r===nt?n:r}function Nu(t,e){return null!=t&&Ti(t,e,Mr)}function Bu(t,e){return null!=t&&Ti(t,e,br)}function Iu(t){return Vs(t)?Cn(t):Nr(t)}function Ru(t){return Vs(t)?Cn(t,!0):Br(t)}function zu(t,e){var n={};return e=bi(e,3),hr(t,function(t,r,a){tr(n,e(t,r,a),t)}),n}function Wu(t,e){var n={};return e=bi(e,3),hr(t,function(t,r,a){tr(n,r,e(t,r,a))}),n}function qu(t,e){return Uu(t,js(bi(e)))}function Uu(t,e){if(null==t)return{};var n=h(gi(t),function(t){return[t]});return e=bi(e),Jr(t,n,function(t,n){return e(t,n[0])})}function Vu(t,e,n){e=La(e,t);var r=-1,a=e.length;for(a||(a=1,t=nt);++re){var r=t;t=e,e=r}if(n||t%1||e%1){var a=Jc();return Vc(t+a*(e-t+Yn("1e-"+((a+"").length-1))),e)}return Qr(t,e)}function al(t){return Zf(Yu(t).toLowerCase())}function il(t){return(t=Yu(t))&&t.replace($e,qn).replace(_n,"")}function ol(t,e,n){t=Yu(t),e=ha(e);var r=t.length;n=n===nt?r:nr(ku(n),0,r);var a=n;return(n-=e.length)>=0&&t.slice(n,a)==e}function sl(t){return t=Yu(t),t&&ke.test(t)?t.replace(Me,Un):t}function ul(t){return t=Yu(t),t&&Ee.test(t)?t.replace(Se,"\\$&"):t}function ll(t,e,n){t=Yu(t),e=ku(e);var r=e?K(t):0;if(!e||r>=e)return t;var a=(e-r)/2;return ni(Bc(a),n)+t+ni(Nc(a),n)}function cl(t,e,n){t=Yu(t),e=ku(e);var r=e?K(t):0;return e&&r>>0)?(t=Yu(t),t&&("string"==typeof e||null!=e&&!kf(e))&&!(e=ha(e))&&R(t)?wa(X(t),0,n):t.split(e,n)):[]}function ml(t,e,n){return t=Yu(t),n=null==n?0:nr(ku(n),0,t.length),e=ha(e),t.slice(n,n+e.length)==e}function yl(t,e,r){var a=n.templateSettings;r&&Oi(t,e,r)&&(e=nt),t=Yu(t),e=Af({},e,a,ci);var i,o,s=Af({},e.imports,a.imports,ci),u=Iu(s),l=F(s,u),c=0,d=e.interpolate||Ge,f="__p += '",h=uc((e.escape||Ge).source+"|"+d.source+"|"+(d===xe?Ie:Ge).source+"|"+(e.evaluate||Ge).source+"|$","g"),_="//# sourceURL="+("sourceURL"in e?e.sourceURL:"lodash.templateSources["+ ++Mn+"]")+"\n";t.replace(h,function(e,n,r,a,s,u){return r||(r=a),f+=t.slice(c,u).replace(Je,B),n&&(i=!0,f+="' +\n__e("+n+") +\n'"),s&&(o=!0,f+="';\n"+s+";\n__p += '"),r&&(f+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),c=u+e.length,e}),f+="';\n";var p=e.variable;p||(f="with (obj) {\n"+f+"\n}\n"),f=(o?f.replace(me,""):f).replace(ye,"$1").replace(ge,"$1;"),f="function("+(p||"obj")+") {\n"+(p?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(i?", __e = _.escape":"")+(o?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+f+"return __p\n}";var m=Kf(function(){return ic(u,_+"return "+f).apply(nt,l)});if(m.source=f,Qs(m))throw m;return m}function gl(t){return Yu(t).toLowerCase()}function vl(t){return Yu(t).toUpperCase()}function Ml(t,e,n){if((t=Yu(t))&&(n||e===nt))return t.replace(je,"");if(!t||!(e=ha(e)))return t;var r=X(t),a=X(e);return wa(r,H(r,a),P(r,a)+1).join("")}function bl(t,e,n){if((t=Yu(t))&&(n||e===nt))return t.replace(Fe,"");if(!t||!(e=ha(e)))return t;var r=X(t);return wa(r,0,P(r,X(e))+1).join("")}function kl(t,e,n){if((t=Yu(t))&&(n||e===nt))return t.replace(Ce,"");if(!t||!(e=ha(e)))return t;var r=X(t);return wa(r,H(r,X(e))).join("")}function Ll(t,e){var n=wt,r=xt;if(au(e)){var a="separator"in e?e.separator:a;n="length"in e?ku(e.length):n,r="omission"in e?ha(e.omission):r}t=Yu(t);var i=t.length;if(R(t)){var o=X(t);i=o.length}if(n>=i)return t;var s=n-K(r);if(s<1)return r;var u=o?wa(o,0,s).join(""):t.slice(0,s);if(a===nt)return u+r;if(o&&(s+=u.length-s),kf(a)){if(t.slice(s).search(a)){var l,c=u;for(a.global||(a=uc(a.source,Yu(Re.exec(a))+"g")),a.lastIndex=0;l=a.exec(c);)var d=l.index;u=u.slice(0,d===nt?s:d)}}else if(t.indexOf(ha(a),s)!=s){var f=u.lastIndexOf(a);f>-1&&(u=u.slice(0,f))}return u+r}function wl(t){return t=Yu(t),t&&be.test(t)?t.replace(ve,Vn):t}function xl(t,e,n){return t=Yu(t),e=n?nt:e,e===nt?z(t)?et(t):v(t):t.match(e)||[]}function Dl(t){var e=null==t?0:t.length,n=bi();return t=e?h(t,function(t){if("function"!=typeof t[1])throw new cc(it);return[n(t[0]),t[1]]}):[],na(function(n){for(var r=-1;++rEt)return[];var n=Ft,r=Vc(t,Ft);e=bi(e),t-=Ft;for(var a=E(r,e);++n1?t[e-1]:nt;return n="function"==typeof n?(t.pop(),n):nt,$o(t,n)}),Jd=mi(function(t){var e=t.length,n=e?t[0]:0,r=this.__wrapped__,a=function(e){return er(e,t)};return!(e>1||this.__actions__.length)&&r instanceof J&&Fi(n)?(r=r.slice(n,+n+(e?1:0)),r.__actions__.push({func:Xo,args:[a],thisArg:nt}),new Y(r,this.__chain__).thru(function(t){return e&&!t.length&&t.push(nt),t})):this.thru(a)}),Zd=Ra(function(t,e,n){mc.call(t,n)?++t[n]:tr(t,n,1)}),Kd=Za(co),Xd=Za(fo),Qd=Ra(function(t,e,n){mc.call(t,n)?t[n].push(e):tr(t,n,[e])}),tf=na(function(t,e,n){var r=-1,a="function"==typeof e,o=Vs(t)?nc(t.length):[];return _d(t,function(t){o[++r]=a?i(e,t,n):xr(t,e,n)}),o}),ef=Ra(function(t,e,n){tr(t,n,e)}),nf=Ra(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),rf=na(function(t,e){if(null==t)return[];var n=e.length;return n>1&&Oi(t,e[0],e[1])?e=[]:n>2&&Oi(e[0],e[1],e[2])&&(e=[e[0]]),$r(t,fr(e,1),[])}),af=Hc||function(){return En.Date.now()},of=na(function(t,e,n){var r=_t;if(n.length){var a=V(n,Mi(of));r|=vt}return li(t,r,e,n,a)}),sf=na(function(t,e,n){var r=_t|pt;if(n.length){var a=V(n,Mi(sf));r|=vt}return li(e,r,t,n,a)}),uf=na(function(t,e){return or(t,1,e)}),lf=na(function(t,e,n){return or(t,wu(e)||0,n)});Es.Cache=ln;var cf=Md(function(t,e){e=1==e.length&&yf(e[0])?h(e[0],C(bi())):h(fr(e,1),C(bi()));var n=e.length;return na(function(r){for(var a=-1,o=Vc(r.length,n);++a=e}),mf=Dr(function(){return arguments}())?Dr:function(t){return iu(t)&&mc.call(t,"callee")&&!Ac.call(t,"callee")},yf=nc.isArray,gf=Pn?C(Pn):Yr,vf=Rc||Rl,Mf=Nn?C(Nn):Tr,bf=Bn?C(Bn):Er,kf=In?C(In):Fr,Lf=Rn?C(Rn):Or,wf=zn?C(zn):Hr,xf=ii(Ir),Df=ii(function(t,e){return t<=e}),Yf=za(function(t,e){if(Ii(e)||Vs(e))return void Na(e,Iu(e),t);for(var n in e)mc.call(e,n)&&Jn(t,n,e[n])}),Tf=za(function(t,e){Na(e,Ru(e),t)}),Af=za(function(t,e,n,r){Na(e,Ru(e),t,r)}),Sf=za(function(t,e,n,r){Na(e,Iu(e),t,r)}),Ef=mi(er),jf=na(function(t){return t.push(nt,ci),i(Af,nt,t)}),Cf=na(function(t){return t.push(nt,di),i(Nf,nt,t)}),Ff=Qa(function(t,e,n){t[e]=n},Tl(Sl)),Of=Qa(function(t,e,n){mc.call(t,e)?t[e].push(n):t[e]=[n]},bi),Hf=na(xr),Pf=za(function(t,e,n){qr(t,e,n)}),Nf=za(function(t,e,n,r){qr(t,e,n,r)}),Bf=mi(function(t,e){var n={};if(null==t)return n;var r=!1;e=h(e,function(e){return e=La(e,t),r||(r=e.length>1),e}),Na(t,gi(t),n),r&&(n=rr(n,lt|ct|dt,fi));for(var a=e.length;a--;)pa(n,e[a]);return n}),If=mi(function(t,e){return null==t?{}:Gr(t,e)}),Rf=ui(Iu),zf=ui(Ru),Wf=$a(function(t,e,n){return e=e.toLowerCase(),t+(n?al(e):e)}),qf=$a(function(t,e,n){return t+(n?"-":"")+e.toLowerCase()}),Uf=$a(function(t,e,n){return t+(n?" ":"")+e.toLowerCase()}),Vf=Va("toLowerCase"),$f=$a(function(t,e,n){return t+(n?"_":"")+e.toLowerCase()}),Gf=$a(function(t,e,n){return t+(n?" ":"")+Zf(e)}),Jf=$a(function(t,e,n){return t+(n?" ":"")+e.toUpperCase()}),Zf=Va("toUpperCase"),Kf=na(function(t,e){try{return i(t,nt,e)}catch(t){return Qs(t)?t:new ac(t)}}),Xf=mi(function(t,e){return s(e,function(e){e=Xi(e),tr(t,e,of(t[e],t))}),t}),Qf=Ka(),th=Ka(!0),eh=na(function(t,e){return function(n){return xr(n,t,e)}}),nh=na(function(t,e){return function(n){return xr(t,n,e)}}),rh=ei(h),ah=ei(l),ih=ei(y),oh=ai(),sh=ai(!0),uh=ti(function(t,e){return t+e},0),lh=si("ceil"),ch=ti(function(t,e){return t/e},1),dh=si("floor"),fh=ti(function(t,e){return t*e},1),hh=si("round"),_h=ti(function(t,e){return t-e},0);return n.after=ws,n.ary=xs,n.assign=Yf,n.assignIn=Tf,n.assignInWith=Af,n.assignWith=Sf,n.at=Ef,n.before=Ds,n.bind=of,n.bindAll=Xf,n.bindKey=sf,n.castArray=Bs,n.chain=Zo,n.chunk=no,n.compact=ro,n.concat=ao,n.cond=Dl,n.conforms=Yl,n.constant=Tl,n.countBy=Zd,n.create=Tu,n.curry=Ys,n.curryRight=Ts,n.debounce=As,n.defaults=jf,n.defaultsDeep=Cf,n.defer=uf,n.delay=lf,n.difference=jd,n.differenceBy=Cd,n.differenceWith=Fd,n.drop=io,n.dropRight=oo,n.dropRightWhile=so,n.dropWhile=uo,n.fill=lo,n.filter=ss,n.flatMap=us,n.flatMapDeep=ls,n.flatMapDepth=cs,n.flatten=ho,n.flattenDeep=_o,n.flattenDepth=po,n.flip=Ss,n.flow=Qf,n.flowRight=th,n.fromPairs=mo,n.functions=Ou,n.functionsIn=Hu,n.groupBy=Qd,n.initial=vo,n.intersection=Od,n.intersectionBy=Hd,n.intersectionWith=Pd,n.invert=Ff,n.invertBy=Of,n.invokeMap=tf,n.iteratee=El,n.keyBy=ef,n.keys=Iu,n.keysIn=Ru,n.map=_s,n.mapKeys=zu,n.mapValues=Wu,n.matches=jl,n.matchesProperty=Cl,n.memoize=Es,n.merge=Pf,n.mergeWith=Nf,n.method=eh,n.methodOf=nh,n.mixin=Fl,n.negate=js,n.nthArg=Pl,n.omit=Bf,n.omitBy=qu,n.once=Cs,n.orderBy=ps,n.over=rh,n.overArgs=cf,n.overEvery=ah,n.overSome=ih,n.partial=df,n.partialRight=ff,n.partition=nf,n.pick=If,n.pickBy=Uu,n.property=Nl,n.propertyOf=Bl,n.pull=Nd,n.pullAll=wo,n.pullAllBy=xo,n.pullAllWith=Do,n.pullAt=Bd,n.range=oh,n.rangeRight=sh,n.rearg=hf,n.reject=gs,n.remove=Yo,n.rest=Fs,n.reverse=To,n.sampleSize=Ms,n.set=$u,n.setWith=Gu,n.shuffle=bs,n.slice=Ao,n.sortBy=rf,n.sortedUniq=Ho,n.sortedUniqBy=Po,n.split=pl,n.spread=Os,n.tail=No,n.take=Bo,n.takeRight=Io,n.takeRightWhile=Ro,n.takeWhile=zo,n.tap=Ko,n.throttle=Hs,n.thru=Xo,n.toArray=Mu,n.toPairs=Rf,n.toPairsIn=zf,n.toPath=Vl,n.toPlainObject=xu,n.transform=Ju,n.unary=Ps,n.union=Id,n.unionBy=Rd,n.unionWith=zd,n.uniq=Wo,n.uniqBy=qo,n.uniqWith=Uo,n.unset=Zu,n.unzip=Vo,n.unzipWith=$o,n.update=Ku,n.updateWith=Xu,n.values=Qu,n.valuesIn=tl,n.without=Wd,n.words=xl,n.wrap=Ns,n.xor=qd,n.xorBy=Ud,n.xorWith=Vd,n.zip=$d,n.zipObject=Go,n.zipObjectDeep=Jo,n.zipWith=Gd,n.entries=Rf,n.entriesIn=zf,n.extend=Tf,n.extendWith=Af,Fl(n,n),n.add=uh,n.attempt=Kf,n.camelCase=Wf,n.capitalize=al,n.ceil=lh,n.clamp=el,n.clone=Is,n.cloneDeep=zs,n.cloneDeepWith=Ws,n.cloneWith=Rs,n.conformsTo=qs,n.deburr=il,n.defaultTo=Al,n.divide=ch,n.endsWith=ol,n.eq=Us,n.escape=sl,n.escapeRegExp=ul,n.every=os,n.find=Kd,n.findIndex=co,n.findKey=Au,n.findLast=Xd,n.findLastIndex=fo,n.findLastKey=Su,n.floor=dh,n.forEach=ds,n.forEachRight=fs,n.forIn=Eu,n.forInRight=ju,n.forOwn=Cu,n.forOwnRight=Fu,n.get=Pu,n.gt=_f,n.gte=pf,n.has=Nu,n.hasIn=Bu,n.head=yo,n.identity=Sl,n.includes=hs,n.indexOf=go,n.inRange=nl,n.invoke=Hf,n.isArguments=mf,n.isArray=yf,n.isArrayBuffer=gf,n.isArrayLike=Vs,n.isArrayLikeObject=$s,n.isBoolean=Gs,n.isBuffer=vf,n.isDate=Mf,n.isElement=Js,n.isEmpty=Zs,n.isEqual=Ks,n.isEqualWith=Xs,n.isError=Qs,n.isFinite=tu,n.isFunction=eu,n.isInteger=nu,n.isLength=ru,n.isMap=bf,n.isMatch=ou,n.isMatchWith=su,n.isNaN=uu,n.isNative=lu,n.isNil=du,n.isNull=cu,n.isNumber=fu,n.isObject=au,n.isObjectLike=iu,n.isPlainObject=hu,n.isRegExp=kf,n.isSafeInteger=_u,n.isSet=Lf,n.isString=pu,n.isSymbol=mu,n.isTypedArray=wf,n.isUndefined=yu,n.isWeakMap=gu,n.isWeakSet=vu,n.join=Mo,n.kebabCase=qf,n.last=bo,n.lastIndexOf=ko,n.lowerCase=Uf,n.lowerFirst=Vf,n.lt=xf,n.lte=Df,n.max=Gl,n.maxBy=Jl,n.mean=Zl,n.meanBy=Kl,n.min=Xl,n.minBy=Ql,n.stubArray=Il,n.stubFalse=Rl,n.stubObject=zl,n.stubString=Wl,n.stubTrue=ql,n.multiply=fh,n.nth=Lo,n.noConflict=Ol,n.noop=Hl,n.now=af,n.pad=ll,n.padEnd=cl,n.padStart=dl,n.parseInt=fl,n.random=rl,n.reduce=ms,n.reduceRight=ys,n.repeat=hl,n.replace=_l,n.result=Vu,n.round=hh,n.runInContext=t,n.sample=vs,n.size=ks,n.snakeCase=$f,n.some=Ls,n.sortedIndex=So,n.sortedIndexBy=Eo,n.sortedIndexOf=jo,n.sortedLastIndex=Co,n.sortedLastIndexBy=Fo,n.sortedLastIndexOf=Oo,n.startCase=Gf,n.startsWith=ml,n.subtract=_h,n.sum=tc,n.sumBy=ec,n.template=yl,n.times=Ul,n.toFinite=bu,n.toInteger=ku,n.toLength=Lu,n.toLower=gl,n.toNumber=wu,n.toSafeInteger=Du,n.toString=Yu,n.toUpper=vl,n.trim=Ml,n.trimEnd=bl,n.trimStart=kl,n.truncate=Ll,n.unescape=wl,n.uniqueId=$l,n.upperCase=Jf,n.upperFirst=Zf,n.each=ds,n.eachRight=fs,n.first=yo,Fl(n,function(){var t={};return hr(n,function(e,r){mc.call(n.prototype,r)||(t[r]=e)}),t}(),{chain:!1}),n.VERSION="4.17.4",s(["bind","bindKey","curry","curryRight","partial","partialRight"],function(t){n[t].placeholder=n}),s(["drop","take"],function(t,e){J.prototype[t]=function(n){n=n===nt?1:Uc(ku(n),0);var r=this.__filtered__&&!e?new J(this):this.clone();return r.__filtered__?r.__takeCount__=Vc(n,r.__takeCount__):r.__views__.push({size:Vc(n,Ft),type:t+(r.__dir__<0?"Right":"")}),r},J.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}}),s(["filter","map","takeWhile"],function(t,e){var n=e+1,r=n==Tt||3==n;J.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:bi(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),s(["head","last"],function(t,e){var n="take"+(e?"Right":"");J.prototype[t]=function(){return this[n](1).value()[0]}}),s(["initial","tail"],function(t,e){var n="drop"+(e?"":"Right");J.prototype[t]=function(){return this.__filtered__?new J(this):this[n](1)}}),J.prototype.compact=function(){return this.filter(Sl)},J.prototype.find=function(t){return this.filter(t).head()},J.prototype.findLast=function(t){return this.reverse().find(t)},J.prototype.invokeMap=na(function(t,e){return"function"==typeof t?new J(this):this.map(function(n){return xr(n,t,e)})}),J.prototype.reject=function(t){return this.filter(js(bi(t)))},J.prototype.slice=function(t,e){t=ku(t);var n=this;return n.__filtered__&&(t>0||e<0)?new J(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==nt&&(e=ku(e),n=e<0?n.dropRight(-e):n.take(e-t)),n)},J.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},J.prototype.toArray=function(){return this.take(Ft)},hr(J.prototype,function(t,e){var r=/^(?:filter|find|map|reject)|While$/.test(e),a=/^(?:head|last)$/.test(e),i=n[a?"take"+("last"==e?"Right":""):e],o=a||/^find/.test(e);i&&(n.prototype[e]=function(){var e=this.__wrapped__,s=a?[1]:arguments,u=e instanceof J,l=s[0],c=u||yf(e),d=function(t){var e=i.apply(n,_([t],s));return a&&f?e[0]:e};c&&r&&"function"==typeof l&&1!=l.length&&(u=c=!1);var f=this.__chain__,h=!!this.__actions__.length,p=o&&!f,m=u&&!h;if(!o&&c){e=m?e:new J(this);var y=t.apply(e,s);return y.__actions__.push({func:Xo,args:[d],thisArg:nt}),new Y(y,f)}return p&&m?t.apply(this,s):(y=this.thru(d),p?a?y.value()[0]:y.value():y)})}),s(["pop","push","shift","sort","splice","unshift"],function(t){var e=dc[t],r=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",a=/^(?:pop|shift)$/.test(t);n.prototype[t]=function(){var t=arguments;if(a&&!this.__chain__){var n=this.value();return e.apply(yf(n)?n:[],t)}return this[r](function(n){return e.apply(yf(n)?n:[],t)})}}),hr(J.prototype,function(t,e){var r=n[e];if(r){var a=r.name+"";(ad[a]||(ad[a]=[])).push({name:e,func:r})}}),ad[Xa(nt,pt).name]=[{name:"wrapper",func:nt}],J.prototype.clone=Q,J.prototype.reverse=tt,J.prototype.value=Ne,n.prototype.at=Jd,n.prototype.chain=Qo,n.prototype.commit=ts,n.prototype.next=es,n.prototype.plant=rs,n.prototype.reverse=as,n.prototype.toJSON=n.prototype.valueOf=n.prototype.value=is,n.prototype.first=n.prototype.head,jc&&(n.prototype[jc]=ns),n}();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(En._=$n,define(function(){return $n})):Cn?((Cn.exports=$n)._=$n,jn._=$n):En._=$n}).call(this)}).call(e,n(19),n(3)(t))},function(t,e){function n(t){return t}t.exports=n},function(t,e){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){var r=n(206);t.exports={Graph:r.Graph,json:n(208),alg:n(209),version:r.version}},function(t,e,n){function r(t){return o(t)?a(t):i(t)}var a=n(175),i=n(236),o=n(13);t.exports=r},function(t,e,n){var r=n(5),a=r.Symbol;t.exports=a},function(t,e){function n(t,e){return t===e||t!==t&&e!==e}t.exports=n},function(t,e,n){function r(t){var e=-1,n=null==t?0:t.length;for(this.clear();++ee?1:t>=e?0:NaN}function u(t){return null===t?NaN:+t}function l(t){return!isNaN(t)}function c(t){return{left:function(e,n,r,a){for(arguments.length<3&&(r=0),arguments.length<4&&(a=e.length);r>>1;t(e[i],n)<0?r=i+1:a=i}return r},right:function(e,n,r,a){for(arguments.length<3&&(r=0),arguments.length<4&&(a=e.length);r>>1;t(e[i],n)>0?a=i:r=i+1}return r}}}function d(t){return t.length}function f(t){for(var e=1;t*e%1;)e*=10;return e}function h(t,e){for(var n in e)Object.defineProperty(t.prototype,n,{value:e[n],enumerable:!1})}function _(){this._=Object.create(null)}function p(t){return(t+="")===wo||t[0]===xo?xo+t:t}function m(t){return(t+="")[0]===xo?t.slice(1):t}function y(t){return p(t)in this._}function g(t){return(t=p(t))in this._&&delete this._[t]}function v(){var t=[];for(var e in this._)t.push(m(e));return t}function M(){var t=0;for(var e in this._)++t;return t}function b(){for(var t in this._)return!1;return!0}function k(){this._=Object.create(null)}function L(t){return t}function w(t,e,n){return function(){var r=n.apply(e,arguments);return r===e?t:r}}function x(t,e){if(e in t)return e;e=e.charAt(0).toUpperCase()+e.slice(1);for(var n=0,r=Do.length;n=e&&(e=a+1);!(o=s[e])&&++e0&&(t=t.slice(0,s));var l=Ho.get(t);return l&&(t=l,u=Q),s?e?a:r:e?D:i}function X(t,e){return function(n){var r=ho.event;ho.event=n,e[0]=this.__data__;try{t.apply(this,e)}finally{ho.event=r}}}function Q(t,e){var n=X(t,e);return function(t){var e=this,r=t.relatedTarget;r&&(r===e||8&r.compareDocumentPosition(e))||n.call(e,t)}}function tt(t){var e=".dragsuppress-"+ ++No,n="click"+e,r=ho.select(o(t)).on("touchmove"+e,A).on("dragstart"+e,A).on("selectstart"+e,A);if(null==Po&&(Po=!("onselectstart"in t)&&x(t.style,"userSelect")),Po){var a=i(t).style,s=a[Po];a[Po]="none"}return function(t){if(r.on(e,null),Po&&(a[Po]=s),t){var i=function(){r.on(n,null)};r.on(n,function(){A(),i()},!0),setTimeout(i,0)}}}function et(t,e){e.changedTouches&&(e=e.changedTouches[0]);var n=t.ownerSVGElement||t;if(n.createSVGPoint){var r=n.createSVGPoint();if(Bo<0){var a=o(t);if(a.scrollX||a.scrollY){n=ho.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var i=n[0][0].getScreenCTM();Bo=!(i.f||i.e),n.remove()}}return Bo?(r.x=e.pageX,r.y=e.pageY):(r.x=e.clientX,r.y=e.clientY),r=r.matrixTransform(t.getScreenCTM().inverse()),[r.x,r.y]}var s=t.getBoundingClientRect();return[e.clientX-s.left-t.clientLeft,e.clientY-s.top-t.clientTop]}function nt(){return ho.event.changedTouches[0].identifier}function rt(t){return t>0?1:t<0?-1:0}function at(t,e,n){return(e[0]-t[0])*(n[1]-t[1])-(e[1]-t[1])*(n[0]-t[0])}function it(t){return t>1?0:t<-1?zo:Math.acos(t)}function ot(t){return t>1?Uo:t<-1?-Uo:Math.asin(t)}function st(t){return((t=Math.exp(t))-1/t)/2}function ut(t){return((t=Math.exp(t))+1/t)/2}function lt(t){return((t=Math.exp(2*t))-1)/(t+1)}function ct(t){return(t=Math.sin(t/2))*t}function dt(){}function ft(t,e,n){return this instanceof ft?(this.h=+t,this.s=+e,void(this.l=+n)):arguments.length<2?t instanceof ft?new ft(t.h,t.s,t.l):Dt(""+t,Yt,ft):new ft(t,e,n)}function ht(t,e,n){function r(t){return t>360?t-=360:t<0&&(t+=360),t<60?i+(o-i)*t/60:t<180?o:t<240?i+(o-i)*(240-t)/60:i}function a(t){return Math.round(255*r(t))}var i,o;return t=isNaN(t)?0:(t%=360)<0?t+360:t,e=isNaN(e)?0:e<0?0:e>1?1:e,n=n<0?0:n>1?1:n,o=n<=.5?n*(1+e):n+e-n*e,i=2*n-o,new kt(a(t+120),a(t),a(t-120))}function _t(t,e,n){return this instanceof _t?(this.h=+t,this.c=+e,void(this.l=+n)):arguments.length<2?t instanceof _t?new _t(t.h,t.c,t.l):t instanceof mt?gt(t.l,t.a,t.b):gt((t=Tt((t=ho.rgb(t)).r,t.g,t.b)).l,t.a,t.b):new _t(t,e,n)}function pt(t,e,n){return isNaN(t)&&(t=0),isNaN(e)&&(e=0),new mt(n,Math.cos(t*=Vo)*e,Math.sin(t)*e)}function mt(t,e,n){return this instanceof mt?(this.l=+t,this.a=+e,void(this.b=+n)):arguments.length<2?t instanceof mt?new mt(t.l,t.a,t.b):t instanceof _t?pt(t.h,t.c,t.l):Tt((t=kt(t)).r,t.g,t.b):new mt(t,e,n)}function yt(t,e,n){var r=(t+16)/116,a=r+e/500,i=r-n/200;return a=vt(a)*es,r=vt(r)*ns,i=vt(i)*rs,new kt(bt(3.2404542*a-1.5371385*r-.4985314*i),bt(-.969266*a+1.8760108*r+.041556*i),bt(.0556434*a-.2040259*r+1.0572252*i))}function gt(t,e,n){return t>0?new _t(Math.atan2(n,e)*$o,Math.sqrt(e*e+n*n),t):new _t(NaN,NaN,t)}function vt(t){return t>.206893034?t*t*t:(t-4/29)/7.787037}function Mt(t){return t>.008856?Math.pow(t,1/3):7.787037*t+4/29}function bt(t){return Math.round(255*(t<=.00304?12.92*t:1.055*Math.pow(t,1/2.4)-.055))}function kt(t,e,n){return this instanceof kt?(this.r=~~t,this.g=~~e,void(this.b=~~n)):arguments.length<2?t instanceof kt?new kt(t.r,t.g,t.b):Dt(""+t,kt,ht):new kt(t,e,n)}function Lt(t){return new kt(t>>16,t>>8&255,255&t)}function wt(t){return Lt(t)+""}function xt(t){return t<16?"0"+Math.max(0,t).toString(16):Math.min(255,t).toString(16)}function Dt(t,e,n){var r,a,i,o=0,s=0,u=0;if(r=/([a-z]+)\((.*)\)/.exec(t=t.toLowerCase()))switch(a=r[2].split(","),r[1]){case"hsl":return n(parseFloat(a[0]),parseFloat(a[1])/100,parseFloat(a[2])/100);case"rgb":return e(St(a[0]),St(a[1]),St(a[2]))}return(i=os.get(t))?e(i.r,i.g,i.b):(null==t||"#"!==t.charAt(0)||isNaN(i=parseInt(t.slice(1),16))||(4===t.length?(o=(3840&i)>>4,o|=o>>4,s=240&i,s|=s>>4,u=15&i,u|=u<<4):7===t.length&&(o=(16711680&i)>>16,s=(65280&i)>>8,u=255&i)),e(o,s,u))}function Yt(t,e,n){var r,a,i=Math.min(t/=255,e/=255,n/=255),o=Math.max(t,e,n),s=o-i,u=(o+i)/2;return s?(a=u<.5?s/(o+i):s/(2-o-i),r=t==o?(e-n)/s+(e0&&u<1?0:r),new ft(r,a,u)}function Tt(t,e,n){t=At(t),e=At(e),n=At(n);var r=Mt((.4124564*t+.3575761*e+.1804375*n)/es),a=Mt((.2126729*t+.7151522*e+.072175*n)/ns);return mt(116*a-16,500*(r-a),200*(a-Mt((.0193339*t+.119192*e+.9503041*n)/rs)))}function At(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function St(t){var e=parseFloat(t);return"%"===t.charAt(t.length-1)?Math.round(2.55*e):e}function Et(t){return"function"==typeof t?t:function(){return t}}function jt(t){return function(e,n,r){return 2===arguments.length&&"function"==typeof n&&(r=n,n=null),Ct(e,n,t,r)}}function Ct(t,e,n,r){function a(){var t,e=u.status;if(!e&&Ot(u)||e>=200&&e<300||304===e){try{t=n.call(i,u)}catch(t){return void o.error.call(i,t)}o.load.call(i,t)}else o.error.call(i,u)}var i={},o=ho.dispatch("beforesend","progress","load","error"),s={},u=new XMLHttpRequest,l=null;return!this.XDomainRequest||"withCredentials"in u||!/^(http(s)?:)?\/\//.test(t)||(u=new XDomainRequest),"onload"in u?u.onload=u.onerror=a:u.onreadystatechange=function(){u.readyState>3&&a()},u.onprogress=function(t){var e=ho.event;ho.event=t;try{o.progress.call(i,u)}finally{ho.event=e}},i.header=function(t,e){return t=(t+"").toLowerCase(),arguments.length<2?s[t]:(null==e?delete s[t]:s[t]=e+"",i)},i.mimeType=function(t){return arguments.length?(e=null==t?null:t+"",i):e},i.responseType=function(t){return arguments.length?(l=t,i):l},i.response=function(t){return n=t,i},["get","post"].forEach(function(t){i[t]=function(){return i.send.apply(i,[t].concat(po(arguments)))}}),i.send=function(n,r,a){if(2===arguments.length&&"function"==typeof r&&(a=r,r=null),u.open(n,t,!0),null==e||"accept"in s||(s.accept=e+",*/*"),u.setRequestHeader)for(var c in s)u.setRequestHeader(c,s[c]);return null!=e&&u.overrideMimeType&&u.overrideMimeType(e),null!=l&&(u.responseType=l),null!=a&&i.on("error",a).on("load",function(t){a(null,t)}),o.beforesend.call(i,u),u.send(null==r?null:r),i},i.abort=function(){return u.abort(),i},ho.rebind(i,o,"on"),null==r?i:i.get(Ft(r))}function Ft(t){return 1===t.length?function(e,n){t(null==e?n:null)}:t}function Ot(t){var e=t.responseType;return e&&"text"!==e?t.response:t.responseText}function Ht(t,e,n){var r=arguments.length;r<2&&(e=0),r<3&&(n=Date.now());var a=n+e,i={c:t,t:a,n:null};return us?us.n=i:ss=i,us=i,ls||(cs=clearTimeout(cs),ls=1,ds(Pt)),i}function Pt(){var t=Nt(),e=Bt()-t;e>24?(isFinite(e)&&(clearTimeout(cs),cs=setTimeout(Pt,e)),ls=0):(ls=1,ds(Pt))}function Nt(){for(var t=Date.now(),e=ss;e;)t>=e.t&&e.c(t-e.t)&&(e.c=null),e=e.n;return t}function Bt(){for(var t,e=ss,n=1/0;e;)e.c?(e.t8?function(t){return t/n}:function(t){return t*n},symbol:t}}function zt(t){var e=t.decimal,n=t.thousands,r=t.grouping,a=t.currency,i=r&&n?function(t,e){for(var a=t.length,i=[],o=0,s=r[0],u=0;a>0&&s>0&&(u+s+1>e&&(s=Math.max(1,e-u)),i.push(t.substring(a-=s,a+s)),!((u+=s+1)>e));)s=r[o=(o+1)%r.length];return i.reverse().join(n)}:L;return function(t){var n=hs.exec(t),r=n[1]||" ",o=n[2]||">",s=n[3]||"-",u=n[4]||"",l=n[5],c=+n[6],d=n[7],f=n[8],h=n[9],_=1,p="",m="",y=!1,g=!0;switch(f&&(f=+f.substring(1)),(l||"0"===r&&"="===o)&&(l=r="0",o="="),h){case"n":d=!0,h="g";break;case"%":_=100,m="%",h="f";break;case"p":_=100,m="%",h="r";break;case"b":case"o":case"x":case"X":"#"===u&&(p="0"+h.toLowerCase());case"c":g=!1;case"d":y=!0,f=0;break;case"s":_=-1,h="r"}"$"===u&&(p=a[0],m=a[1]),"r"!=h||f||(h="g"),null!=f&&("g"==h?f=Math.max(1,Math.min(21,f)):"e"!=h&&"f"!=h||(f=Math.max(0,Math.min(20,f)))),h=_s.get(h)||Wt;var v=l&&d;return function(t){var n=m;if(y&&t%1)return"";var a=t<0||0===t&&1/t<0?(t=-t,"-"):"-"===s?"":s;if(_<0){var u=ho.formatPrefix(t,f);t=u.scale(t),n=u.symbol+m}else t*=_;t=h(t,f);var M,b,k=t.lastIndexOf(".");if(k<0){var L=g?t.lastIndexOf("e"):-1;L<0?(M=t,b=""):(M=t.substring(0,L),b=t.substring(L))}else M=t.substring(0,k),b=e+t.substring(k+1);!l&&d&&(M=i(M,1/0));var w=p.length+M.length+b.length+(v?0:a.length),x=w"===o?x+a+t:"^"===o?x.substring(0,w>>=1)+a+t+x.substring(w):a+(v?t:x+t))+n}}}function Wt(t){return t+""}function qt(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Ut(t,e,n){function r(e){var n=t(e),r=i(n,1);return e-n1)for(;o=l)return-1;if(37===(a=e.charCodeAt(s++))){if(o=e.charAt(s++),!(i=A[o in gs?e.charAt(s++):o])||(r=i(t,n,r))<0)return-1}else if(a!=n.charCodeAt(r++))return-1}return r}function r(t,e,n){k.lastIndex=0;var r=k.exec(e.slice(n));return r?(t.w=L.get(r[0].toLowerCase()),n+r[0].length):-1}function a(t,e,n){M.lastIndex=0;var r=M.exec(e.slice(n));return r?(t.w=b.get(r[0].toLowerCase()),n+r[0].length):-1}function i(t,e,n){D.lastIndex=0;var r=D.exec(e.slice(n));return r?(t.m=Y.get(r[0].toLowerCase()),n+r[0].length):-1}function o(t,e,n){w.lastIndex=0;var r=w.exec(e.slice(n));return r?(t.m=x.get(r[0].toLowerCase()),n+r[0].length):-1}function s(t,e,r){return n(t,T.c.toString(),e,r)}function u(t,e,r){return n(t,T.x.toString(),e,r)}function l(t,e,r){return n(t,T.X.toString(),e,r)}function c(t,e,n){var r=v.get(e.slice(n,n+=2).toLowerCase());return null==r?-1:(t.p=r,n)}var d=t.dateTime,f=t.date,h=t.time,_=t.periods,p=t.days,m=t.shortDays,y=t.months,g=t.shortMonths;e.utc=function(t){function n(t){try{ms=qt;var e=new ms;return e._=t,r(e)}finally{ms=Date}}var r=e(t);return n.parse=function(t){try{ms=qt;var e=r.parse(t);return e&&e._}finally{ms=Date}},n.toString=r.toString,n},e.multi=e.utc.multi=he;var v=ho.map(),M=Jt(p),b=Zt(p),k=Jt(m),L=Zt(m),w=Jt(y),x=Zt(y),D=Jt(g),Y=Zt(g);_.forEach(function(t,e){v.set(t.toLowerCase(),e)});var T={a:function(t){return m[t.getDay()]},A:function(t){return p[t.getDay()]},b:function(t){return g[t.getMonth()]},B:function(t){return y[t.getMonth()]},c:e(d),d:function(t,e){return Gt(t.getDate(),e,2)},e:function(t,e){return Gt(t.getDate(),e,2)},H:function(t,e){return Gt(t.getHours(),e,2)},I:function(t,e){return Gt(t.getHours()%12||12,e,2)},j:function(t,e){return Gt(1+ps.dayOfYear(t),e,3)},L:function(t,e){return Gt(t.getMilliseconds(),e,3)},m:function(t,e){return Gt(t.getMonth()+1,e,2)},M:function(t,e){return Gt(t.getMinutes(),e,2)},p:function(t){return _[+(t.getHours()>=12)]},S:function(t,e){return Gt(t.getSeconds(),e,2)},U:function(t,e){return Gt(ps.sundayOfYear(t),e,2)},w:function(t){return t.getDay()},W:function(t,e){return Gt(ps.mondayOfYear(t),e,2)},x:e(f),X:e(h),y:function(t,e){return Gt(t.getFullYear()%100,e,2)},Y:function(t,e){return Gt(t.getFullYear()%1e4,e,4)},Z:de,"%":function(){return"%"}},A={a:r,A:a,b:i,B:o,c:s,d:ie,e:ie,H:se,I:se,j:oe,L:ce,m:ae,M:ue,p:c,S:le,U:Xt,w:Kt,W:Qt,x:u,X:l,y:ee,Y:te,Z:ne,"%":fe};return e}function Gt(t,e,n){var r=t<0?"-":"",a=(r?-t:t)+"",i=a.length;return r+(i68?1900:2e3)}function ae(t,e,n){vs.lastIndex=0;var r=vs.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function ie(t,e,n){vs.lastIndex=0;var r=vs.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function oe(t,e,n){vs.lastIndex=0;var r=vs.exec(e.slice(n,n+3));return r?(t.j=+r[0],n+r[0].length):-1}function se(t,e,n){vs.lastIndex=0;var r=vs.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function ue(t,e,n){vs.lastIndex=0;var r=vs.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function le(t,e,n){vs.lastIndex=0;var r=vs.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function ce(t,e,n){vs.lastIndex=0;var r=vs.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function de(t){var e=t.getTimezoneOffset(),n=e>0?"-":"+",r=Lo(e)/60|0,a=Lo(e)%60;return n+Gt(r,"0",2)+Gt(a,"0",2)}function fe(t,e,n){Ms.lastIndex=0;var r=Ms.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function he(t){for(var e=t.length,n=-1;++n=0?1:-1,s=o*n,u=Math.cos(e),l=Math.sin(e),c=i*l,d=a*u+c*Math.cos(s),f=c*o*Math.sin(s);Ds.add(Math.atan2(f,d)),r=t,a=u,i=l}var e,n,r,a,i;Ys.point=function(o,s){Ys.point=t,r=(e=o)*Vo,a=Math.cos(s=(n=s)*Vo/2+zo/4),i=Math.sin(s)},Ys.lineEnd=function(){t(e,n)}}function Me(t){var e=t[0],n=t[1],r=Math.cos(n);return[r*Math.cos(e),r*Math.sin(e),Math.sin(n)]}function be(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function ke(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function Le(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function we(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function xe(t){var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}function De(t){return[Math.atan2(t[1],t[0]),ot(t[2])]}function Ye(t,e){return Lo(t[0]-e[0])=0;--s)a.point((d=c[s])[0],d[1])}else r(h.x,h.p.x,-1,a);h=h.p}h=h.o,c=h.z,_=!_}while(!h.v);a.lineEnd()}}}function He(t){if(e=t.length){for(var e,n,r=0,a=t[0];++r0){for(b||(i.polygonStart(),b=!0),i.lineStart();++o1&&2&e&&n.push(n.pop().concat(n.shift())),h.push(n.filter(Be))}var h,_,p,m=e(i),y=a.invert(r[0],r[1]),g={point:o,lineStart:u,lineEnd:l,polygonStart:function(){g.point=c,g.lineStart=d,g.lineEnd=f,h=[],_=[]},polygonEnd:function(){g.point=o,g.lineStart=u,g.lineEnd=l,h=ho.merge(h);var t=Ue(y,_);h.length?(b||(i.polygonStart(),b=!0),Oe(h,Re,t,n,i)):t&&(b||(i.polygonStart(),b=!0),i.lineStart(),n(null,null,1,i),i.lineEnd()),b&&(i.polygonEnd(),b=!1),h=_=null},sphere:function(){i.polygonStart(),i.lineStart(),n(null,null,1,i),i.lineEnd(),i.polygonEnd()}},v=Ie(),M=e(v),b=!1;return g}}function Be(t){return t.length>1}function Ie(){var t,e=[];return{lineStart:function(){e.push(t=[])},point:function(e,n){t.push([e,n])},lineEnd:D,buffer:function(){var n=e;return e=[],t=null,n},rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))}}}function Re(t,e){return((t=t.x)[0]<0?t[1]-Uo-Io:Uo-t[1])-((e=e.x)[0]<0?e[1]-Uo-Io:Uo-e[1])}function ze(t){var e,n=NaN,r=NaN,a=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(i,o){var s=i>0?zo:-zo,u=Lo(i-n);Lo(u-zo)0?Uo:-Uo),t.point(a,r),t.lineEnd(),t.lineStart(),t.point(s,r),t.point(i,r),e=0):a!==s&&u>=zo&&(Lo(n-a)Io?Math.atan((Math.sin(e)*(i=Math.cos(r))*Math.sin(n)-Math.sin(r)*(a=Math.cos(e))*Math.sin(t))/(a*i*o)):(e+r)/2}function qe(t,e,n,r){var a;if(null==t)a=n*Uo,r.point(-zo,a),r.point(0,a),r.point(zo,a),r.point(zo,0),r.point(zo,-a),r.point(0,-a),r.point(-zo,-a),r.point(-zo,0),r.point(-zo,a);else if(Lo(t[0]-e[0])>Io){var i=t[0]=0?1:-1,L=k*b,w=L>zo,x=_*v;if(Ds.add(Math.atan2(x*k*Math.sin(L),p*M+x*Math.cos(L))),i+=w?b+k*Wo:b,w^f>=n^y>=n){var D=ke(Me(d),Me(t));xe(D);var Y=ke(a,D);xe(Y);var T=(w^b>=0?-1:1)*ot(Y[2]);(r>T||r===T&&(D[0]||D[1]))&&(o+=w^b>=0?1:-1)}if(!m++)break;f=y,_=v,p=M,d=t}}return(i<-Io||ii}function n(t){var n,i,u,l,c;return{lineStart:function(){l=u=!1,c=1},point:function(d,f){var h,_=[d,f],p=e(d,f),m=o?p?0:a(d,f):p?a(d+(d<0?zo:-zo),f):0;if(!n&&(l=u=p)&&t.lineStart(),p!==u&&(h=r(n,_),(Ye(n,h)||Ye(_,h))&&(_[0]+=Io,_[1]+=Io,p=e(_[0],_[1]))),p!==u)c=0,p?(t.lineStart(),h=r(_,n),t.point(h[0],h[1])):(h=r(n,_),t.point(h[0],h[1]),t.lineEnd()),n=h;else if(s&&n&&o^p){var y;m&i||!(y=r(_,n,!0))||(c=0,o?(t.lineStart(),t.point(y[0][0],y[0][1]),t.point(y[1][0],y[1][1]),t.lineEnd()):(t.point(y[1][0],y[1][1]),t.lineEnd(),t.lineStart(),t.point(y[0][0],y[0][1])))}!p||n&&Ye(n,_)||t.point(_[0],_[1]),n=_,u=p,i=m},lineEnd:function(){u&&t.lineEnd(),n=null},clean:function(){return c|(l&&u)<<1}}}function r(t,e,n){var r=Me(t),a=Me(e),o=[1,0,0],s=ke(r,a),u=be(s,s),l=s[0],c=u-l*l;if(!c)return!n&&t;var d=i*u/c,f=-i*l/c,h=ke(o,s),_=we(o,d);Le(_,we(s,f));var p=h,m=be(_,p),y=be(p,p),g=m*m-y*(be(_,_)-1);if(!(g<0)){var v=Math.sqrt(g),M=we(p,(-m-v)/y);if(Le(M,_),M=De(M),!n)return M;var b,k=t[0],L=e[0],w=t[1],x=e[1];L0^M[1]<(Lo(M[0]-k)zo^(k<=M[0]&&M[0]<=L)){var A=we(p,(-m+v)/y);return Le(A,_),[M,De(A)]}}}function a(e,n){var r=o?t:zo-t,a=0;return e<-r?a|=1:e>r&&(a|=2),n<-r?a|=4:n>r&&(a|=8),a}var i=Math.cos(t),o=i>0,s=Lo(i)>Io;return Ne(e,n,Mn(t,6*Vo),o?[0,-t]:[-zo,t-zo])}function $e(t,e,n,r){return function(a){var i,o=a.a,s=a.b,u=o.x,l=o.y,c=s.x,d=s.y,f=0,h=1,_=c-u,p=d-l;if(i=t-u,_||!(i>0)){if(i/=_,_<0){if(i0){if(i>h)return;i>f&&(f=i)}if(i=n-u,_||!(i<0)){if(i/=_,_<0){if(i>h)return;i>f&&(f=i)}else if(_>0){if(i0)){if(i/=p,p<0){if(i0){if(i>h)return;i>f&&(f=i)}if(i=r-l,p||!(i<0)){if(i/=p,p<0){if(i>h)return;i>f&&(f=i)}else if(p>0){if(i0&&(a.a={x:u+f*_,y:l+f*p}),h<1&&(a.b={x:u+h*_,y:l+h*p}),a}}}}}}function Ge(t,e,n,r){function a(r,a){return Lo(r[0]-t)0?0:3:Lo(r[0]-n)0?2:1:Lo(r[1]-e)0?1:0:a>0?3:2}function i(t,e){return o(t.x,e.x)}function o(t,e){var n=a(t,1),r=a(e,1);return n!==r?n-r:0===n?e[1]-t[1]:1===n?t[0]-e[0]:2===n?t[1]-e[1]:e[0]-t[0]}return function(s){function u(t){for(var e=0,n=m.length,r=t[1],a=0;ar&&at(l,i,t)>0&&++e:i[1]<=r&&at(l,i,t)<0&&--e,l=i;return 0!==e}function l(i,s,u,l){var c=0,d=0;if(null==i||(c=a(i,u))!==(d=a(s,u))||o(i,s)<0^u>0)do{l.point(0===c||3===c?t:n,c>1?r:e)}while((c=(c+u+4)%4)!==d);else l.point(s[0],s[1])}function c(a,i){return t<=a&&a<=n&&e<=i&&i<=r}function d(t,e){c(t,e)&&s.point(t,e)}function f(){A.point=_,m&&m.push(y=[]),w=!0,L=!1,b=k=NaN}function h(){p&&(_(g,v),M&&L&&Y.rejoin(),p.push(Y.buffer())),A.point=d,L&&s.lineEnd()}function _(t,e){t=Math.max(-Rs,Math.min(Rs,t)),e=Math.max(-Rs,Math.min(Rs,e));var n=c(t,e);if(m&&y.push([t,e]),w)g=t,v=e,M=n,w=!1,n&&(s.lineStart(),s.point(t,e));else if(n&&L)s.point(t,e);else{var r={a:{x:b,y:k},b:{x:t,y:e}};T(r)?(L||(s.lineStart(),s.point(r.a.x,r.a.y)),s.point(r.b.x,r.b.y),n||s.lineEnd(),x=!1):n&&(s.lineStart(),s.point(t,e),x=!1)}b=t,k=e,L=n}var p,m,y,g,v,M,b,k,L,w,x,D=s,Y=Ie(),T=$e(t,e,n,r),A={point:d,lineStart:f,lineEnd:h,polygonStart:function(){s=Y,p=[],m=[],x=!0},polygonEnd:function(){s=D,p=ho.merge(p);var e=u([t,r]),n=x&&e,a=p.length;(n||a)&&(s.polygonStart(),n&&(s.lineStart(),l(null,null,1,s),s.lineEnd()),a&&Oe(p,i,e,l,s),s.polygonEnd()),p=m=y=null}};return A}}function Je(t){var e=0,n=zo/3,r=fn(t),a=r(e,n);return a.parallels=function(t){return arguments.length?r(e=t[0]*zo/180,n=t[1]*zo/180):[e/zo*180,n/zo*180]},a}function Ze(t,e){function n(t,e){var n=Math.sqrt(i-2*a*Math.sin(e))/a;return[n*Math.sin(t*=a),o-n*Math.cos(t)]}var r=Math.sin(t),a=(r+Math.sin(e))/2,i=1+r*(2*a-r),o=Math.sqrt(i)/a;return n.invert=function(t,e){var n=o-e;return[Math.atan2(t,n)/a,ot((i-(t*t+n*n)*a*a)/(2*a))]},n}function Ke(){function t(t,e){Ws+=a*t-r*e,r=t,a=e}var e,n,r,a;Gs.point=function(i,o){Gs.point=t,e=r=i,n=a=o},Gs.lineEnd=function(){t(e,n)}}function Xe(t,e){tVs&&(Vs=t),e$s&&($s=e)}function Qe(){function t(t,e){o.push("M",t,",",e,i)}function e(t,e){o.push("M",t,",",e),s.point=n}function n(t,e){o.push("L",t,",",e)}function r(){s.point=t}function a(){o.push("Z")}var i=tn(4.5),o=[],s={point:t,lineStart:function(){s.point=e},lineEnd:r,polygonStart:function(){s.lineEnd=a},polygonEnd:function(){s.lineEnd=r,s.point=t},pointRadius:function(t){return i=tn(t),s},result:function(){if(o.length){var t=o.join("");return o=[],t}}};return s}function tn(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}function en(t,e){Ss+=t,Es+=e,++js}function nn(){function t(t,r){var a=t-e,i=r-n,o=Math.sqrt(a*a+i*i);Cs+=o*(e+t)/2,Fs+=o*(n+r)/2,Os+=o,en(e=t,n=r)}var e,n;Zs.point=function(r,a){Zs.point=t,en(e=r,n=a)}}function rn(){Zs.point=en}function an(){function t(t,e){var n=t-r,i=e-a,o=Math.sqrt(n*n+i*i);Cs+=o*(r+t)/2,Fs+=o*(a+e)/2,Os+=o,o=a*t-r*e,Hs+=o*(r+t),Ps+=o*(a+e),Ns+=3*o,en(r=t,a=e)}var e,n,r,a;Zs.point=function(i,o){Zs.point=t,en(e=r=i,n=a=o)},Zs.lineEnd=function(){t(e,n)}}function on(t){function e(e,n){t.moveTo(e+o,n),t.arc(e,n,o,0,Wo)}function n(e,n){t.moveTo(e,n),s.point=r}function r(e,n){t.lineTo(e,n)}function a(){s.point=e}function i(){t.closePath()}var o=4.5,s={point:e,lineStart:function(){s.point=n},lineEnd:a,polygonStart:function(){s.lineEnd=i},polygonEnd:function(){s.lineEnd=a,s.point=e},pointRadius:function(t){return o=t,s},result:D};return s}function sn(t){function e(t){return(s?r:n)(t)}function n(e){return cn(e,function(n,r){n=t(n,r),e.point(n[0],n[1])})}function r(e){function n(n,r){n=t(n,r),e.point(n[0],n[1])}function r(){v=NaN,w.point=i,e.lineStart()}function i(n,r){var i=Me([n,r]),o=t(n,r);a(v,M,g,b,k,L,v=o[0],M=o[1],g=n,b=i[0],k=i[1],L=i[2],s,e),e.point(v,M)}function o(){w.point=n,e.lineEnd()}function u(){r(),w.point=l,w.lineEnd=c}function l(t,e){i(d=t,f=e),h=v,_=M,p=b,m=k,y=L,w.point=i}function c(){a(v,M,g,b,k,L,h,_,d,p,m,y,s,e),w.lineEnd=o,o()}var d,f,h,_,p,m,y,g,v,M,b,k,L,w={point:n,lineStart:r,lineEnd:o,polygonStart:function(){e.polygonStart(),w.lineStart=u},polygonEnd:function(){e.polygonEnd(),w.lineStart=r}};return w}function a(e,n,r,s,u,l,c,d,f,h,_,p,m,y){var g=c-e,v=d-n,M=g*g+v*v;if(M>4*i&&m--){var b=s+h,k=u+_,L=l+p,w=Math.sqrt(b*b+k*k+L*L),x=Math.asin(L/=w),D=Lo(Lo(L)-1)i||Lo((g*S+v*E)/M-.5)>.3||s*h+u*_+l*p0&&16,e):Math.sqrt(i)},e}function un(t){var e=sn(function(e,n){return t([e*$o,n*$o])});return function(t){return hn(e(t))}}function ln(t){this.stream=t}function cn(t,e){return{point:e,sphere:function(){t.sphere()},lineStart:function(){t.lineStart()},lineEnd:function(){t.lineEnd()},polygonStart:function(){t.polygonStart()},polygonEnd:function(){t.polygonEnd()}}}function dn(t){return fn(function(){return t})()}function fn(t){function e(t){return t=s(t[0]*Vo,t[1]*Vo),[t[0]*f+u,l-t[1]*f]}function n(t){return(t=s.invert((t[0]-u)/f,(l-t[1])/f))&&[t[0]*$o,t[1]*$o]}function r(){s=Ce(o=mn(y,g,v),i);var t=i(p,m);return u=h-t[0]*f,l=_+t[1]*f,a()}function a(){return c&&(c.valid=!1,c=null),e}var i,o,s,u,l,c,d=sn(function(t,e){return t=i(t,e),[t[0]*f+u,l-t[1]*f]}),f=150,h=480,_=250,p=0,m=0,y=0,g=0,v=0,M=Is,b=L,k=null,w=null;return e.stream=function(t){return c&&(c.valid=!1),c=hn(M(o,d(b(t)))),c.valid=!0,c},e.clipAngle=function(t){return arguments.length?(M=null==t?(k=t,Is):Ve((k=+t)*Vo),a()):k},e.clipExtent=function(t){return arguments.length?(w=t,b=t?Ge(t[0][0],t[0][1],t[1][0],t[1][1]):L,a()):w},e.scale=function(t){return arguments.length?(f=+t,r()):f},e.translate=function(t){return arguments.length?(h=+t[0],_=+t[1],r()):[h,_]},e.center=function(t){return arguments.length?(p=t[0]%360*Vo,m=t[1]%360*Vo,r()):[p*$o,m*$o]},e.rotate=function(t){return arguments.length?(y=t[0]%360*Vo,g=t[1]%360*Vo,v=t.length>2?t[2]%360*Vo:0,r()):[y*$o,g*$o,v*$o]},ho.rebind(e,d,"precision"),function(){return i=t.apply(this,arguments),e.invert=i.invert&&n,r()}}function hn(t){return cn(t,function(e,n){t.point(e*Vo,n*Vo)})}function _n(t,e){return[t,e]}function pn(t,e){return[t>zo?t-Wo:t<-zo?t+Wo:t,e]}function mn(t,e,n){return t?e||n?Ce(gn(t),vn(e,n)):gn(t):e||n?vn(e,n):pn}function yn(t){return function(e,n){return e+=t,[e>zo?e-Wo:e<-zo?e+Wo:e,n]}}function gn(t){var e=yn(t);return e.invert=yn(-t),e}function vn(t,e){function n(t,e){var n=Math.cos(e),s=Math.cos(t)*n,u=Math.sin(t)*n,l=Math.sin(e),c=l*r+s*a;return[Math.atan2(u*i-c*o,s*r-l*a),ot(c*i+u*o)]}var r=Math.cos(t),a=Math.sin(t),i=Math.cos(e),o=Math.sin(e);return n.invert=function(t,e){var n=Math.cos(e),s=Math.cos(t)*n,u=Math.sin(t)*n,l=Math.sin(e),c=l*i-u*o;return[Math.atan2(u*i+l*o,s*r+c*a),ot(c*r-s*a)]},n}function Mn(t,e){var n=Math.cos(t),r=Math.sin(t);return function(a,i,o,s){var u=o*e;null!=a?(a=bn(n,a),i=bn(n,i),(o>0?ai)&&(a+=o*Wo)):(a=t+o*Wo,i=t-.5*u);for(var l,c=a;o>0?c>i:c0?e<-Uo+Io&&(e=-Uo+Io):e>Uo-Io&&(e=Uo-Io);var n=o/Math.pow(a(e),i);return[n*Math.sin(i*t),o-n*Math.cos(i*t)]}var r=Math.cos(t),a=function(t){return Math.tan(zo/4+t/2)},i=t===e?Math.sin(t):Math.log(r/Math.cos(e))/Math.log(a(e)/a(t)),o=r*Math.pow(a(t),i)/i;return i?(n.invert=function(t,e){var n=o-e,r=rt(i)*Math.sqrt(t*t+n*n);return[Math.atan2(t,n)/i,2*Math.atan(Math.pow(o/r,1/i))-Uo]},n):En}function Sn(t,e){function n(t,e){var n=i-e;return[n*Math.sin(a*t),i-n*Math.cos(a*t)]}var r=Math.cos(t),a=t===e?Math.sin(t):(r-Math.cos(e))/(e-t),i=r/a+t;return Lo(a)1&&at(t[n[r-2]],t[n[r-1]],t[a])<=0;)--r;n[r++]=a}return n.slice(0,r)}function Pn(t,e){return t[0]-e[0]||t[1]-e[1]}function Nn(t,e,n){return(n[0]-e[0])*(t[1]-e[1])<(n[1]-e[1])*(t[0]-e[0])}function Bn(t,e,n,r){var a=t[0],i=n[0],o=e[0]-a,s=r[0]-i,u=t[1],l=n[1],c=e[1]-u,d=r[1]-l,f=(s*(u-l)-d*(a-i))/(d*o-s*c);return[a+f*o,u+f*c]}function In(t){var e=t[0],n=t[t.length-1];return!(e[0]-n[0]||e[1]-n[1])}function Rn(){ur(this),this.edge=this.site=this.circle=null}function zn(t){var e=cu.pop()||new Rn;return e.site=t,e}function Wn(t){Qn(t),su.remove(t),cu.push(t),ur(t)}function qn(t){var e=t.circle,n=e.x,r=e.cy,a={x:n,y:r},i=t.P,o=t.N,s=[t];Wn(t);for(var u=i;u.circle&&Lo(n-u.circle.x)Io)s=s.L;else{if(!((a=i-$n(s,o))>Io)){r>-Io?(e=s.P,n=s):a>-Io?(e=s,n=s.N):e=n=s;break}if(!s.R){e=s;break}s=s.R}var u=zn(t);if(su.insert(e,u),e||n){if(e===n)return Qn(e),n=zn(e.site),su.insert(u,n),u.edge=n.edge=rr(e.site,u.site),Xn(e),void Xn(n);if(!n)return void(u.edge=rr(e.site,u.site));Qn(e),Qn(n);var l=e.site,c=l.x,d=l.y,f=t.x-c,h=t.y-d,_=n.site,p=_.x-c,m=_.y-d,y=2*(f*m-h*p),g=f*f+h*h,v=p*p+m*m,M={x:(m*g-h*v)/y+c,y:(f*v-p*g)/y+d};ir(n.edge,l,_,M),u.edge=rr(l,t,null,M),n.edge=rr(t,_,null,M),Xn(e),Xn(n)}}function Vn(t,e){var n=t.site,r=n.x,a=n.y,i=a-e;if(!i)return r;var o=t.P;if(!o)return-1/0;n=o.site;var s=n.x,u=n.y,l=u-e;if(!l)return s;var c=s-r,d=1/i-1/l,f=c/l;return d?(-f+Math.sqrt(f*f-2*d*(c*c/(-2*l)-u+l/2+a-i/2)))/d+r:(r+s)/2}function $n(t,e){var n=t.N;if(n)return Vn(n,e);var r=t.site;return r.y===e?r.x:1/0}function Gn(t){this.site=t,this.edges=[]}function Jn(t){for(var e,n,r,a,i,o,s,u,l,c,d=t[0][0],f=t[1][0],h=t[0][1],_=t[1][1],p=ou,m=p.length;m--;)if((i=p[m])&&i.prepare())for(s=i.edges,u=s.length,o=0;oIo||Lo(a-n)>Io)&&(s.splice(o,0,new or(ar(i.site,c,Lo(r-d)Io?{x:d,y:Lo(e-d)Io?{x:Lo(n-_)Io?{x:f,y:Lo(e-f)Io?{x:Lo(n-h)=-Ro)){var h=u*u+l*l,_=c*c+d*d,p=(d*h-l*_)/f,m=(u*_-c*h)/f,d=m+s,y=du.pop()||new Kn;y.arc=t,y.site=a,y.x=p+o,y.y=d+Math.sqrt(p*p+m*m),y.cy=d,t.circle=y;for(var g=null,v=lu._;v;)if(y.y=s)return;if(f>_){if(i){if(i.y>=l)return}else i={x:m,y:u};n={x:m,y:l}}else{if(i){if(i.y1)if(f>_){if(i){if(i.y>=l)return}else i={x:(u-a)/r,y:u};n={x:(l-a)/r,y:l}}else{if(i){if(i.y=s)return}else i={x:o,y:r*o+a};n={x:s,y:r*s+a}}else{if(i){if(i.xi||d>o||f=M,L=n>=b,w=L<<1|k,x=w+4;wi&&(a=e.slice(i,a),s[o]?s[o]+=a:s[++o]=a),(n=n[0])===(r=r[0])?s[o]?s[o]+=r:s[++o]=r:(s[++o]=null,u.push({i:o,x:kr(n,r)})),i=_u.lastIndex;return i=0&&!(n=ho.interpolators[r](t,e)););return n}function xr(t,e){var n,r=[],a=[],i=t.length,o=e.length,s=Math.min(t.length,e.length);for(n=0;n=1?1:t(e)}}function Yr(t){return function(e){return 1-t(1-e)}}function Tr(t){return function(e){return.5*(e<.5?t(2*e):2-t(2-2*e))}}function Ar(t){return t*t}function Sr(t){return t*t*t}function Er(t){if(t<=0)return 0;if(t>=1)return 1;var e=t*t,n=e*t;return 4*(t<.5?n:3*(t-e)+n-.75)}function jr(t){return function(e){return Math.pow(e,t)}}function Cr(t){return 1-Math.cos(t*Uo)}function Fr(t){return Math.pow(2,10*(t-1))}function Or(t){return 1-Math.sqrt(1-t*t)}function Hr(t,e){var n;return arguments.length<2&&(e=.45),arguments.length?n=e/Wo*Math.asin(1/t):(t=1,n=e/4),function(r){return 1+t*Math.pow(2,-10*r)*Math.sin((r-n)*Wo/e)}}function Pr(t){return t||(t=1.70158),function(e){return e*e*((t+1)*e-t)}}function Nr(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}function Br(t,e){t=ho.hcl(t),e=ho.hcl(e);var n=t.h,r=t.c,a=t.l,i=e.h-n,o=e.c-r,s=e.l-a;return isNaN(o)&&(o=0,r=isNaN(r)?e.c:r),isNaN(i)?(i=0,n=isNaN(n)?e.h:n):i>180?i-=360:i<-180&&(i+=360),function(t){return pt(n+i*t,r+o*t,a+s*t)+""}}function Ir(t,e){t=ho.hsl(t),e=ho.hsl(e);var n=t.h,r=t.s,a=t.l,i=e.h-n,o=e.s-r,s=e.l-a;return isNaN(o)&&(o=0,r=isNaN(r)?e.s:r),isNaN(i)?(i=0,n=isNaN(n)?e.h:n):i>180?i-=360:i<-180&&(i+=360),function(t){return ht(n+i*t,r+o*t,a+s*t)+""}}function Rr(t,e){t=ho.lab(t),e=ho.lab(e);var n=t.l,r=t.a,a=t.b,i=e.l-n,o=e.a-r,s=e.b-a;return function(t){return yt(n+i*t,r+o*t,a+s*t)+""}}function zr(t,e){return e-=t,function(n){return Math.round(t+e*n)}}function Wr(t){var e=[t.a,t.b],n=[t.c,t.d],r=Ur(e),a=qr(e,n),i=Ur(Vr(n,e,-a))||0;e[0]*n[1]180?e+=360:e-t>180&&(t+=360),r.push({i:n.push($r(n)+"rotate(",null,")")-2,x:kr(t,e)})):e&&n.push($r(n)+"rotate("+e+")")}function Zr(t,e,n,r){t!==e?r.push({i:n.push($r(n)+"skewX(",null,")")-2,x:kr(t,e)}):e&&n.push($r(n)+"skewX("+e+")")}function Kr(t,e,n,r){if(t[0]!==e[0]||t[1]!==e[1]){var a=n.push($r(n)+"scale(",null,",",null,")");r.push({i:a-4,x:kr(t[0],e[0])},{i:a-2,x:kr(t[1],e[1])})}else 1===e[0]&&1===e[1]||n.push($r(n)+"scale("+e+")")}function Xr(t,e){var n=[],r=[];return t=ho.transform(t),e=ho.transform(e),Gr(t.translate,e.translate,n,r),Jr(t.rotate,e.rotate,n,r),Zr(t.skew,e.skew,n,r),Kr(t.scale,e.scale,n,r),t=e=null,function(t){for(var e,a=-1,i=r.length;++a=0;)n.push(a[r])}function da(t,e){for(var n=[t],r=[];null!=(t=n.pop());)if(r.push(t),(i=t.children)&&(a=i.length))for(var a,i,o=-1;++oa&&(r=n,a=e);return r}function ka(t){return t.reduce(La,0)}function La(t,e){return t+e[1]}function wa(t,e){return xa(t,Math.ceil(Math.log(e.length)/Math.LN2+1))}function xa(t,e){for(var n=-1,r=+t[0],a=(t[1]-r)/e,i=[];++n<=e;)i[n]=a*n+r;return i}function Da(t){return[ho.min(t),ho.max(t)]}function Ya(t,e){return t.value-e.value}function Ta(t,e){var n=t._pack_next;t._pack_next=e,e._pack_prev=t,e._pack_next=n,n._pack_prev=e}function Aa(t,e){t._pack_next=e,e._pack_prev=t}function Sa(t,e){var n=e.x-t.x,r=e.y-t.y,a=t.r+e.r;return.999*a*a>n*n+r*r}function Ea(t){function e(t){c=Math.min(t.x-t.r,c),d=Math.max(t.x+t.r,d),f=Math.min(t.y-t.r,f),h=Math.max(t.y+t.r,h)}if((n=t.children)&&(l=n.length)){var n,r,a,i,o,s,u,l,c=1/0,d=-1/0,f=1/0,h=-1/0;if(n.forEach(ja),r=n[0],r.x=-r.r,r.y=0,e(r),l>1&&(a=n[1],a.x=a.r,a.y=0,e(a),l>2))for(i=n[2],Oa(r,a,i),e(i),Ta(r,i),r._pack_prev=i,Ta(i,a),a=r._pack_next,o=3;o=0;)e=a[i],e.z+=n,e.m+=n,n+=e.s+(r+=e.c)}function Ra(t,e,n){return t.a.parent===e.parent?t.a:n}function za(t){return 1+ho.max(t,function(t){return t.y})}function Wa(t){return t.reduce(function(t,e){return t+e.x},0)/t.length}function qa(t){var e=t.children;return e&&e.length?qa(e[0]):t}function Ua(t){var e,n=t.children;return n&&(e=n.length)?Ua(n[e-1]):t}function Va(t){return{x:t.x,y:t.y,dx:t.dx,dy:t.dy}}function $a(t,e){var n=t.x+e[3],r=t.y+e[0],a=t.dx-e[1]-e[3],i=t.dy-e[0]-e[2];return a<0&&(n+=a/2,a=0),i<0&&(r+=i/2,i=0),{x:n,y:r,dx:a,dy:i}}function Ga(t){var e=t[0],n=t[t.length-1];return e2?Qa:Za,u=r?ta:Qr;return o=a(t,e,u,n),s=a(e,t,u,wr),i}function i(t){return o(t)}var o,s;return i.invert=function(t){return s(t)},i.domain=function(e){return arguments.length?(t=e.map(Number),a()):t},i.range=function(t){return arguments.length?(e=t,a()):e},i.rangeRound=function(t){return i.range(t).interpolate(zr)},i.clamp=function(t){return arguments.length?(r=t,a()):r},i.interpolate=function(t){return arguments.length?(n=t,a()):n},i.ticks=function(e){return ai(t,e)},i.tickFormat=function(e,n){return ii(t,e,n)},i.nice=function(e){return ni(t,e),a()},i.copy=function(){return ti(t,e,n,r)},a()}function ei(t,e){return ho.rebind(t,e,"range","rangeRound","interpolate","clamp")}function ni(t,e){return Ka(t,Xa(ri(t,e)[2])),Ka(t,Xa(ri(t,e)[2])),t}function ri(t,e){null==e&&(e=10);var n=Ga(t),r=n[1]-n[0],a=Math.pow(10,Math.floor(Math.log(r/e)/Math.LN10)),i=e/r*a;return i<=.15?a*=10:i<=.35?a*=5:i<=.75&&(a*=2),n[0]=Math.ceil(n[0]/a)*a,n[1]=Math.floor(n[1]/a)*a+.5*a,n[2]=a,n}function ai(t,e){return ho.range.apply(ho,ri(t,e))}function ii(t,e,n){var r=ri(t,e);if(n){var a=hs.exec(n);if(a.shift(),"s"===a[8]){var i=ho.formatPrefix(Math.max(Lo(r[0]),Lo(r[1])));return a[7]||(a[7]="."+oi(i.scale(r[2]))),a[8]="f",n=ho.format(a.join("")),function(t){return n(i.scale(t))+i.symbol}}a[7]||(a[7]="."+si(a[8],r)),n=a.join("")}else n=",."+oi(r[2])+"f";return ho.format(n)}function oi(t){return-Math.floor(Math.log(t)/Math.LN10+.01)}function si(t,e){var n=oi(e[2]);return t in Du?Math.abs(n-oi(Math.max(Lo(e[0]),Lo(e[1]))))+ +("e"!==t):n-2*("%"===t)}function ui(t,e,n,r){function a(t){return(n?Math.log(t<0?0:t):-Math.log(t>0?0:-t))/Math.log(e)}function i(t){return n?Math.pow(e,t):-Math.pow(e,-t)}function o(e){return t(a(e))}return o.invert=function(e){return i(t.invert(e))},o.domain=function(e){return arguments.length?(n=e[0]>=0,t.domain((r=e.map(Number)).map(a)),o):r},o.base=function(n){return arguments.length?(e=+n,t.domain(r.map(a)),o):e},o.nice=function(){var e=Ka(r.map(a),n?Math:Tu);return t.domain(e),r=e.map(i),o},o.ticks=function(){var t=Ga(r),o=[],s=t[0],u=t[1],l=Math.floor(a(s)),c=Math.ceil(a(u)),d=e%1?2:e;if(isFinite(c-l)){if(n){for(;l0;f--)o.push(i(l)*f);for(l=0;o[l]u;c--);o=o.slice(l,c)}return o},o.tickFormat=function(t,n){if(!arguments.length)return Yu;arguments.length<2?n=Yu:"function"!=typeof n&&(n=ho.format(n));var r=Math.max(1,e*t/o.ticks().length);return function(t){var o=t/i(Math.round(a(t)));return o*e0?a[n-1]:t[0],n0?0:1}function Li(t,e,n,r,a){var i=t[0]-e[0],o=t[1]-e[1],s=(a?r:-r)/Math.sqrt(i*i+o*o),u=s*o,l=-s*i,c=t[0]+u,d=t[1]+l,f=e[0]+u,h=e[1]+l,_=(c+f)/2,p=(d+h)/2,m=f-c,y=h-d,g=m*m+y*y,v=n-r,M=c*h-f*d,b=(y<0?-1:1)*Math.sqrt(Math.max(0,v*v*g-M*M)),k=(M*y-m*b)/g,L=(-M*m-y*b)/g,w=(M*y+m*b)/g,x=(-M*m+y*b)/g,D=k-_,Y=L-p,T=w-_,A=x-p;return D*D+Y*Y>T*T+A*A&&(k=w,L=x),[[k-u,L-l],[k*n/v,L*n/v]]}function wi(t){function e(e){function o(){l.push("M",i(t(c),s))}for(var u,l=[],c=[],d=-1,f=e.length,h=Et(n),_=Et(r);++d1?t.join("L"):t+"Z"}function Di(t){return t.join("L")+"Z"}function Yi(t){for(var e=0,n=t.length,r=t[0],a=[r[0],",",r[1]];++e1&&a.push("H",r[0]),a.join("")}function Ti(t){for(var e=0,n=t.length,r=t[0],a=[r[0],",",r[1]];++e1){s=e[1],i=t[u],u++,r+="C"+(a[0]+o[0])+","+(a[1]+o[1])+","+(i[0]-s[0])+","+(i[1]-s[1])+","+i[0]+","+i[1];for(var l=2;l9&&(a=3*e/Math.sqrt(a),o[s]=a*n,o[s+1]=a*r));for(s=-1;++s<=u;)a=(t[Math.min(u,s+1)][0]-t[Math.max(0,s-1)][0])/(6*(1+o[s]*o[s])),i.push([a||0,o[s]*a||0]);return i}function qi(t){return t.length<3?xi(t):t[0]+Ci(t,Wi(t))}function Ui(t){for(var e,n,r,a=-1,i=t.length;++a0;)f[--s].call(t,o);if(i>=1)return p.event&&p.event.end.call(t,t.__data__,e),--h.count?delete h[r]:delete t[n],1}var u,l,c,d,f,h=t[n]||(t[n]={active:0,count:0}),p=h[r];p||(u=a.time,l=Ht(i,0,u),p=h[r]={tween:new _,time:u,timer:l,delay:a.delay,duration:a.duration,ease:a.ease,index:e},a=null,++h.count)}function io(t,e,n){t.attr("transform",function(t){var r=e(t);return"translate("+(isFinite(r)?r:n(t))+",0)"})}function oo(t,e,n){t.attr("transform",function(t){var r=e(t);return"translate(0,"+(isFinite(r)?r:n(t))+")"})}function so(t){return t.toISOString()}function uo(t,e,n){function r(e){return t(e)}function a(t,n){var r=t[1]-t[0],a=r/n,i=ho.bisect(Qu,a);return i==Qu.length?[e.year,ri(t.map(function(t){return t/31536e6}),n)[2]]:i?e[a/Qu[i-1]1?{floor:function(e){for(;n(e=t.floor(e));)e=lo(e-1);return e},ceil:function(e){for(;n(e=t.ceil(e));)e=lo(+e+1);return e}}:t))},r.ticks=function(t,e){var n=Ga(r.domain()),i=null==t?a(n,10):"number"==typeof t?a(n,t):!t.range&&[{range:t},e];return i&&(t=i[0],e=i[1]),t.range(n[0],lo(+n[1]+1),e<1?1:e)},r.tickFormat=function(){return n},r.copy=function(){return uo(t.copy(),e,n)},ei(r,t)}function lo(t){return new Date(t)}function co(t){return JSON.parse(t.responseText)}function fo(t){var e=mo.createRange();return e.selectNode(mo.body),e.createContextualFragment(t.responseText)}var ho={version:"3.5.17"},_o=[].slice,po=function(t){return _o.call(t)},mo=this.document;if(mo)try{po(mo.documentElement.childNodes)[0].nodeType}catch(t){po=function(t){for(var e=t.length,n=new Array(e);e--;)n[e]=t[e];return n}}if(Date.now||(Date.now=function(){return+new Date}),mo)try{mo.createElement("DIV").style.setProperty("opacity",0,"")}catch(t){var yo=this.Element.prototype,go=yo.setAttribute,vo=yo.setAttributeNS,Mo=this.CSSStyleDeclaration.prototype,bo=Mo.setProperty;yo.setAttribute=function(t,e){go.call(this,t,e+"")},yo.setAttributeNS=function(t,e,n){vo.call(this,t,e,n+"")},Mo.setProperty=function(t,e,n){bo.call(this,t,e+"",n)}}ho.ascending=s,ho.descending=function(t,e){return et?1:e>=t?0:NaN},ho.min=function(t,e){var n,r,a=-1,i=t.length;if(1===arguments.length){for(;++a=r){n=r;break}for(;++ar&&(n=r)}else{for(;++a=r){n=r;break}for(;++ar&&(n=r)}return n},ho.max=function(t,e){var n,r,a=-1,i=t.length;if(1===arguments.length){for(;++a=r){n=r;break}for(;++an&&(n=r)}else{for(;++a=r){n=r;break}for(;++an&&(n=r)}return n},ho.extent=function(t,e){var n,r,a,i=-1,o=t.length;if(1===arguments.length){for(;++i=r){n=a=r;break}for(;++ir&&(n=r),a=r){n=a=r;break}for(;++ir&&(n=r),a1)return o/(c-1)},ho.deviation=function(){var t=ho.variance.apply(this,arguments);return t?Math.sqrt(t):t};var ko=c(s);ho.bisectLeft=ko.left,ho.bisect=ho.bisectRight=ko.right,ho.bisector=function(t){return c(1===t.length?function(e,n){return s(t(e),n)}:t)},ho.shuffle=function(t,e,n){(i=arguments.length)<3&&(n=t.length,i<2&&(e=0));for(var r,a,i=n-e;i;)a=Math.random()*i--|0,r=t[i+e],t[i+e]=t[a+e],t[a+e]=r;return t},ho.permute=function(t,e){for(var n=e.length,r=new Array(n);n--;)r[n]=t[e[n]];return r},ho.pairs=function(t){for(var e=0,n=t.length-1,r=t[0],a=new Array(n<0?0:n);e=0;)for(r=t[a],e=r.length;--e>=0;)n[--o]=r[e];return n};var Lo=Math.abs;ho.range=function(t,e,n){if(arguments.length<3&&(n=1,arguments.length<2&&(e=t,t=0)),(e-t)/n==1/0)throw new Error("infinite range");var r,a=[],i=f(Lo(n)),o=-1;if(t*=i,e*=i,n*=i,n<0)for(;(r=t+n*++o)>e;)a.push(r/i);else for(;(r=t+n*++o)=i.length)return r?r.call(a,o):n?o.sort(n):o;for(var u,l,c,d,f=-1,h=o.length,p=i[s++],m=new _;++f=i.length)return t;var r=[],a=o[n++];return t.forEach(function(t,a){r.push({key:t,values:e(a,n)})}),a?r.sort(function(t,e){return a(t.key,e.key)}):r}var n,r,a={},i=[],o=[];return a.map=function(e,n){return t(n,e,0)},a.entries=function(n){return e(t(ho.map,n,0),0)},a.key=function(t){return i.push(t),a},a.sortKeys=function(t){return o[i.length-1]=t,a},a.sortValues=function(t){return n=t,a},a.rollup=function(t){return r=t,a},a},ho.set=function(t){var e=new k;if(t)for(var n=0,r=t.length;n=0&&(r=t.slice(n+1),t=t.slice(0,n)),t)return arguments.length<2?this[t].on(r):this[t].on(r,e);if(2===arguments.length){if(null==e)for(t in this)this.hasOwnProperty(t)&&this[t].on(r,null);return this}},ho.event=null,ho.requote=function(t){return t.replace(Yo,"\\$&")};var Yo=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,To={}.__proto__?function(t,e){t.__proto__=e}:function(t,e){for(var n in e)t[n]=e[n]},Ao=function(t,e){return e.querySelector(t)},So=function(t,e){return e.querySelectorAll(t)},Eo=function(t,e){var n=t.matches||t[x(t,"matchesSelector")];return(Eo=function(t,e){return n.call(t,e)})(t,e)};"function"==typeof Sizzle&&(Ao=function(t,e){return Sizzle(t,e)[0]||null},So=Sizzle,Eo=Sizzle.matchesSelector),ho.selection=function(){return ho.select(mo.documentElement)};var jo=ho.selection.prototype=[];jo.select=function(t){var e,n,r,a,i=[];t=C(t);for(var o=-1,s=this.length;++o=0&&"xmlns"!==(n=t.slice(0,e))&&(t=t.slice(e+1)),Fo.hasOwnProperty(n)?{space:Fo[n],local:t}:t}},jo.attr=function(t,e){if(arguments.length<2){if("string"==typeof t){var n=this.node();return t=ho.ns.qualify(t),t.local?n.getAttributeNS(t.space,t.local):n.getAttribute(t)}for(e in t)this.each(O(e,t[e]));return this}return this.each(O(t,e))},jo.classed=function(t,e){if(arguments.length<2){if("string"==typeof t){var n=this.node(),r=(t=N(t)).length,a=-1;if(e=n.classList){for(;++a=0;)(n=r[a])&&(i&&i!==n.nextSibling&&i.parentNode.insertBefore(n,i),i=n);return this},jo.sort=function(t){t=$.apply(this,arguments);for(var e=-1,n=this.length;++e0&&(e=e.transition().duration(Y)),e.call(t.event)}function s(){b&&b.domain(M.range().map(function(t){return(t-w.x)/w.k}).map(M.invert)),L&&L.domain(k.range().map(function(t){return(t-w.y)/w.k}).map(k.invert))}function u(t){T++||t({type:"zoomstart"})}function l(t){s(),t({type:"zoom",scale:w.k,translate:[w.x,w.y]})}function c(t){--T||(t({type:"zoomend"}),m=null)}function d(){function t(){s=1,a(ho.mouse(r),f),l(i)}function n(){d.on(j,null).on(C,null),h(s),c(i)}var r=this,i=O.of(r,arguments),s=0,d=ho.select(o(r)).on(j,t).on(C,n),f=e(ho.mouse(r)),h=tt(r);Wu.call(r),u(i)}function f(){function t(){var t=ho.touches(_);return h=w.k,t.forEach(function(t){t.identifier in m&&(m[t.identifier]=e(t))}),t}function n(){var e=ho.event.target;ho.select(e).on(M,o).on(b,s),k.push(e);for(var n=ho.event.changedTouches,r=0,a=n.length;r1){var c=u[0],d=u[1],f=c[0]-d[0],h=c[1]-d[1];y=f*f+h*h}}function o(){var t,e,n,i,o=ho.touches(_);Wu.call(_);for(var s=0,u=o.length;s=l)return o;if(a)return a=!1,i;var e=c;if(34===t.charCodeAt(e)){for(var n=e;n++=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,_s=ho.map({b:function(t){return t.toString(2)},c:function(t){return String.fromCharCode(t)},o:function(t){return t.toString(8)},x:function(t){return t.toString(16)},X:function(t){return t.toString(16).toUpperCase()},g:function(t,e){return t.toPrecision(e)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},r:function(t,e){return(t=ho.round(t,It(t,e))).toFixed(Math.max(0,Math.min(20,It(t*(1+1e-15),e))))}}),ps=ho.time={},ms=Date;qt.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){ys.setUTCDate.apply(this._,arguments)},setDay:function(){ys.setUTCDay.apply(this._,arguments)},setFullYear:function(){ys.setUTCFullYear.apply(this._,arguments)},setHours:function(){ys.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){ys.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){ys.setUTCMinutes.apply(this._,arguments)},setMonth:function(){ys.setUTCMonth.apply(this._,arguments)},setSeconds:function(){ys.setUTCSeconds.apply(this._,arguments)},setTime:function(){ys.setTime.apply(this._,arguments)}};var ys=Date.prototype;ps.year=Ut(function(t){return t=ps.day(t),t.setMonth(0,1),t},function(t,e){t.setFullYear(t.getFullYear()+e)},function(t){return t.getFullYear()}),ps.years=ps.year.range,ps.years.utc=ps.year.utc.range,ps.day=Ut(function(t){var e=new ms(2e3,0);return e.setFullYear(t.getFullYear(),t.getMonth(),t.getDate()),e},function(t,e){t.setDate(t.getDate()+e)},function(t){return t.getDate()-1}),ps.days=ps.day.range,ps.days.utc=ps.day.utc.range,ps.dayOfYear=function(t){var e=ps.year(t);return Math.floor((t-e-6e4*(t.getTimezoneOffset()-e.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(t,e){e=7-e;var n=ps[t]=Ut(function(t){return(t=ps.day(t)).setDate(t.getDate()-(t.getDay()+e)%7),t},function(t,e){t.setDate(t.getDate()+7*Math.floor(e))},function(t){var n=ps.year(t).getDay();return Math.floor((ps.dayOfYear(t)+(n+e)%7)/7)-(n!==e)});ps[t+"s"]=n.range,ps[t+"s"].utc=n.utc.range,ps[t+"OfYear"]=function(t){var n=ps.year(t).getDay();return Math.floor((ps.dayOfYear(t)+(n+e)%7)/7)}}),ps.week=ps.sunday,ps.weeks=ps.sunday.range,ps.weeks.utc=ps.sunday.utc.range,ps.weekOfYear=ps.sundayOfYear;var gs={"-":"",_:" ",0:"0"},vs=/^\s*\d+/,Ms=/^%/;ho.locale=function(t){return{numberFormat:zt(t),timeFormat:$t(t)}};var bs=ho.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ho.format=bs.numberFormat,ho.geo={},_e.prototype={s:0,t:0,add:function(t){pe(t,this.t,ks),pe(ks.s,this.s,this),this.s?this.t+=ks.t:this.s=ks.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ks=new _e;ho.geo.stream=function(t,e){t&&Ls.hasOwnProperty(t.type)?Ls[t.type](t,e):me(t,e)};var Ls={Feature:function(t,e){me(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,a=n.length;++rh&&(h=e)}function e(e,n){var r=Me([e*Vo,n*Vo]);if(y){var a=ke(y,r),i=[a[1],-a[0],0],o=ke(i,a);xe(o),o=De(o);var u=e-_,l=u>0?1:-1,p=o[0]*$o*l,m=Lo(u)>180;if(m^(l*_h&&(h=g)}else if(p=(p+360)%360-180,m^(l*_h&&(h=n);m?e<_?s(c,e)>s(c,f)&&(f=e):s(e,f)>s(c,f)&&(c=e):f>=c?(ef&&(f=e)):e>_?s(c,e)>s(c,f)&&(f=e):s(e,f)>s(c,f)&&(c=e)}else t(e,n);y=r,_=e}function n(){b.point=e}function r(){M[0]=c,M[1]=f,b.point=t,y=null}function a(t,n){if(y){var r=t-_;g+=Lo(r)>180?r+(r>0?360:-360):r}else p=t,m=n;Ys.point(t,n),e(t,n)}function i(){Ys.lineStart()}function o(){a(p,m),Ys.lineEnd(),Lo(g)>Io&&(c=-(f=180)),M[0]=c,M[1]=f,y=null}function s(t,e){return(e-=t)<0?e+360:e}function u(t,e){return t[0]-e[0]}function l(t,e){return e[0]<=e[1]?e[0]<=t&&t<=e[1]:tIo?h=90:g<-Io&&(d=-90),M[0]=c,M[1]=f}};return function(t){h=f=-(c=d=1/0),v=[],ho.geo.stream(t,b);var e=v.length;if(e){v.sort(u);for(var n,r=1,a=v[0],i=[a];rs(a[0],a[1])&&(a[1]=n[1]),s(n[0],a[1])>s(a[0],a[1])&&(a[0]=n[0])):i.push(a=n);for(var o,n,_=-1/0,e=i.length-1,r=0,a=i[e];r<=e;a=n,++r)n=i[r],(o=s(a[1],n[0]))>_&&(_=o,c=n[0],f=a[1])}return v=M=null,c===1/0||d===1/0?[[NaN,NaN],[NaN,NaN]]:[[c,d],[f,h]]}}(),ho.geo.centroid=function(t){Ts=As=Ss=Es=js=Cs=Fs=Os=Hs=Ps=Ns=0,ho.geo.stream(t,Bs);var e=Hs,n=Ps,r=Ns,a=e*e+n*n+r*r;return a=.12&&a<.234&&r>=-.425&&r<-.214?o:a>=.166&&a<.234&&r>=-.214&&r<-.115?s:i).invert(t)},t.stream=function(t){var e=i.stream(t),n=o.stream(t),r=s.stream(t);return{point:function(t,a){e.point(t,a),n.point(t,a),r.point(t,a)},sphere:function(){e.sphere(),n.sphere(),r.sphere()},lineStart:function(){e.lineStart(),n.lineStart(),r.lineStart()},lineEnd:function(){e.lineEnd(),n.lineEnd(),r.lineEnd()},polygonStart:function(){e.polygonStart(),n.polygonStart(),r.polygonStart()},polygonEnd:function(){e.polygonEnd(),n.polygonEnd(),r.polygonEnd()}}},t.precision=function(e){return arguments.length?(i.precision(e),o.precision(e),s.precision(e),t):i.precision()},t.scale=function(e){return arguments.length?(i.scale(e),o.scale(.35*e),s.scale(e),t.translate(i.translate())):i.scale()},t.translate=function(e){if(!arguments.length)return i.translate();var l=i.scale(),c=+e[0],d=+e[1];return n=i.translate(e).clipExtent([[c-.455*l,d-.238*l],[c+.455*l,d+.238*l]]).stream(u).point,r=o.translate([c-.307*l,d+.201*l]).clipExtent([[c-.425*l+Io,d+.12*l+Io],[c-.214*l-Io,d+.234*l-Io]]).stream(u).point,a=s.translate([c-.205*l,d+.212*l]).clipExtent([[c-.214*l+Io,d+.166*l+Io],[c-.115*l-Io,d+.234*l-Io]]).stream(u).point,t},t.scale(1070)};var zs,Ws,qs,Us,Vs,$s,Gs={point:D,lineStart:D,lineEnd:D,polygonStart:function(){Ws=0,Gs.lineStart=Ke},polygonEnd:function(){Gs.lineStart=Gs.lineEnd=Gs.point=D,zs+=Lo(Ws/2)}},Js={point:Xe,lineStart:D,lineEnd:D,polygonStart:D,polygonEnd:D},Zs={point:en,lineStart:nn,lineEnd:rn,polygonStart:function(){Zs.lineStart=an},polygonEnd:function(){Zs.point=en,Zs.lineStart=nn,Zs.lineEnd=rn}};ho.geo.path=function(){function t(t){return t&&("function"==typeof s&&i.pointRadius(+s.apply(this,arguments)),o&&o.valid||(o=a(i)),ho.geo.stream(t,o)),i.result()}function e(){return o=null,t}var n,r,a,i,o,s=4.5;return t.area=function(t){return zs=0,ho.geo.stream(t,a(Gs)),zs},t.centroid=function(t){return Ss=Es=js=Cs=Fs=Os=Hs=Ps=Ns=0,ho.geo.stream(t,a(Zs)),Ns?[Hs/Ns,Ps/Ns]:Os?[Cs/Os,Fs/Os]:js?[Ss/js,Es/js]:[NaN,NaN]},t.bounds=function(t){return Vs=$s=-(qs=Us=1/0),ho.geo.stream(t,a(Js)),[[qs,Us],[Vs,$s]]},t.projection=function(t){return arguments.length?(a=(n=t)?t.stream||un(t):L,e()):n},t.context=function(t){return arguments.length?(i=null==(r=t)?new Qe:new on(t),"function"!=typeof s&&i.pointRadius(s),e()):r},t.pointRadius=function(e){return arguments.length?(s="function"==typeof e?e:(i.pointRadius(+e),+e),t):s},t.projection(ho.geo.albersUsa()).context(null)},ho.geo.transform=function(t){return{stream:function(e){var n=new ln(e);for(var r in t)n[r]=t[r];return n}}},ln.prototype={point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ho.geo.projection=dn,ho.geo.projectionMutator=fn,(ho.geo.equirectangular=function(){return dn(_n)}).raw=_n.invert=_n,ho.geo.rotation=function(t){function e(e){return e=t(e[0]*Vo,e[1]*Vo),e[0]*=$o,e[1]*=$o,e}return t=mn(t[0]%360*Vo,t[1]*Vo,t.length>2?t[2]*Vo:0),e.invert=function(e){return e=t.invert(e[0]*Vo,e[1]*Vo),e[0]*=$o,e[1]*=$o,e},e},pn.invert=_n,ho.geo.circle=function(){function t(){var t="function"==typeof r?r.apply(this,arguments):r,e=mn(-t[0]*Vo,-t[1]*Vo,0).invert,a=[];return n(null,null,1,{point:function(t,n){a.push(t=e(t,n)),t[0]*=$o,t[1]*=$o}}),{type:"Polygon",coordinates:[a]}}var e,n,r=[0,0],a=6;return t.origin=function(e){return arguments.length?(r=e,t):r},t.angle=function(r){return arguments.length?(n=Mn((e=+r)*Vo,a*Vo),t):e},t.precision=function(r){return arguments.length?(n=Mn(e*Vo,(a=+r)*Vo),t):a},t.angle(90)},ho.geo.distance=function(t,e){var n,r=(e[0]-t[0])*Vo,a=t[1]*Vo,i=e[1]*Vo,o=Math.sin(r),s=Math.cos(r),u=Math.sin(a),l=Math.cos(a),c=Math.sin(i),d=Math.cos(i);return Math.atan2(Math.sqrt((n=d*o)*n+(n=l*c-u*d*s)*n),u*c+l*d*s)},ho.geo.graticule=function(){function t(){return{type:"MultiLineString",coordinates:e()}}function e(){return ho.range(Math.ceil(i/m)*m,a,m).map(f).concat(ho.range(Math.ceil(l/y)*y,u,y).map(h)).concat(ho.range(Math.ceil(r/_)*_,n,_).filter(function(t){return Lo(t%m)>Io}).map(c)).concat(ho.range(Math.ceil(s/p)*p,o,p).filter(function(t){return Lo(t%y)>Io}).map(d))}var n,r,a,i,o,s,u,l,c,d,f,h,_=10,p=_,m=90,y=360,g=2.5;return t.lines=function(){return e().map(function(t){return{type:"LineString",coordinates:t}})},t.outline=function(){return{type:"Polygon",coordinates:[f(i).concat(h(u).slice(1),f(a).reverse().slice(1),h(l).reverse().slice(1))]}},t.extent=function(e){return arguments.length?t.majorExtent(e).minorExtent(e):t.minorExtent()},t.majorExtent=function(e){return arguments.length?(i=+e[0][0],a=+e[1][0],l=+e[0][1],u=+e[1][1],i>a&&(e=i,i=a,a=e),l>u&&(e=l,l=u,u=e),t.precision(g)):[[i,l],[a,u]]},t.minorExtent=function(e){return arguments.length?(r=+e[0][0],n=+e[1][0],s=+e[0][1],o=+e[1][1],r>n&&(e=r,r=n,n=e),s>o&&(e=s,s=o,o=e),t.precision(g)):[[r,s],[n,o]]},t.step=function(e){return arguments.length?t.majorStep(e).minorStep(e):t.minorStep()},t.majorStep=function(e){return arguments.length?(m=+e[0],y=+e[1],t):[m,y]},t.minorStep=function(e){return arguments.length?(_=+e[0],p=+e[1],t):[_,p]},t.precision=function(e){return arguments.length?(g=+e,c=kn(s,o,90),d=Ln(r,n,g),f=kn(l,u,90),h=Ln(i,a,g),t):g},t.majorExtent([[-180,-90+Io],[180,90-Io]]).minorExtent([[-180,-80-Io],[180,80+Io]])},ho.geo.greatArc=function(){function t(){return{type:"LineString",coordinates:[e||r.apply(this,arguments),n||a.apply(this,arguments)]}}var e,n,r=wn,a=xn;return t.distance=function(){return ho.geo.distance(e||r.apply(this,arguments),n||a.apply(this,arguments))},t.source=function(n){return arguments.length?(r=n,e="function"==typeof n?null:n,t):r},t.target=function(e){return arguments.length?(a=e,n="function"==typeof e?null:e,t):a},t.precision=function(){return arguments.length?t:0},t},ho.geo.interpolate=function(t,e){return Dn(t[0]*Vo,t[1]*Vo,e[0]*Vo,e[1]*Vo)},ho.geo.length=function(t){return Ks=0,ho.geo.stream(t,Xs),Ks};var Ks,Xs={sphere:D,point:D,lineStart:Yn,lineEnd:D,polygonStart:D,polygonEnd:D},Qs=Tn(function(t){return Math.sqrt(2/(1+t))},function(t){return 2*Math.asin(t/2)});(ho.geo.azimuthalEqualArea=function(){return dn(Qs)}).raw=Qs;var tu=Tn(function(t){var e=Math.acos(t);return e&&e/Math.sin(e)},L);(ho.geo.azimuthalEquidistant=function(){return dn(tu)}).raw=tu,(ho.geo.conicConformal=function(){return Je(An)}).raw=An,(ho.geo.conicEquidistant=function(){return Je(Sn)}).raw=Sn;var eu=Tn(function(t){return 1/t},Math.atan);(ho.geo.gnomonic=function(){return dn(eu)}).raw=eu,En.invert=function(t,e){return[t,2*Math.atan(Math.exp(e))-Uo]},(ho.geo.mercator=function(){return jn(En)}).raw=En;var nu=Tn(function(){return 1},Math.asin);(ho.geo.orthographic=function(){return dn(nu)}).raw=nu;var ru=Tn(function(t){return 1/(1+t)},function(t){return 2*Math.atan(t)});(ho.geo.stereographic=function(){return dn(ru)}).raw=ru,Cn.invert=function(t,e){return[-e,2*Math.atan(Math.exp(t))-Uo]},(ho.geo.transverseMercator=function(){var t=jn(Cn),e=t.center,n=t.rotate;return t.center=function(t){return t?e([-t[1],t[0]]):(t=e(),[t[1],-t[0]])},t.rotate=function(t){return t?n([t[0],t[1],t.length>2?t[2]+90:90]):(t=n(),[t[0],t[1],t[2]-90])},n([0,0,90])}).raw=Cn,ho.geom={},ho.geom.hull=function(t){function e(t){if(t.length<3)return[];var e,a=Et(n),i=Et(r),o=t.length,s=[],u=[];for(e=0;e=0;--e)h.push(t[s[l[e]][2]]);for(e=+d;e=r&&l.x<=i&&l.y>=a&&l.y<=o?[[r,o],[i,o],[i,a],[r,a]]:[]).point=t[s]}),e}function n(t){return t.map(function(t,e){return{x:Math.round(i(t,e)/Io)*Io,y:Math.round(o(t,e)/Io)*Io,i:e}})}var r=Fn,a=On,i=r,o=a,s=fu;return t?e(t):(e.links=function(t){return fr(n(t)).edges.filter(function(t){return t.l&&t.r}).map(function(e){return{source:t[e.l.i],target:t[e.r.i]}})},e.triangles=function(t){var e=[];return fr(n(t)).cells.forEach(function(n,r){for(var a,i=n.site,o=n.edges.sort(Zn),s=-1,u=o.length,l=o[u-1].edge,c=l.l===i?l.r:l.l;++s=l,f=r>=c,h=f<<1|d;t.leaf=!1,t=t.nodes[h]||(t.nodes[h]=yr()),d?a=l:s=l,f?o=c:u=c,i(t,e,n,r,a,o,s,u)}var c,d,f,h,_,p,m,y,g,v=Et(s),M=Et(u);if(null!=e)p=e,m=n,y=r,g=a;else if(y=g=-(p=m=1/0),d=[],f=[],_=t.length,o)for(h=0;h<_;++h)c=t[h],c.xy&&(y=c.x),c.y>g&&(g=c.y),d.push(c.x),f.push(c.y);else for(h=0;h<_;++h){var b=+v(c=t[h],h),k=+M(c,h);by&&(y=b),k>g&&(g=k),d.push(b),f.push(k)}var L=y-p,w=g-m;L>w?g=m+L:y=p+w;var x=yr();if(x.add=function(t){i(x,t,+v(t,++h),+M(t,h),p,m,y,g)},x.visit=function(t){gr(t,x,p,m,y,g)},x.find=function(t){return vr(x,t[0],t[1],p,m,y,g)},h=-1,null==e){for(;++h<_;)i(x,t[h],d[h],f[h],p,m,y,g);--h}else t.forEach(x.add);return d=f=t=c=null,x}var o,s=Fn,u=On;return(o=arguments.length)?(s=pr,u=mr,3===o&&(a=n,r=e,n=e=0),i(t)):(i.x=function(t){return arguments.length?(s=t,i):s},i.y=function(t){return arguments.length?(u=t,i):u},i.extent=function(t){return arguments.length?(null==t?e=n=r=a=null:(e=+t[0][0],n=+t[0][1],r=+t[1][0],a=+t[1][1]),i):null==e?null:[[e,n],[r,a]]},i.size=function(t){return arguments.length?(null==t?e=n=r=a=null:(e=n=0,r=+t[0],a=+t[1]),i):null==e?null:[r-e,a-n]},i)},ho.interpolateRgb=Mr,ho.interpolateObject=br,ho.interpolateNumber=kr,ho.interpolateString=Lr;var hu=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,_u=new RegExp(hu.source,"g");ho.interpolate=wr,ho.interpolators=[function(t,e){var n=typeof e;return("string"===n?os.has(e.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(e)?Mr:Lr:e instanceof dt?Mr:Array.isArray(e)?xr:"object"===n&&isNaN(e)?br:kr)(t,e)}],ho.interpolateArray=xr;var pu=function(){return L},mu=ho.map({linear:pu,poly:jr,quad:function(){return Ar},cubic:function(){return Sr},sin:function(){return Cr},exp:function(){return Fr},circle:function(){return Or},elastic:Hr,back:Pr,bounce:function(){return Nr}}),yu=ho.map({in:L,out:Yr,"in-out":Tr,"out-in":function(t){return Tr(Yr(t))}});ho.ease=function(t){var e=t.indexOf("-"),n=e>=0?t.slice(0,e):t,r=e>=0?t.slice(e+1):"in";return n=mu.get(n)||pu,r=yu.get(r)||L,Dr(r(n.apply(null,_o.call(arguments,1))))},ho.interpolateHcl=Br,ho.interpolateHsl=Ir,ho.interpolateLab=Rr,ho.interpolateRound=zr,ho.transform=function(t){var e=mo.createElementNS(ho.ns.prefix.svg,"g");return(ho.transform=function(t){if(null!=t){e.setAttribute("transform",t);var n=e.transform.baseVal.consolidate()}return new Wr(n?n.matrix:gu)})(t)},Wr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var gu={a:1,b:0,c:0,d:1,e:0,f:0};ho.interpolateTransform=Xr,ho.layout={},ho.layout.bundle=function(){return function(t){for(var e=[],n=-1,r=t.length;++n0?a=t:(n.c=null,n.t=NaN,n=null,l.end({type:"end",alpha:a=0})):t>0&&(l.start({type:"start",alpha:a=t}),n=Ht(u.tick)),u):a},u.start=function(){function t(t,r){if(!n){for(n=new Array(a),u=0;u=0;)o.push(c=l[u]),c.parent=i,c.depth=i.depth+1;r&&(i.value=0),i.children=l}else r&&(i.value=+r.call(t,i,i.depth)||0),delete i.children;return da(a,function(t){var n,a;e&&(n=t.children)&&n.sort(e),r&&(a=t.parent)&&(a.value+=t.value)}),s}var e=_a,n=fa,r=ha;return t.sort=function(n){return arguments.length?(e=n,t):e},t.children=function(e){return arguments.length?(n=e,t):n},t.value=function(e){return arguments.length?(r=e,t):r},t.revalue=function(e){return r&&(ca(e,function(t){t.children&&(t.value=0)}),da(e,function(e){var n;e.children||(e.value=+r.call(t,e,e.depth)||0),(n=e.parent)&&(n.value+=e.value)})),e},t},ho.layout.partition=function(){function t(e,n,r,a){var i=e.children;if(e.x=n,e.y=e.depth*a,e.dx=r,e.dy=a,i&&(o=i.length)){var o,s,u,l=-1;for(r=e.value?r/e.value:0;++ls&&(s=r),o.push(r)}for(n=0;n0)for(i=-1;++i=c[0]&&s<=c[1]&&(o=u[ho.bisect(d,s,1,h)-1],o.y+=_,o.push(t[i]));return u}var e=!0,n=Number,r=Da,a=wa;return t.value=function(e){return arguments.length?(n=e,t):n},t.range=function(e){return arguments.length?(r=Et(e),t):r},t.bins=function(e){return arguments.length?(a="number"==typeof e?function(t){return xa(t,e)}:Et(e),t):a},t.frequency=function(n){return arguments.length?(e=!!n,t):e},t},ho.layout.pack=function(){function t(t,i){var o=n.call(this,t,i),s=o[0],u=a[0],l=a[1],c=null==e?Math.sqrt:"function"==typeof e?e:function(){return e};if(s.x=s.y=0,da(s,function(t){t.r=+c(t.value)}),da(s,Ea),r){var d=r*(e?1:Math.max(2*s.r/u,2*s.r/l))/2;da(s,function(t){t.r+=d}),da(s,Ea),da(s,function(t){t.r-=d})}return Fa(s,u/2,l/2,e?1:1/Math.max(2*s.r/u,2*s.r/l)),o}var e,n=ho.layout.hierarchy().sort(Ya),r=0,a=[1,1];return t.size=function(e){return arguments.length?(a=e,t):a},t.radius=function(n){return arguments.length?(e=null==n||"function"==typeof n?n:+n,t):e},t.padding=function(e){return arguments.length?(r=+e,t):r},la(t,n)},ho.layout.tree=function(){function t(t,a){var c=o.call(this,t,a),d=c[0],f=e(d);if(da(f,n),f.parent.m=-f.z,ca(f,r),l)ca(d,i);else{var h=d,_=d,p=d;ca(d,function(t){t.x_.x&&(_=t),t.depth>p.depth&&(p=t)});var m=s(h,_)/2-h.x,y=u[0]/(_.x+s(_,h)/2+m),g=u[1]/(p.depth||1);ca(d,function(t){t.x=(t.x+m)*y,t.y=t.depth*g})}return c}function e(t){for(var e,n={A:null,children:[t]},r=[n];null!=(e=r.pop());)for(var a,i=e.children,o=0,s=i.length;o0&&(Ba(Ra(o,t,n),t,r),l+=r,c+=r),d+=o.m,l+=a.m,f+=u.m,c+=i.m;o&&!Na(i)&&(i.t=o,i.m+=d-c),a&&!Pa(u)&&(u.t=a,u.m+=l-f,n=t)}return n}function i(t){t.x*=u[0],t.y=t.depth*u[1]}var o=ho.layout.hierarchy().sort(null).value(null),s=Ha,u=[1,1],l=null;return t.separation=function(e){return arguments.length?(s=e,t):s},t.size=function(e){return arguments.length?(l=null==(u=e)?i:null,t):l?null:u},t.nodeSize=function(e){return arguments.length?(l=null==(u=e)?null:i,t):l?u:null},la(t,o)},ho.layout.cluster=function(){function t(t,i){var o,s=e.call(this,t,i),u=s[0],l=0;da(u,function(t){var e=t.children;e&&e.length?(t.x=Wa(e),t.y=za(e)):(t.x=o?l+=n(t,o):0,t.y=0,o=t)});var c=qa(u),d=Ua(u),f=c.x-n(c,d)/2,h=d.x+n(d,c)/2;return da(u,a?function(t){t.x=(t.x-u.x)*r[0],t.y=(u.y-t.y)*r[1]}:function(t){t.x=(t.x-f)/(h-f)*r[0],t.y=(1-(u.y?t.y/u.y:1))*r[1]}),s}var e=ho.layout.hierarchy().sort(null).value(null),n=Ha,r=[1,1],a=!1;return t.separation=function(e){return arguments.length?(n=e,t):n},t.size=function(e){return arguments.length?(a=null==(r=e),t):a?null:r},t.nodeSize=function(e){return arguments.length?(a=null!=(r=e),t):a?r:null},la(t,e)},ho.layout.treemap=function(){function t(t,e){for(var n,r,a=-1,i=t.length;++a0;)c.push(o=f[u-1]),c.area+=o.area,"squarify"!==h||(s=r(c,p))<=_?(f.pop(),_=s):(c.area-=c.pop().area,a(c,p,l,!1),p=Math.min(l.dx,l.dy),c.length=c.area=0,_=1/0);c.length&&(a(c,p,l,!0),c.length=c.area=0),i.forEach(e)}}function n(e){var r=e.children;if(r&&r.length){var i,o=d(e),s=r.slice(),u=[];for(t(s,o.dx*o.dy/e.value),u.area=0;i=s.pop();)u.push(i),u.area+=i.area,null!=i.z&&(a(u,i.z?o.dx:o.dy,o,!s.length),u.length=u.area=0);r.forEach(n)}}function r(t,e){for(var n,r=t.area,a=0,i=1/0,o=-1,s=t.length;++oa&&(a=n));return r*=r,e*=e,r?Math.max(e*a*_/r,r/(e*i*_)):1/0}function a(t,e,n,r){var a,i=-1,o=t.length,s=n.x,l=n.y,c=e?u(t.area/e):0;if(e==n.dx){for((r||c>n.dy)&&(c=n.dy);++in.dx)&&(c=n.dx);++i1);return t+e*n*Math.sqrt(-2*Math.log(a)/a)}},logNormal:function(){var t=ho.random.normal.apply(ho,arguments);return function(){return Math.exp(t())}},bates:function(t){var e=ho.random.irwinHall(t);return function(){return e()/t}},irwinHall:function(t){return function(){for(var e=0,n=0;nd?0:1;if(l=qo)return e(l,h)+(t?e(t,1-h):"")+"Z";var _,p,m,y,g,v,M,b,k,L,w,x,D=0,Y=0,T=[];if((y=(+u.apply(this,arguments)||0)/2)&&(m=i===Cu?Math.sqrt(t*t+l*l):+i.apply(this,arguments),h||(Y*=-1),l&&(Y=ot(m/l*Math.sin(y))),t&&(D=ot(m/t*Math.sin(y)))),l){g=l*Math.cos(c+Y),v=l*Math.sin(c+Y),M=l*Math.cos(d-Y),b=l*Math.sin(d-Y);var A=Math.abs(d-c-2*Y)<=zo?0:1;if(Y&&ki(g,v,M,b)===h^A){var S=(c+d)/2;g=l*Math.cos(S),v=l*Math.sin(S),M=b=null}}else g=v=0;if(t){k=t*Math.cos(d-D),L=t*Math.sin(d-D),w=t*Math.cos(c+D),x=t*Math.sin(c+D);var E=Math.abs(c-d+2*D)<=zo?0:1;if(D&&ki(k,L,w,x)===1-h^E){var j=(c+d)/2;k=t*Math.cos(j),L=t*Math.sin(j),w=x=null}}else k=L=0;if(f>Io&&(_=Math.min(Math.abs(l-t)/2,+a.apply(this,arguments)))>.001){p=tzo)+",1 "+e}function a(t,e,n,r){return"Q 0,0 "+r}var i=wn,o=xn,s=$i,u=vi,l=Mi;return t.radius=function(e){return arguments.length?(s=Et(e),t):s},t.source=function(e){return arguments.length?(i=Et(e),t):i},t.target=function(e){return arguments.length?(o=Et(e),t):o},t.startAngle=function(e){return arguments.length?(u=Et(e),t):u},t.endAngle=function(e){return arguments.length?(l=Et(e),t):l},t},ho.svg.diagonal=function(){function t(t,a){var i=e.call(this,t,a),o=n.call(this,t,a),s=(i.y+o.y)/2,u=[i,{x:i.x,y:s},{x:o.x,y:s},o];return u=u.map(r),"M"+u[0]+"C"+u[1]+" "+u[2]+" "+u[3]}var e=wn,n=xn,r=Gi;return t.source=function(n){return arguments.length?(e=Et(n),t):e},t.target=function(e){return arguments.length?(n=Et(e),t):n},t.projection=function(e){return arguments.length?(r=e,t):r},t},ho.svg.diagonal.radial=function(){var t=ho.svg.diagonal(),e=Gi,n=t.projection;return t.projection=function(t){return arguments.length?n(Ji(e=t)):e},t},ho.svg.symbol=function(){function t(t,r){return(Nu.get(e.call(this,t,r))||Xi)(n.call(this,t,r))}var e=Ki,n=Zi;return t.type=function(n){return arguments.length?(e=Et(n),t):e},t.size=function(e){return arguments.length?(n=Et(e),t):n},t};var Nu=ho.map({circle:Xi,cross:function(t){var e=Math.sqrt(t/5)/2;return"M"+-3*e+","+-e+"H"+-e+"V"+-3*e+"H"+e+"V"+-e+"H"+3*e+"V"+e+"H"+e+"V"+3*e+"H"+-e+"V"+e+"H"+-3*e+"Z"},diamond:function(t){var e=Math.sqrt(t/(2*Iu)),n=e*Iu;return"M0,"+-e+"L"+n+",0 0,"+e+" "+-n+",0Z"},square:function(t){var e=Math.sqrt(t)/2;return"M"+-e+","+-e+"L"+e+","+-e+" "+e+","+e+" "+-e+","+e+"Z"},"triangle-down":function(t){var e=Math.sqrt(t/Bu),n=e*Bu/2;return"M0,"+n+"L"+e+","+-n+" "+-e+","+-n+"Z"},"triangle-up":function(t){var e=Math.sqrt(t/Bu),n=e*Bu/2;return"M0,"+-n+"L"+e+","+n+" "+-e+","+n+"Z"}});ho.svg.symbolTypes=Nu.keys();var Bu=Math.sqrt(3),Iu=Math.tan(30*Vo);jo.transition=function(t){for(var e,n,r=Ru||++Uu,a=ro(t),i=[],o=zu||{time:Date.now(),ease:Er,delay:0,duration:250},s=-1,u=this.length;++srect,.s>rect").attr("width",d[1]-d[0])}function r(t){t.select(".extent").attr("y",f[0]),t.selectAll(".extent,.e>rect,.w>rect").attr("height",f[1]-f[0])}function a(){function a(){32==ho.event.keyCode&&(T||(v=null,E[0]-=d[1],E[1]-=f[1],T=2),A())}function p(){32==ho.event.keyCode&&2==T&&(E[0]+=d[1],E[1]+=f[1],T=0,A())}function m(){var t=ho.mouse(b),a=!1;M&&(t[0]+=M[0],t[1]+=M[1]),T||(ho.event.altKey?(v||(v=[(d[0]+d[1])/2,(f[0]+f[1])/2]),E[0]=d[+(t[0]Math.abs(a)*s?(i<0&&(s=-s),u=s*a/i,l=s):(a<0&&(o=-o),u=o,l=o*i/a),{x:n+u,y:r+l}}function l(t){var e=g.default.map(g.default.range(h(t)+1),function(){return[]});return g.default.each(t.nodes(),function(n){var r=t.node(n),a=r.rank;g.default.isUndefined(a)||(e[a][r.order]=n)}),e}function c(t){var e=g.default.min(g.default.map(t.nodes(),function(e){return t.node(e).rank}));g.default.each(t.nodes(),function(n){var r=t.node(n);g.default.has(r,"rank")&&(r.rank-=e)})}function d(t){var e=g.default.min(g.default.map(t.nodes(),function(e){return t.node(e).rank})),n=[];g.default.each(t.nodes(),function(r){var a=t.node(r).rank-e;n[a]||(n[a]=[]),n[a].push(r)});var r=0,a=t.graph().nodeRankFactor;g.default.each(n,function(e,n){g.default.isUndefined(e)&&n%a!=0?--r:r&&g.default.each(e,function(e){t.node(e).rank+=r})})}function f(t,e,n,a){var i={width:0,height:0};return arguments.length>=4&&(i.rank=n,i.order=a),r(t,"border",i,e)}function h(t){return g.default.max(g.default.map(t.nodes(),function(e){var n=t.node(e).rank;if(!g.default.isUndefined(n))return n}))}function _(t,e){var n={lhs:[],rhs:[]};return g.default.each(t,function(t){e(t)?n.lhs.push(t):n.rhs.push(t)}),n}function p(t,e){var n=g.default.now();try{return e()}finally{console.log(t+" time: "+(g.default.now()-n)+"ms")}}function m(t,e){return e()}Object.defineProperty(e,"__esModule",{value:!0}),e.addDummyNode=r,e.simplify=a,e.asNonCompoundGraph=i,e.successorWeights=o,e.predecessorWeights=s,e.intersectRect=u,e.buildLayerMatrix=l,e.normalizeRanks=c,e.removeEmptyRanks=d,e.addBorderNode=f,e.maxRank=h,e.partition=_,e.time=p,e.notime=m;var y=n(0),g=function(t){return t&&t.__esModule?t:{default:t}}(y),v=n(2);e.default={addDummyNode:r,simplify:a,asNonCompoundGraph:i,successorWeights:o,predecessorWeights:s,intersectRect:u,buildLayerMatrix:l,normalizeRanks:c,removeEmptyRanks:d,addBorderNode:f,maxRank:h,partition:_,time:p,notime:m}},function(t,e){t.exports=n(20)},function(t,e,n){"use strict";function r(t){function e(r){var a=t.node(r);if(o.default.has(n,r))return a.rank;n[r]=!0;var i=o.default.min(o.default.map(t.outEdges(r),function(n){return e(n.w)-t.edge(n).minlen}))||0;return a.rank=i}var n={};o.default.each(t.sources(),e)}function a(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}Object.defineProperty(e,"__esModule",{value:!0}),e.longestPath=r,e.slack=a;var i=n(0),o=function(t){return t&&t.__esModule?t:{default:t}}(i);e.default={longestPath:r,slack:a}},function(t,e,n){"use strict";function r(t){var e=new l.Graph({directed:!1}),n=t.nodes()[0],r=t.nodeCount();e.setNode(n,{});for(var s=void 0,u=void 0;a(e,t)0;--u)if(s=e[u].dequeue()){r=r.concat(o(t,e,n,s,!0));break}}return r}function o(t,e,n,r,a){var i=a?[]:void 0;return c.default.each(t.inEdges(r.v),function(r){var o=t.edge(r),s=t.node(r.v);a&&i.push({v:r.v,w:r.w}),s.out-=o,u(e,n,s)}),c.default.each(t.outEdges(r.v),function(r){var a=t.edge(r),i=r.w,o=t.node(i);o.in-=a,u(e,n,o)}),t.removeNode(r.v),i}function s(t,e){var n=new d.Graph,r=0,a=0;c.default.each(t.nodes(),function(t){n.setNode(t,{v:t,in:0,out:0})}),c.default.each(t.edges(),function(t){var i=n.edge(t.v,t.w)||0,o=e(t),s=i+o;n.setEdge(t.v,t.w,s),a=Math.max(a,n.node(t.v).out+=o),r=Math.max(r,n.node(t.w).in+=o)});var i=c.default.range(a+r+3).map(function(){return new h.default}),o=r+1;return c.default.each(n.nodes(),function(t){u(i,o,n.node(t))}),{graph:n,buckets:i,zeroIdx:o}}function u(t,e,n){n.out?n.in?t[n.out-n.in+e].enqueue(n):t[t.length-1].enqueue(n):t[0].enqueue(n)}Object.defineProperty(e,"__esModule",{value:!0});var l=n(0),c=r(l),d=n(2),f=n(9),h=r(f),_=c.default.constant(1);e.default=a},function(t,e,n){"use strict";function r(){var t={};t._next=t._prev=t,this._sentinel=t}function a(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function i(t,e){if("_next"!==t&&"_prev"!==t)return e}Object.defineProperty(e,"__esModule",{value:!0}),r.prototype.dequeue=function(){var t=this._sentinel,e=t._prev;if(e!==t)return a(e),e},r.prototype.enqueue=function(t){var e=this._sentinel;t._prev&&t._next&&a(t),t._next=e._next,e._next._prev=t,e._next=t,t._prev=e},r.prototype.toString=function(){for(var t=[],e=this._sentinel,n=e._prev;n!==e;)t.push(JSON.stringify(n,i)),n=n._prev;return"["+t.join(", ")+"]"},e.default=r},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function a(t){t.graph().dummyChains=[],u.default.each(t.edges(),function(e){i(t,e)})}function i(t,e){var n=e.v,r=t.node(n).rank,a=e.w,i=t.node(a).rank,o=e.name,s=t.edge(e),u=s.labelRank;if(i!==r+1){t.removeEdge(e);var l=void 0,d=void 0,f=void 0;for(f=0,++r;ro.lim&&(s=o,u=!0);var l=y.default.filter(e.edges(),function(e){return u===p(t,t.node(e.v),s)&&u!==p(t,t.node(e.w),s)});return y.default.minBy(l,function(t){return(0,b.slack)(e,t)})}function f(t,e,n,r){var a=n.v,o=n.w;t.removeEdge(a,o),t.setEdge(r.v,r.w,{}),u(t),i(t,e),h(t,e)}function h(t,e){var n=y.default.find(t.nodes(),function(t){return!e.node(t).parent}),r=L(t,n);r=r.slice(1),y.default.each(r,function(n){var r=t.node(n).parent,a=e.edge(n,r),i=!1;a||(a=e.edge(r,n),i=!0),e.node(n).rank=e.node(r).rank+(i?a.minlen:-a.minlen)})}function _(t,e,n){return t.hasEdge(e,n)}function p(t,e,n){return n.low<=e.lim&&e.lim<=n.lim}Object.defineProperty(e,"__esModule",{value:!0});var m=n(0),y=r(m),g=n(2),v=n(4),M=r(v),b=n(3),k=n(1),L=g.alg.preorder,w=g.alg.postorder;a.initLowLimValues=u,a.initCutValues=i,a.calcCutValue=s,a.leaveEdge=c,a.enterEdge=d,a.exchangeEdges=f,e.default=a},function(t,e,n){"use strict";function r(t){var e=i(t);s.default.each(t.graph().dummyChains,function(n){for(var r=t.node(n),i=r.edgeObj,o=a(t,e,i.v,i.w),s=o.path,u=o.lca,l=0,c=s[l],d=!0;n!==i.w;){if(r=t.node(n),d){for(;(c=s[l])!==u&&t.node(c).maxRanko||s>e[u].lim));for(l=u,u=r;(u=t.parent(u))!==l;)i.push(u);return{path:a.concat(i.reverse()),lca:l}}function i(t){function e(a){var i=r;s.default.each(t.children(a),e),n[a]={low:i,lim:r++}}var n={},r=0;return s.default.each(t.children(),e),n}Object.defineProperty(e,"__esModule",{value:!0});var o=n(0),s=function(t){return t&&t.__esModule?t:{default:t}}(o);e.default=r},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function a(t){var e=f.default.addDummyNode(t,"root",{},"_root"),n=o(t),r=c.default.max(c.default.values(n))-1,a=2*r+1;t.graph().nestingRoot=e,c.default.each(t.edges(),function(e){t.edge(e).minlen*=a});var u=s(t)+1;c.default.each(t.children(),function(o){i(t,e,a,u,r,n,o)}),t.graph().nodeRankFactor=a}function i(t,e,n,r,a,o,s){var u=t.children(s);if(!u.length)return void(s!==e&&t.setEdge(e,s,{weight:0,minlen:n}));var l=f.default.addBorderNode(t,"_bt"),d=f.default.addBorderNode(t,"_bb"),h=t.node(s);t.setParent(l,s),h.borderTop=l,t.setParent(d,s),h.borderBottom=d,c.default.each(u,function(u){i(t,e,n,r,a,o,u);var c=t.node(u),f=c.borderTop?c.borderTop:u,h=c.borderBottom?c.borderBottom:u,_=c.borderTop?r:2*r,p=f!==h?1:a-o[s]+1;t.setEdge(l,f,{weight:_,minlen:p,nestingEdge:!0}),t.setEdge(h,d,{weight:_,minlen:p,nestingEdge:!0})}),t.parent(s)||t.setEdge(e,l,{weight:0,minlen:a+o[s]})}function o(t){function e(r,a){var i=t.children(r);i&&i.length&&c.default.each(i,function(t){e(t,a+1)}),n[r]=a}var n={};return c.default.each(t.children(),function(t){e(t,1)}),n}function s(t){return c.default.reduce(t.edges(),function(e,n){return e+t.edge(n).weight},0)}function u(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,c.default.each(t.edges(),function(e){t.edge(e).nestingEdge&&t.removeEdge(e)})}Object.defineProperty(e,"__esModule",{value:!0});var l=n(0),c=r(l),d=n(1),f=r(d);e.default={run:a,cleanup:u}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function a(t){function e(n){var r=t.children(n),a=t.node(n);if(r.length&&s.default.each(r,e),s.default.has(a,"minRank")){a.borderLeft=[],a.borderRight=[];for(var o=a.minRank,u=a.maxRank+1;o=2),a=k.default.buildLayerMatrix(t);var p=(0,_.default)(t,a);p0;)e%2&&(n+=u[e+1]),e=e-1>>1,u[e]+=t.weight;l+=t.weight*n})),l}Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),o=function(t){return t&&t.__esModule?t:{default:t}}(i);e.default=r},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function a(t,e,n,r){var s=t.children(e),l=t.node(e),d=l?l.borderLeft:void 0,h=l?l.borderRight:void 0,p={};d&&(s=u.default.filter(s,function(t){return t!==d&&t!==h}));var m=(0,c.default)(t,s);u.default.each(m,function(e){if(t.children(e.v).length){var i=a(t,e.v,n,r);p[e.v]=i,u.default.has(i,"barycenter")&&o(e,i)}});var y=(0,f.default)(m,n);i(y,p);var g=(0,_.default)(y,r);if(d&&(g.vs=u.default.flatten([d,g.vs,h],!0),t.predecessors(d).length)){var v=t.node(t.predecessors(d)[0]),M=t.node(t.predecessors(h)[0]);u.default.has(g,"barycenter")||(g.barycenter=0,g.weight=0),g.barycenter=(g.barycenter*g.weight+v.order+M.order)/(g.weight+2),g.weight+=2}return g}function i(t,e){u.default.each(t,function(t){t.vs=u.default.flatten(t.vs.map(function(t){return e[t]?e[t].vs:t}),!0)})}function o(t,e){u.default.isUndefined(t.barycenter)?(t.barycenter=e.barycenter,t.weight=e.weight):(t.barycenter=(t.barycenter*t.weight+e.barycenter*e.weight)/(t.weight+e.weight),t.weight+=e.weight)}Object.defineProperty(e,"__esModule",{value:!0});var s=n(0),u=r(s),l=n(21),c=r(l),d=n(22),f=r(d),h=n(23),_=r(h);e.default=a},function(t,e,n){"use strict";function r(t,e){return i.default.map(e,function(e){var n=t.inEdges(e);if(n.length){var r=i.default.reduce(n,function(e,n){var r=t.edge(n),a=t.node(n.v);return{sum:e.sum+r.weight*a.order,weight:e.weight+r.weight}},{sum:0,weight:0});return{v:e,barycenter:r.sum/r.weight,weight:r.weight}}return{v:e}})}Object.defineProperty(e,"__esModule",{value:!0});var a=n(0),i=function(t){return t&&t.__esModule?t:{default:t}}(a);e.default=r},function(t,e,n){"use strict";function r(t,e){var n={};return s.default.each(t,function(t,e){var r=n[t.v]={indegree:0,in:[],out:[],vs:[t.v],i:e};s.default.isUndefined(t.barycenter)||(r.barycenter=t.barycenter,r.weight=t.weight)}),s.default.each(e.edges(),function(t){var e=n[t.v],r=n[t.w];s.default.isUndefined(e)||s.default.isUndefined(r)||(r.indegree++,e.out.push(n[t.w]))}),a(s.default.filter(n,function(t){return!t.indegree}))}function a(t){for(var e=[];t.length;){var n=t.pop();e.push(n),s.default.each(n.in.reverse(),function(t){return function(e){e.merged||(s.default.isUndefined(e.barycenter)||s.default.isUndefined(t.barycenter)||e.barycenter>=t.barycenter)&&i(t,e)}}(n)),s.default.each(n.out,function(e){return function(n){n.in.push(e),0==--n.indegree&&t.push(n)}}(n))}return s.default.chain(e).filter(function(t){return!t.merged}).map(function(t){return s.default.pick(t,["vs","i","barycenter","weight"])}).value()}function i(t,e){var n=0,r=0;t.weight&&(n+=t.barycenter*t.weight,r+=t.weight),e.weight&&(n+=e.barycenter*e.weight,r+=e.weight),t.vs=e.vs.concat(t.vs),t.barycenter=n/r,t.weight=r,t.i=Math.min(e.i,t.i),e.merged=!0}Object.defineProperty(e,"__esModule",{value:!0});var o=n(0),s=function(t){return t&&t.__esModule?t:{default:t}}(o);e.default=r},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function a(t,e){var n=c.default.partition(t,function(t){return u.default.has(t,"barycenter")}),r=n.lhs,a=u.default.sortBy(n.rhs,function(t){return-t.i}),s=[],l=0,d=0,f=0;r.sort(o(!!e)),f=i(s,a,f),u.default.each(r,function(t){f+=t.vs.length,s.push(t.vs),l+=t.barycenter*t.weight,d+=t.weight,f=i(s,a,f)});var h={vs:u.default.flatten(s,!0)};return d&&(h.barycenter=l/d,h.weight=d),h}function i(t,e,n){for(var r=void 0;e.length&&(r=u.default.last(e)).i<=n;)e.pop(),t.push(r.vs),n++;return n}function o(t){return function(e,n){return e.barycentern.barycenter?1:t?n.i-e.i:e.i-n.i}}Object.defineProperty(e,"__esModule",{value:!0});var s=n(0),u=r(s),l=n(1),c=r(l);e.default=a},function(t,e,n){"use strict";function r(t,e,n){var r=a(t),i=new s.Graph({compound:!0}).setGraph({root:r}).setDefaultNodeLabel(function(e){return t.node(e)});return o.default.each(t.nodes(),function(a){var s=t.node(a),u=t.parent(a);(s.rank===e||s.minRank<=e&&e<=s.maxRank)&&(i.setNode(a),i.setParent(a,u||r),o.default.each(t[n](a),function(e){var n=e.v===a?e.w:e.v,r=i.edge(n,a),s=o.default.isUndefined(r)?0:r.weight;i.setEdge(n,a,{weight:t.edge(e).weight+s})}),o.default.has(s,"minRank")&&i.setNode(a,{borderLeft:s.borderLeft[e],borderRight:s.borderRight[e]}))}),i}function a(t){for(var e=void 0;t.hasNode(e=o.default.uniqueId("_root")););return e}Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),o=function(t){return t&&t.__esModule?t:{default:t}}(i),s=n(2);e.default=r},function(t,e,n){"use strict";function r(t,e,n){var r={},a=void 0;i.default.each(n,function(n){for(var i=t.parent(n),o=void 0,s=void 0;i;){if(o=t.parent(i),o?(s=r[o],r[o]=i):(s=a,a=i),s&&s!==i)return void e.setEdge(s,i);i=o}})}Object.defineProperty(e,"__esModule",{value:!0});var a=n(0),i=function(t){return t&&t.__esModule?t:{default:t}}(a);e.default=r},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function a(t){t=l.default.asNonCompoundGraph(t),i(t),s.default.each((0,c.positionX)(t),function(e,n){t.node(n).x=e})}function i(t){var e=l.default.buildLayerMatrix(t),n=t.graph().ranksep,r=0;s.default.each(e,function(e){var a=s.default.max(s.default.map(e,function(e){return t.node(e).height}));s.default.each(e,function(e){t.node(e).y=r+a/2}),r+=a+n})}Object.defineProperty(e,"__esModule",{value:!0});var o=n(0),s=r(o),u=n(1),l=r(u),c=n(27);e.default=a},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function a(t,e){function n(e,n){var a=0,i=0,u=e.length,l=v.default.last(n);return v.default.each(n,function(e,c){var d=o(t,e),f=d?t.node(d).order:u;(d||e===l)&&(v.default.each(n.slice(i,c+1),function(e){v.default.each(t.predecessors(e),function(n){var i=t.node(n),o=i.order;!(oo)&&s(a,e,u)})})}function r(e,r){var a=-1,i=void 0,o=0;return v.default.each(r,function(s,u){if("border"===t.node(s).dummy){var l=t.predecessors(s);l.length&&(i=t.node(l[0]).order,n(r,o,u,a,i),o=u,a=i)}n(r,o,r.length,i,e.length)}),r}var a={};return v.default.reduce(e,r),a}function o(t,e){if(t.node(e).dummy)return v.default.find(t.predecessors(e),function(e){return t.node(e).dummy})}function s(t,e,n){if(e>n){var r=e;e=n,n=r}var a=t[e];a||(t[e]=a={}),a[n]=!0}function u(t,e,n){if(e>n){var r=e;e=n,n=r}return v.default.has(t[e],n)}function l(t,e,n,r){var a={},i={},o={};return v.default.each(e,function(t){v.default.each(t,function(t,e){a[t]=t,i[t]=t,o[t]=e})}),v.default.each(e,function(t){var e=-1;v.default.each(t,function(t){var s=r(t);if(s.length){s=v.default.sortBy(s,function(t){return o[t]});for(var l=(s.length-1)/2,c=Math.floor(l),d=Math.ceil(l);c<=d;++c){var f=s[c];i[t]===t&&e",main:"dist/dagre-layout.js",keywords:["graph","layout","dagre"],scripts:{lint:"standard",jest:"jest --coverage",karma:"node -r babel-register node_modules/.bin/karma start",test:"yarn lint && yarn jest && yarn karma --single-run",bench:"node -r babel-register src/bench.js",build:"node -r babel-register node_modules/.bin/webpack --progress --colors","build:watch":"yarn build --watch",upgrade:"yarn-upgrade-all"},dependencies:{graphlib:"^2.1.1",lodash:"^4.17.4"},devDependencies:{"babel-core":"^6.26.0","babel-loader":"^7.1.2","babel-preset-env":"^1.6.0","babel-preset-es2015":"^6.24.1",benchmark:"^2.1.4",chai:"^4.1.2",coveralls:"^2.13.1",jest:"^21.0.1",karma:"^1.7.1","karma-chrome-launcher":"^2.2.0","karma-firefox-launcher":"^1.0.1","karma-mocha":"^1.3.0","karma-safari-launcher":"^1.0.0",mocha:"^3.5.0",sprintf:"^0.1.5",standard:"^10.0.3",webpack:"^3.5.6","webpack-node-externals":"^1.6.0","yarn-upgrade-all":"^0.1.8"},repository:{type:"git",url:"https://github.com/tylingsoft/dagre-layout.git"},license:"MIT",files:["dist/","lib/","index.js"],standard:{ignore:["dist/**/*.js","coverage/**/*.js"]},jest:{testRegex:"test/.+?-test\\.js",testPathIgnorePatterns:["test/bundle-test\\.js"]}}}]).default})},function(t,e,n){"use strict";function r(t){this._isDirected=!l.has(t,"directed")||t.directed,this._isMultigraph=!!l.has(t,"multigraph")&&t.multigraph,this._isCompound=!!l.has(t,"compound")&&t.compound,this._label=void 0,this._defaultNodeLabelFn=l.constant(void 0),this._defaultEdgeLabelFn=l.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[d]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}function a(t,e){t[e]?t[e]++:t[e]=1}function i(t,e){--t[e]||delete t[e]}function o(t,e,n,r){var a=""+e,i=""+n;if(!t&&a>i){var o=a;a=i,i=o}return a+f+i+f+(l.isUndefined(r)?c:r)}function s(t,e,n,r){var a=""+e,i=""+n;if(!t&&a>i){var o=a;a=i,i=o}var s={v:a,w:i};return r&&(s.name=r),s}function u(t,e){return o(t,e.v,e.w,e.name)}var l=n(4);t.exports=r;var c="\0",d="\0",f="";r.prototype._nodeCount=0,r.prototype._edgeCount=0,r.prototype.isDirected=function(){return this._isDirected},r.prototype.isMultigraph=function(){return this._isMultigraph},r.prototype.isCompound=function(){return this._isCompound},r.prototype.setGraph=function(t){return this._label=t,this},r.prototype.graph=function(){return this._label},r.prototype.setDefaultNodeLabel=function(t){return l.isFunction(t)||(t=l.constant(t)),this._defaultNodeLabelFn=t,this},r.prototype.nodeCount=function(){return this._nodeCount},r.prototype.nodes=function(){return l.keys(this._nodes)},r.prototype.sources=function(){return l.filter(this.nodes(),l.bind(function(t){return l.isEmpty(this._in[t])},this))},r.prototype.sinks=function(){return l.filter(this.nodes(),l.bind(function(t){return l.isEmpty(this._out[t])},this))},r.prototype.setNodes=function(t,e){var n=arguments;return l.each(t,l.bind(function(t){n.length>1?this.setNode(t,e):this.setNode(t)},this)),this},r.prototype.setNode=function(t,e){return l.has(this._nodes,t)?(arguments.length>1&&(this._nodes[t]=e),this):(this._nodes[t]=arguments.length>1?e:this._defaultNodeLabelFn(t),this._isCompound&&(this._parent[t]=d,this._children[t]={},this._children[d][t]=!0),this._in[t]={},this._preds[t]={},this._out[t]={},this._sucs[t]={},++this._nodeCount,this)},r.prototype.node=function(t){return this._nodes[t]},r.prototype.hasNode=function(t){return l.has(this._nodes,t)},r.prototype.removeNode=function(t){var e=this;if(l.has(this._nodes,t)){var n=function(t){e.removeEdge(e._edgeObjs[t])};delete this._nodes[t],this._isCompound&&(this._removeFromParentsChildList(t),delete this._parent[t],l.each(this.children(t),l.bind(function(t){this.setParent(t)},this)),delete this._children[t]),l.each(l.keys(this._in[t]),n),delete this._in[t],delete this._preds[t],l.each(l.keys(this._out[t]),n),delete this._out[t],delete this._sucs[t],--this._nodeCount}return this},r.prototype.setParent=function(t,e){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(l.isUndefined(e))e=d;else{e+="";for(var n=e;!l.isUndefined(n);n=this.parent(n))if(n===t)throw new Error("Setting "+e+" as parent of "+t+" would create create a cycle");this.setNode(e)}return this.setNode(t),this._removeFromParentsChildList(t),this._parent[t]=e,this._children[e][t]=!0,this},r.prototype._removeFromParentsChildList=function(t){delete this._children[this._parent[t]][t]},r.prototype.parent=function(t){if(this._isCompound){var e=this._parent[t];if(e!==d)return e}},r.prototype.children=function(t){if(l.isUndefined(t)&&(t=d),this._isCompound){var e=this._children[t];if(e)return l.keys(e)}else{if(t===d)return this.nodes();if(this.hasNode(t))return[]}},r.prototype.predecessors=function(t){var e=this._preds[t];if(e)return l.keys(e)},r.prototype.successors=function(t){var e=this._sucs[t];if(e)return l.keys(e)},r.prototype.neighbors=function(t){var e=this.predecessors(t);if(e)return l.union(e,this.successors(t))},r.prototype.filterNodes=function(t){function e(t){var i=r.parent(t);return void 0===i||n.hasNode(i)?(a[t]=i,i):i in a?a[i]:e(i)}var n=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});n.setGraph(this.graph()),l.each(this._nodes,l.bind(function(e,r){t(r)&&n.setNode(r,e)},this)),l.each(this._edgeObjs,l.bind(function(t){n.hasNode(t.v)&&n.hasNode(t.w)&&n.setEdge(t,this.edge(t))},this));var r=this,a={};return this._isCompound&&l.each(n.nodes(),function(t){n.setParent(t,e(t))}),n},r.prototype.setDefaultEdgeLabel=function(t){return l.isFunction(t)||(t=l.constant(t)),this._defaultEdgeLabelFn=t,this},r.prototype.edgeCount=function(){return this._edgeCount},r.prototype.edges=function(){return l.values(this._edgeObjs)},r.prototype.setPath=function(t,e){var n=this,r=arguments;return l.reduce(t,function(t,a){return r.length>1?n.setEdge(t,a,e):n.setEdge(t,a),a}),this},r.prototype.setEdge=function(){var t,e,n,r,i=!1,u=arguments[0];"object"==typeof u&&null!==u&&"v"in u?(t=u.v,e=u.w,n=u.name,2===arguments.length&&(r=arguments[1],i=!0)):(t=u,e=arguments[1],n=arguments[3],arguments.length>2&&(r=arguments[2],i=!0)),t=""+t,e=""+e,l.isUndefined(n)||(n=""+n);var c=o(this._isDirected,t,e,n);if(l.has(this._edgeLabels,c))return i&&(this._edgeLabels[c]=r),this;if(!l.isUndefined(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(e),this._edgeLabels[c]=i?r:this._defaultEdgeLabelFn(t,e,n);var d=s(this._isDirected,t,e,n);return t=d.v,e=d.w,Object.freeze(d),this._edgeObjs[c]=d,a(this._preds[e],t),a(this._sucs[t],e),this._in[e][c]=d,this._out[t][c]=d,this._edgeCount++,this},r.prototype.edge=function(t,e,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):o(this._isDirected,t,e,n);return this._edgeLabels[r]},r.prototype.hasEdge=function(t,e,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):o(this._isDirected,t,e,n);return l.has(this._edgeLabels,r)},r.prototype.removeEdge=function(t,e,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):o(this._isDirected,t,e,n),a=this._edgeObjs[r];return a&&(t=a.v,e=a.w,delete this._edgeLabels[r],delete this._edgeObjs[r],i(this._preds[e],t),i(this._sucs[t],e),delete this._in[e][r],delete this._out[t][r],this._edgeCount--),this},r.prototype.inEdges=function(t,e){var n=this._in[t];if(n){var r=l.values(n);return e?l.filter(r,function(t){return t.v===e}):r}},r.prototype.outEdges=function(t,e){var n=this._out[t];if(n){var r=l.values(n);return e?l.filter(r,function(t){return t.w===e}):r}},r.prototype.nodeEdges=function(t,e){var n=this.inEdges(t,e);if(n)return n.concat(this.outEdges(t,e))}},function(t,e){function n(t,e){return!!(e=null==e?r:e)&&("number"==typeof t||a.test(t))&&t>-1&&t%1==0&&t-1&&t%1==0&&t<=r}var r=9007199254740991;t.exports=n},function(t,e,n){var r=n(10),a=n(5),i=r(a,"Map");t.exports=i},function(t,e,n){function r(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e=20?"ste":"de")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},r=function(t){return 0===t?0:1===t?1:2===t?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5},a={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},i=function(t){return function(e,n,i,o){var s=r(e),u=a[t][r(e)];return 2===s&&(u=u[n?0:1]),u.replace(/%d/i,e)}},o=["كانون الثاني يناير","شباط فبراير","آذار مارس","نيسان أبريل","أيار مايو","حزيران يونيو","تموز يوليو","آب أغسطس","أيلول سبتمبر","تشرين الأول أكتوبر","تشرين الثاني نوفمبر","كانون الأول ديسمبر"];return t.defineLocale("ar",{months:o,monthsShort:o,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(t){return"م"===t},meridiem:function(t,e,n){return t<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:i("s"),m:i("m"),mm:i("m"),h:i("h"),hh:i("h"),d:i("d"),dd:i("d"),M:i("M"),MM:i("M"),y:i("y"),yy:i("y")},preparse:function(t){return t.replace(/\u200f/g,"").replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(t){return n[t]}).replace(/،/g,",")},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]}).replace(/,/g,"،")},week:{dow:6,doy:12}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ar-dz",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"أح_إث_ثلا_أر_خم_جم_سب".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ar-kw",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:12}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},n=function(t){return 0===t?0:1===t?1:2===t?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5},r={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},a=function(t){return function(e,a,i,o){var s=n(e),u=r[t][n(e)];return 2===s&&(u=u[a?0:1]),u.replace(/%d/i,e)}},i=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];return t.defineLocale("ar-ly",{months:i,monthsShort:i,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(t){return"م"===t},meridiem:function(t,e,n){return t<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:a("s"),m:a("m"),mm:a("m"),h:a("h"),hh:a("h"),d:a("d"),dd:a("d"),M:a("M"),MM:a("M"),y:a("y"),yy:a("y")},preparse:function(t){return t.replace(/\u200f/g,"").replace(/،/g,",")},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]}).replace(/,/g,"،")},week:{dow:6,doy:12}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};return t.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(t){return"م"===t},meridiem:function(t,e,n){return t<12?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(t){return t.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(t){return n[t]}).replace(/،/g,",")},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]}).replace(/,/g,"،")},week:{dow:0,doy:6}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"};return t.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"birneçə saniyyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gecə|səhər|gündüz|axşam/,isPM:function(t){return/^(gündüz|axşam)$/.test(t)},meridiem:function(t,e,n){return t<4?"gecə":t<12?"səhər":t<17?"gündüz":"axşam"},dayOfMonthOrdinalParse:/\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,ordinal:function(t){if(0===t)return t+"-ıncı";var n=t%10,r=t%100-n,a=t>=100?100:null;return t+(e[n]||e[r]||e[a])},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e){var n=t.split("_");return e%10==1&&e%100!=11?n[0]:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?n[1]:n[2]}function n(t,n,r){var a={mm:n?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:n?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"};return"m"===r?n?"хвіліна":"хвіліну":"h"===r?n?"гадзіна":"гадзіну":t+" "+e(a[r],+t)}return t.defineLocale("be",{months:{format:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),standalone:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_")},monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:{format:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),standalone:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),isFormat:/\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/},weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:n,mm:n,h:n,hh:n,d:"дзень",dd:n,M:"месяц",MM:n,y:"год",yy:n},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(t){return/^(дня|вечара)$/.test(t)},meridiem:function(t,e,n){return t<4?"ночы":t<12?"раніцы":t<17?"дня":"вечара"},dayOfMonthOrdinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(t,e){switch(e){case"M":case"d":case"DDD":case"w":case"W":return t%10!=2&&t%10!=3||t%100==12||t%100==13?t+"-ы":t+"-і";case"D":return t+"-га";default:return t}},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(t){var e=t%10,n=t%100;return 0===t?t+"-ев":0===n?t+"-ен":n>10&&n<20?t+"-ти":1===e?t+"-ви":2===e?t+"-ри":7===e||8===e?t+"-ми":t+"-ти"},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},n={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"};return t.defineLocale("bn",{months:"জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),weekdaysMin:"রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(t){return t.replace(/[১২৩৪৫৬৭৮৯০]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/রাত|সকাল|দুপুর|বিকাল|রাত/,meridiemHour:function(t,e){return 12===t&&(t=0),"রাত"===e&&t>=4||"দুপুর"===e&&t<5||"বিকাল"===e?t+12:t},meridiem:function(t,e,n){return t<4?"রাত":t<10?"সকাল":t<17?"দুপুর":t<20?"বিকাল":"রাত"},week:{dow:0,doy:6}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"༡",2:"༢",3:"༣",4:"༤",5:"༥",6:"༦",7:"༧",8:"༨",9:"༩",0:"༠"},n={"༡":"1","༢":"2","༣":"3","༤":"4","༥":"5","༦":"6","༧":"7","༨":"8","༩":"9","༠":"0"};return t.defineLocale("bo",{months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[དི་རིང] LT",nextDay:"[སང་ཉིན] LT",nextWeek:"[བདུན་ཕྲག་རྗེས་མ], LT",lastDay:"[ཁ་སང] LT",lastWeek:"[བདུན་ཕྲག་མཐའ་མ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"},preparse:function(t){return t.replace(/[༡༢༣༤༥༦༧༨༩༠]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,meridiemHour:function(t,e){return 12===t&&(t=0),"མཚན་མོ"===e&&t>=4||"ཉིན་གུང"===e&&t<5||"དགོང་དག"===e?t+12:t},meridiem:function(t,e,n){return t<4?"མཚན་མོ":t<10?"ཞོགས་ཀས":t<17?"ཉིན་གུང":t<20?"དགོང་དག":"མཚན་མོ"},week:{dow:0,doy:6}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n){return t+" "+a({mm:"munutenn",MM:"miz",dd:"devezh"}[n],t)}function n(t){switch(r(t)){case 1:case 3:case 4:case 5:case 9:return t+" bloaz";default:return t+" vloaz"}}function r(t){return t>9?r(t%10):t}function a(t,e){return 2===e?i(t):t}function i(t){var e={m:"v",b:"v",d:"z"};return void 0===e[t.charAt(0)]?t:e[t.charAt(0)]+t.substring(1)}return t.defineLocale("br",{months:"Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h[e]mm A",LTS:"h[e]mm:ss A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY h[e]mm A",LLLL:"dddd, D [a viz] MMMM YYYY h[e]mm A"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondennoù",m:"ur vunutenn",mm:e,h:"un eur",hh:"%d eur",d:"un devezh",dd:e,M:"ur miz",MM:e,y:"ur bloaz",yy:n},dayOfMonthOrdinalParse:/\d{1,2}(añ|vet)/,ordinal:function(t){return t+(1===t?"añ":"vet")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n){var r=t+" ";switch(n){case"m":return e?"jedna minuta":"jedne minute";case"mm":return r+=1===t?"minuta":2===t||3===t||4===t?"minute":"minuta";case"h":return e?"jedan sat":"jednog sata";case"hh":return r+=1===t?"sat":2===t||3===t||4===t?"sata":"sati";case"dd":return r+=1===t?"dan":"dana";case"MM":return r+=1===t?"mjesec":2===t||3===t||4===t?"mjeseca":"mjeseci";case"yy":return r+=1===t?"godina":2===t||3===t||4===t?"godine":"godina"}}return t.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:e,mm:e,h:e,hh:e,d:"dan",dd:e,M:"mjesec",MM:e,y:"godinu",yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ca",{months:{standalone:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"[el] D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"[el] D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"[el] dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(t,e){var n=1===t?"r":2===t?"n":3===t?"r":4===t?"t":"è";return"w"!==e&&"W"!==e||(n="a"),t+n},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t){return t>1&&t<5&&1!=~~(t/10)}function n(t,n,r,a){var i=t+" ";switch(r){case"s":return n||a?"pár sekund":"pár sekundami";case"m":return n?"minuta":a?"minutu":"minutou";case"mm":return n||a?i+(e(t)?"minuty":"minut"):i+"minutami";case"h":return n?"hodina":a?"hodinu":"hodinou";case"hh":return n||a?i+(e(t)?"hodiny":"hodin"):i+"hodinami";case"d":return n||a?"den":"dnem";case"dd":return n||a?i+(e(t)?"dny":"dní"):i+"dny";case"M":return n||a?"měsíc":"měsícem";case"MM":return n||a?i+(e(t)?"měsíce":"měsíců"):i+"měsíci";case"y":return n||a?"rok":"rokem";case"yy":return n||a?i+(e(t)?"roky":"let"):i+"lety"}}var r="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),a="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_");return t.defineLocale("cs",{months:r,monthsShort:a,monthsParse:function(t,e){var n,r=[];for(n=0;n<12;n++)r[n]=new RegExp("^"+t[n]+"$|^"+e[n]+"$","i");return r}(r,a),shortMonthsParse:function(t){var e,n=[];for(e=0;e<12;e++)n[e]=new RegExp("^"+t[e]+"$","i");return n}(a),longMonthsParse:function(t){var e,n=[];for(e=0;e<12;e++)n[e]=new RegExp("^"+t[e]+"$","i");return n}(r),weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("cv",{months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ӗнер] LT [сехетре]",nextWeek:"[Ҫитес] dddd LT [сехетре]",lastWeek:"[Иртнӗ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(t){return t+(/сехет$/i.exec(t)?"рен":/ҫул$/i.exec(t)?"тан":"ран")},past:"%s каялла",s:"пӗр-ик ҫеккунт",m:"пӗр минут",mm:"%d минут",h:"пӗр сехет",hh:"%d сехет",d:"пӗр кун",dd:"%d кун",M:"пӗр уйӑх",MM:"%d уйӑх",y:"пӗр ҫул",yy:"%d ҫул"},dayOfMonthOrdinalParse:/\d{1,2}-мӗш/,ordinal:"%d-мӗш",week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(t){var e=t,n="",r=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"];return e>20?n=40===e||50===e||60===e||80===e||100===e?"fed":"ain":e>0&&(n=r[e]),t+n},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"på dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n,r){var a={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[t+" Tage",t+" Tagen"],M:["ein Monat","einem Monat"],MM:[t+" Monate",t+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[t+" Jahre",t+" Jahren"]};return e?a[n][0]:a[n][1]}return t.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:e,mm:"%d Minuten",h:e,hh:"%d Stunden",d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n,r){var a={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[t+" Tage",t+" Tagen"],M:["ein Monat","einem Monat"],MM:[t+" Monate",t+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[t+" Jahre",t+" Jahren"]};return e?a[n][0]:a[n][1]}return t.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:e,mm:"%d Minuten",h:e,hh:"%d Stunden",d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n,r){var a={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[t+" Tage",t+" Tagen"],M:["ein Monat","einem Monat"],MM:[t+" Monate",t+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[t+" Jahre",t+" Jahren"]};return e?a[n][0]:a[n][1]}return t.defineLocale("de-ch",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._März_April_Mai_Juni_Juli_Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH.mm",LLLL:"dddd, D. MMMM YYYY HH.mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:e,mm:"%d Minuten",h:e,hh:"%d Stunden",d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e=["ޖެނުއަރީ","ފެބްރުއަރީ","މާރިޗު","އޭޕްރީލު","މޭ","ޖޫން","ޖުލައި","އޯގަސްޓު","ސެޕްޓެމްބަރު","އޮކްޓޯބަރު","ނޮވެމްބަރު","ޑިސެމްބަރު"],n=["އާދިއްތަ","ހޯމަ","އަންގާރަ","ބުދަ","ބުރާސްފަތި","ހުކުރު","ހޮނިހިރު"];return t.defineLocale("dv",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/މކ|މފ/,isPM:function(t){return"މފ"===t},meridiem:function(t,e,n){return t<12?"މކ":"މފ"},calendar:{sameDay:"[މިއަދު] LT",nextDay:"[މާދަމާ] LT",nextWeek:"dddd LT",lastDay:"[އިއްޔެ] LT",lastWeek:"[ފާއިތުވި] dddd LT",sameElse:"L"},relativeTime:{future:"ތެރޭގައި %s",past:"ކުރިން %s",s:"ސިކުންތުކޮޅެއް",m:"މިނިޓެއް",mm:"މިނިޓު %d",h:"ގަޑިއިރެއް",hh:"ގަޑިއިރު %d",d:"ދުވަހެއް",dd:"ދުވަސް %d",M:"މަހެއް",MM:"މަސް %d",y:"އަހަރެއް",yy:"އަހަރު %d"},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/,/g,"،")},week:{dow:7,doy:12}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}return t.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(t,e){return t?/D/.test(e.substring(0,e.indexOf("MMMM")))?this._monthsGenitiveEl[t.month()]:this._monthsNominativeEl[t.month()]:this._monthsNominativeEl},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(t,e,n){return t>11?n?"μμ":"ΜΜ":n?"πμ":"ΠΜ"},isPM:function(t){return"μ"===(t+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(t,n){var r=this._calendarEl[t],a=n&&n.hours();return e(r)&&(r=r.apply(n)),r.replace("{}",a%12==1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},dayOfMonthOrdinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),weekdays:"dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_ĵaŭ_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_ĵa_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D[-a de] MMMM, YYYY",LLL:"D[-a de] MMMM, YYYY HH:mm",LLLL:"dddd, [la] D[-a de] MMMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(t){return"p"===t.charAt(0).toLowerCase()},meridiem:function(t,e,n){return t>11?n?"p.t.m.":"P.T.M.":n?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd [je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasinta] dddd [je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"antaŭ %s",s:"sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");return t.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsParseExact:!0,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");return t.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsParseExact:!0,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n,r){var a={s:["mõne sekundi","mõni sekund","paar sekundit"],m:["ühe minuti","üks minut"],mm:[t+" minuti",t+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[t+" tunni",t+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[t+" kuu",t+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[t+" aasta",t+" aastat"]};return e?a[n][2]?a[n][2]:a[n][1]:r?a[n][0]:a[n][1]}return t.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:"%d päeva",M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},n={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"};return t.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(t){return/بعد از ظهر/.test(t)},meridiem:function(t,e,n){return t<12?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چند ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(t){return t.replace(/[۰-۹]/g,function(t){return n[t]}).replace(/،/g,",")},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]}).replace(/,/g,"،")},dayOfMonthOrdinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,r,a){var i="";switch(r){case"s":return a?"muutaman sekunnin":"muutama sekunti";case"m":return a?"minuutin":"minuutti";case"mm":i=a?"minuutin":"minuuttia";break;case"h":return a?"tunnin":"tunti";case"hh":i=a?"tunnin":"tuntia";break;case"d":return a?"päivän":"päivä";case"dd":i=a?"päivän":"päivää";break;case"M":return a?"kuukauden":"kuukausi";case"MM":i=a?"kuukauden":"kuukautta";break;case"y":return a?"vuoden":"vuosi";case"yy":i=a?"vuoden":"vuotta"}return i=n(t,a)+" "+i}function n(t,e){return t<10?e?a[t]:r[t]:t}var r="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),a=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",r[7],r[8],r[9]];return t.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",m:"ein minutt",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaði",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(t,e){switch(e){case"D":return t+(1===t?"er":"");default:case"M":case"Q":case"DDD":case"d":return t+(1===t?"er":"e");case"w":case"W":return t+(1===t?"re":"e")}},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(t,e){switch(e){default:case"M":case"Q":case"D":case"DDD":case"d":return t+(1===t?"er":"e");case"w":case"W":return t+(1===t?"re":"e")}}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(t,e){switch(e){default:case"M":case"Q":case"D":case"DDD":case"d":return t+(1===t?"er":"e");case"w":case"W":return t+(1===t?"re":"e")}},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),n="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");return t.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[ôfrûne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e=["Am Faoilleach","An Gearran","Am Màrt","An Giblean","An Cèitean","An t-Ògmhios","An t-Iuchar","An Lùnastal","An t-Sultain","An Dàmhair","An t-Samhain","An Dùbhlachd"],n=["Faoi","Gear","Màrt","Gibl","Cèit","Ògmh","Iuch","Lùn","Sult","Dàmh","Samh","Dùbh"],r=["Didòmhnaich","Diluain","Dimàirt","Diciadain","Diardaoin","Dihaoine","Disathairne"],a=["Did","Dil","Dim","Dic","Dia","Dih","Dis"],i=["Dò","Lu","Mà","Ci","Ar","Ha","Sa"];return t.defineLocale("gd",{months:e,monthsShort:n,monthsParseExact:!0,weekdays:r,weekdaysShort:a,weekdaysMin:i,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-màireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-dè aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(t){return t+(1===t?"d":t%10==2?"na":"mh")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(t){return 0===t.indexOf("un")?"n"+t:"en "+t},past:"hai %s",s:"uns segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n,r){var a={s:["thodde secondanim","thodde second"],m:["eka mintan","ek minute"],mm:[t+" mintanim",t+" mintam"],h:["eka horan","ek hor"],hh:[t+" horanim",t+" hor"],d:["eka disan","ek dis"],dd:[t+" disanim",t+" dis"],M:["eka mhoinean","ek mhoino"],MM:[t+" mhoineanim",t+" mhoine"],y:["eka vorsan","ek voros"],yy:[t+" vorsanim",t+" vorsam"]};return e?a[n][0]:a[n][1]}return t.defineLocale("gom-latn",{months:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Ieta to] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fatlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(t,e){switch(e){case"D":return t+"er";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return t}},week:{dow:1,doy:4},meridiemParse:/rati|sokalli|donparam|sanje/,meridiemHour:function(t,e){return 12===t&&(t=0),"rati"===e?t<4?t:t+12:"sokalli"===e?t:"donparam"===e?t>12?t:t+12:"sanje"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"rati":t<12?"sokalli":t<16?"donparam":t<20?"sanje":"rati"}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(t){return 2===t?"שעתיים":t+" שעות"},d:"יום",dd:function(t){return 2===t?"יומיים":t+" ימים"},M:"חודש",MM:function(t){return 2===t?"חודשיים":t+" חודשים"},y:"שנה",yy:function(t){return 2===t?"שנתיים":t%10==0&&10!==t?t+" שנה":t+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(t){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(t)},meridiem:function(t,e,n){return t<5?"לפנות בוקר":t<10?"בבוקר":t<12?n?'לפנה"צ':"לפני הצהריים":t<18?n?'אחה"צ':"אחרי הצהריים":"בערב"}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};return t.defineLocale("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(t){return t.replace(/[१२३४५६७८९०]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(t,e){return 12===t&&(t=0),"रात"===e?t<4?t:t+12:"सुबह"===e?t:"दोपहर"===e?t>=10?t:t+12:"शाम"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"रात":t<10?"सुबह":t<17?"दोपहर":t<20?"शाम":"रात"},week:{dow:0,doy:6}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n){var r=t+" ";switch(n){case"m":return e?"jedna minuta":"jedne minute";case"mm":return r+=1===t?"minuta":2===t||3===t||4===t?"minute":"minuta";case"h":return e?"jedan sat":"jednog sata";case"hh":return r+=1===t?"sat":2===t||3===t||4===t?"sata":"sati";case"dd":return r+=1===t?"dan":"dana";case"MM":return r+=1===t?"mjesec":2===t||3===t||4===t?"mjeseca":"mjeseci";case"yy":return r+=1===t?"godina":2===t||3===t||4===t?"godine":"godina"}}return t.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:e,mm:e,h:e,hh:e,d:"dan",dd:e,M:"mjesec",MM:e,y:"godinu",yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n,r){var a=t;switch(n){case"s":return r||e?"néhány másodperc":"néhány másodperce";case"m":return"egy"+(r||e?" perc":" perce");case"mm":return a+(r||e?" perc":" perce");case"h":return"egy"+(r||e?" óra":" órája");case"hh":return a+(r||e?" óra":" órája");case"d":return"egy"+(r||e?" nap":" napja");case"dd":return a+(r||e?" nap":" napja");case"M":return"egy"+(r||e?" hónap":" hónapja");case"MM":return a+(r||e?" hónap":" hónapja");case"y":return"egy"+(r||e?" év":" éve");case"yy":return a+(r||e?" év":" éve")}return""}function n(t){return(t?"":"[múlt] ")+"["+r[this.day()]+"] LT[-kor]"}var r="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");return t.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(t){return"u"===t.charAt(1).toLowerCase()},meridiem:function(t,e,n){return t<12?!0===n?"de":"DE":!0===n?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return n.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return n.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("hy-am",{months:{format:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_"),standalone:"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր".split("_")},monthsShort:"հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_"),weekdays:"կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_"),weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., HH:mm",LLLL:"dddd, D MMMM YYYY թ., HH:mm"},calendar:{sameDay:"[այսօր] LT",nextDay:"[վաղը] LT",lastDay:"[երեկ] LT",nextWeek:function(){return"dddd [օրը ժամը] LT"},lastWeek:function(){return"[անցած] dddd [օրը ժամը] LT"},sameElse:"L"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"},meridiemParse:/գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,isPM:function(t){return/^(ցերեկվա|երեկոյան)$/.test(t)},meridiem:function(t){return t<4?"գիշերվա":t<12?"առավոտվա":t<17?"ցերեկվա":"երեկոյան"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(ին|րդ)/,ordinal:function(t,e){switch(e){case"DDD":case"w":case"W":case"DDDo":return 1===t?t+"-ին":t+"-րդ";default:return t}},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),"pagi"===e?t:"siang"===e?t>=11?t:t+12:"sore"===e||"malam"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"pagi":t<15?"siang":t<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t){return t%100==11||t%10!=1}function n(t,n,r,a){var i=t+" ";switch(r){case"s":return n||a?"nokkrar sekúndur":"nokkrum sekúndum";case"m":return n?"mínúta":"mínútu";case"mm":return e(t)?i+(n||a?"mínútur":"mínútum"):n?i+"mínúta":i+"mínútu";case"hh":return e(t)?i+(n||a?"klukkustundir":"klukkustundum"):i+"klukkustund";case"d":return n?"dagur":a?"dag":"degi";case"dd":return e(t)?n?i+"dagar":i+(a?"daga":"dögum"):n?i+"dagur":i+(a?"dag":"degi");case"M":return n?"mánuður":a?"mánuð":"mánuði";case"MM":return e(t)?n?i+"mánuðir":i+(a?"mánuði":"mánuðum"):n?i+"mánuður":i+(a?"mánuð":"mánuði");case"y":return n||a?"ár":"ári";case"yy":return e(t)?i+(n||a?"ár":"árum"):i+(n||a?"ár":"ári")}}return t.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:n,m:n,mm:n,h:"klukkustund",hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(t){return(/^[0-9].+$/.test(t)?"tra":"in")+" "+t},past:"%s fa",s:"alcuni secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ja",{months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 HH:mm dddd",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日 HH:mm dddd"},meridiemParse:/午前|午後/i,isPM:function(t){return"午後"===t},meridiem:function(t,e,n){return t<12?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}日/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";default:return t}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(t,e){return 12===t&&(t=0),"enjing"===e?t:"siyang"===e?t>=11?t:t+12:"sonten"===e||"ndalu"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"enjing":t<15?"siyang":t<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ka",{months:{standalone:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),format:"იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს".split("_")},monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:{standalone:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),format:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(t){return/(წამი|წუთი|საათი|წელი)/.test(t)?t.replace(/ი$/,"ში"):t+"ში"},past:function(t){return/(წამი|წუთი|საათი|დღე|თვე)/.test(t)?t.replace(/(ი|ე)$/,"ის უკან"):/წელი/.test(t)?t.replace(/წელი$/,"წლის უკან"):void 0},s:"რამდენიმე წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},dayOfMonthOrdinalParse:/0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,ordinal:function(t){return 0===t?t:1===t?t+"-ლი":t<20||t<=100&&t%20==0||t%100==0?"მე-"+t:t+"-ე"},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={0:"-ші",1:"-ші",2:"-ші",3:"-ші",4:"-ші",5:"-ші",6:"-шы",7:"-ші",8:"-ші",9:"-шы",10:"-шы",20:"-шы",30:"-шы",40:"-шы",50:"-ші",60:"-шы",70:"-ші",80:"-ші",90:"-шы",100:"-ші"};return t.defineLocale("kk",{months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгін сағат] LT",nextDay:"[Ертең сағат] LT",nextWeek:"dddd [сағат] LT",lastDay:"[Кеше сағат] LT",lastWeek:"[Өткен аптаның] dddd [сағат] LT",sameElse:"L"},relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(ші|шы)/,ordinal:function(t){var n=t%10,r=t>=100?100:null;return t+(e[t]||e[n]||e[r])},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("km",{months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysMin:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[ថ្ងៃនេះ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"೧",2:"೨",3:"೩",4:"೪",5:"೫",6:"೬",7:"೭",8:"೮",9:"೯",0:"೦"},n={"೧":"1","೨":"2","೩":"3","೪":"4","೫":"5","೬":"6","೭":"7","೮":"8","೯":"9","೦":"0"};return t.defineLocale("kn",{months:"ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್".split("_"),monthsShort:"ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬ_ಅಕ್ಟೋಬ_ನವೆಂಬ_ಡಿಸೆಂಬ".split("_"),monthsParseExact:!0,weekdays:"ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ".split("_"),weekdaysShort:"ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ".split("_"),weekdaysMin:"ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[ಇಂದು] LT",nextDay:"[ನಾಳೆ] LT",nextWeek:"dddd, LT",lastDay:"[ನಿನ್ನೆ] LT",lastWeek:"[ಕೊನೆಯ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ನಂತರ",past:"%s ಹಿಂದೆ",s:"ಕೆಲವು ಕ್ಷಣಗಳು",m:"ಒಂದು ನಿಮಿಷ",mm:"%d ನಿಮಿಷ",h:"ಒಂದು ಗಂಟೆ",hh:"%d ಗಂಟೆ",d:"ಒಂದು ದಿನ",dd:"%d ದಿನ",M:"ಒಂದು ತಿಂಗಳು",MM:"%d ತಿಂಗಳು",y:"ಒಂದು ವರ್ಷ",yy:"%d ವರ್ಷ"},preparse:function(t){return t.replace(/[೧೨೩೪೫೬೭೮೯೦]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,meridiemHour:function(t,e){return 12===t&&(t=0),"ರಾತ್ರಿ"===e?t<4?t:t+12:"ಬೆಳಿಗ್ಗೆ"===e?t:"ಮಧ್ಯಾಹ್ನ"===e?t>=10?t:t+12:"ಸಂಜೆ"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"ರಾತ್ರಿ":t<10?"ಬೆಳಿಗ್ಗೆ":t<17?"ಮಧ್ಯಾಹ್ನ":t<20?"ಸಂಜೆ":"ರಾತ್ರಿ"},dayOfMonthOrdinalParse:/\d{1,2}(ನೇ)/,ordinal:function(t){return t+"ನೇ"},week:{dow:0,doy:6}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},dayOfMonthOrdinalParse:/\d{1,2}일/,ordinal:"%d일",meridiemParse:/오전|오후/,isPM:function(t){return"오후"===t},meridiem:function(t,e,n){return t<12?"오전":"오후"}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={0:"-чү",1:"-чи",2:"-чи",3:"-чү",4:"-чү",5:"-чи",6:"-чы",7:"-чи",8:"-чи",9:"-чу",10:"-чу",20:"-чы",30:"-чу",40:"-чы",50:"-чү",60:"-чы",70:"-чи",80:"-чи",90:"-чу",100:"-чү"};return t.defineLocale("ky",{months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),monthsShort:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),weekdays:"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби".split("_"),weekdaysShort:"Жек_Дүй_Шей_Шар_Бей_Жум_Ише".split("_"),weekdaysMin:"Жк_Дй_Шй_Шр_Бй_Жм_Иш".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгүн саат] LT",nextDay:"[Эртең саат] LT",nextWeek:"dddd [саат] LT",lastDay:"[Кече саат] LT",lastWeek:"[Өткен аптанын] dddd [күнү] [саат] LT",sameElse:"L"},relativeTime:{future:"%s ичинде",past:"%s мурун",s:"бирнече секунд",m:"бир мүнөт",mm:"%d мүнөт",h:"бир саат",hh:"%d саат",d:"бир күн",dd:"%d күн",M:"бир ай",MM:"%d ай",y:"бир жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(чи|чы|чү|чу)/,ordinal:function(t){var n=t%10,r=t>=100?100:null;return t+(e[t]||e[n]||e[r])},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n,r){var a={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return e?a[n][0]:a[n][1]}function n(t){return a(t.substr(0,t.indexOf(" ")))?"a "+t:"an "+t}function r(t){return a(t.substr(0,t.indexOf(" ")))?"viru "+t:"virun "+t}function a(t){if(t=parseInt(t,10),isNaN(t))return!1;if(t<0)return!0;if(t<10)return 4<=t&&t<=7;if(t<100){var e=t%10,n=t/10;return a(0===e?n:e)}if(t<1e4){for(;t>=10;)t/=10;return a(t)}return t/=1e3,a(t)}return t.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:n,past:r,s:"e puer Sekonnen",m:e,mm:"%d Minutten",h:e,hh:"%d Stonnen",d:e,dd:"%d Deeg",M:e,MM:"%d Méint",y:e,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("lo",{months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},meridiemParse:/ຕອນເຊົ້າ|ຕອນແລງ/,isPM:function(t){return"ຕອນແລງ"===t},meridiem:function(t,e,n){return t<12?"ຕອນເຊົ້າ":"ຕອນແລງ"},calendar:{sameDay:"[ມື້ນີ້ເວລາ] LT",nextDay:"[ມື້ອື່ນເວລາ] LT",nextWeek:"[ວັນ]dddd[ໜ້າເວລາ] LT",lastDay:"[ມື້ວານນີ້ເວລາ] LT",lastWeek:"[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT",sameElse:"L"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"},dayOfMonthOrdinalParse:/(ທີ່)\d{1,2}/,ordinal:function(t){return"ທີ່"+t}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n,r){return e?"kelios sekundės":r?"kelių sekundžių":"kelias sekundes"}function n(t,e,n,r){return e?a(n)[0]:r?a(n)[1]:a(n)[2]}function r(t){return t%10==0||t>10&&t<20}function a(t){return o[t].split("_")}function i(t,e,i,o){var s=t+" ";return 1===t?s+n(t,e,i[0],o):e?s+(r(t)?a(i)[1]:a(i)[0]):o?s+a(i)[1]:s+(r(t)?a(i)[1]:a(i)[2])}var o={m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"};return t.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:e,m:n,mm:i,h:n,hh:i,d:n,dd:i,M:n,MM:i,y:n,yy:i},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(t){return t+"-oji"},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n){return n?e%10==1&&e%100!=11?t[2]:t[3]:e%10==1&&e%100!=11?t[0]:t[1]}function n(t,n,r){return t+" "+e(i[r],t,n)}function r(t,n,r){return e(i[r],t,n)}function a(t,e){return e?"dažas sekundes":"dažām sekundēm"}var i={m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};return t.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:a,m:r,mm:n,h:r,hh:n,d:r,dd:n,M:r,MM:n,y:r,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={words:{m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(t,e){return 1===t?e[0]:t>=2&&t<=4?e[1]:e[2]},translate:function(t,n,r){var a=e.words[r];return 1===r.length?n?a[0]:a[1]:t+" "+e.correctGrammaticalCase(t,a)}};return t.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedjelje] [u] LT","[prošlog] [ponedjeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srijede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:"dan",dd:e.translate,M:"mjesec",MM:e.translate,y:"godinu",yy:e.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("mi",{months:"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei".split("_"),weekdaysShort:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),weekdaysMin:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(t){var e=t%10,n=t%100;return 0===t?t+"-ев":0===n?t+"-ен":n>10&&n<20?t+"-ти":1===e?t+"-ви":2===e?t+"-ри":7===e||8===e?t+"-ми":t+"-ти"},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),monthsParseExact:!0,weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiemParse:/രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,meridiemHour:function(t,e){return 12===t&&(t=0),"രാത്രി"===e&&t>=4||"ഉച്ച കഴിഞ്ഞ്"===e||"വൈകുന്നേരം"===e?t+12:t},meridiem:function(t,e,n){return t<4?"രാത്രി":t<12?"രാവിലെ":t<17?"ഉച്ച കഴിഞ്ഞ്":t<20?"വൈകുന്നേരം":"രാത്രി"}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n,r){var a="";if(e)switch(n){case"s":a="काही सेकंद";break;case"m":a="एक मिनिट";break;case"mm":a="%d मिनिटे";break;case"h":a="एक तास";break;case"hh":a="%d तास";break;case"d":a="एक दिवस";break;case"dd":a="%d दिवस";break;case"M":a="एक महिना";break;case"MM":a="%d महिने";break;case"y":a="एक वर्ष";break;case"yy":a="%d वर्षे"}else switch(n){case"s":a="काही सेकंदां";break;case"m":a="एका मिनिटा";break;case"mm":a="%d मिनिटां";break;case"h":a="एका तासा";break;case"hh":a="%d तासां";break;case"d":a="एका दिवसा";break;case"dd":a="%d दिवसां";break;case"M":a="एका महिन्या";break;case"MM":a="%d महिन्यां";break;case"y":a="एका वर्षा";break;case"yy":a="%d वर्षां"}return a.replace(/%d/i,t)}var n={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},r={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};return t.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%sमध्ये",past:"%sपूर्वी",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},preparse:function(t){return t.replace(/[१२३४५६७८९०]/g,function(t){return r[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return n[t]})},meridiemParse:/रात्री|सकाळी|दुपारी|सायंकाळी/,meridiemHour:function(t,e){return 12===t&&(t=0),"रात्री"===e?t<4?t:t+12:"सकाळी"===e?t:"दुपारी"===e?t>=10?t:t+12:"सायंकाळी"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"रात्री":t<10?"सकाळी":t<17?"दुपारी":t<20?"सायंकाळी":"रात्री"},week:{dow:0,doy:6}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),"pagi"===e?t:"tengahari"===e?t>=11?t:t+12:"petang"===e||"malam"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"pagi":t<15?"tengahari":t<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),"pagi"===e?t:"tengahari"===e?t>=11?t:t+12:"petang"===e||"malam"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"pagi":t<15?"tengahari":t<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"၁",2:"၂",3:"၃",4:"၄",5:"၅",6:"၆",7:"၇",8:"၈",9:"၉",0:"၀"},n={"၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","၀":"0"};return t.defineLocale("my",{months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ယနေ.] LT [မှာ]",nextDay:"[မနက်ဖြန်] LT [မှာ]",nextWeek:"dddd LT [မှာ]",lastDay:"[မနေ.က] LT [မှာ]",lastWeek:"[ပြီးခဲ့သော] dddd LT [မှာ]",sameElse:"L"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"},preparse:function(t){return t.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};return t.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),monthsParseExact:!0,weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(t){return t.replace(/[१२३४५६७८९०]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(t,e){return 12===t&&(t=0),"राति"===e?t<4?t:t+12:"बिहान"===e?t:"दिउँसो"===e?t>=10?t:t+12:"साँझ"===e?t+12:void 0},meridiem:function(t,e,n){return t<3?"राति":t<12?"बिहान":t<16?"दिउँसो":t<20?"साँझ":"राति"},calendar:{sameDay:"[आज] LT",nextDay:"[भोलि] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडि",s:"केही क्षण",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:0,doy:6}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),r=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],a=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;return t.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:a,monthsShortRegex:a,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),r=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],a=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;return t.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:a,monthsShortRegex:a,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"੧",2:"੨",3:"੩",4:"੪",5:"੫",6:"੬",7:"੭",8:"੮",9:"੯",0:"੦"},n={"੧":"1","੨":"2","੩":"3","੪":"4","੫":"5","੬":"6","੭":"7","੮":"8","੯":"9","੦":"0"};return t.defineLocale("pa-in",{months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),longDateFormat:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},calendar:{sameDay:"[ਅਜ] LT",nextDay:"[ਕਲ] LT",nextWeek:"dddd, LT",lastDay:"[ਕਲ] LT",lastWeek:"[ਪਿਛਲੇ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"},preparse:function(t){return t.replace(/[੧੨੩੪੫੬੭੮੯੦]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,meridiemHour:function(t,e){return 12===t&&(t=0),"ਰਾਤ"===e?t<4?t:t+12:"ਸਵੇਰ"===e?t:"ਦੁਪਹਿਰ"===e?t>=10?t:t+12:"ਸ਼ਾਮ"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"ਰਾਤ":t<10?"ਸਵੇਰ":t<17?"ਦੁਪਹਿਰ":t<20?"ਸ਼ਾਮ":"ਰਾਤ"},week:{dow:0,doy:6}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t){return t%10<5&&t%10>1&&~~(t/10)%10!=1}function n(t,n,r){var a=t+" ";switch(r){case"m":return n?"minuta":"minutę";case"mm":return a+(e(t)?"minuty":"minut");case"h":return n?"godzina":"godzinę";case"hh":return a+(e(t)?"godziny":"godzin");case"MM":return a+(e(t)?"miesiące":"miesięcy");case"yy":return a+(e(t)?"lata":"lat")}}var r="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),a="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");return t.defineLocale("pl",{months:function(t,e){return t?""===e?"("+a[t.month()]+"|"+r[t.month()]+")":/D MMMM/.test(e)?a[t.month()]:r[t.month()]:r},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:"[W] dddd [o] LT",lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:n,mm:n,h:n,hh:n,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:n,y:"rok",yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("pt",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("pt-br",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"poucos segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº"})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n){var r={mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"},a=" ";return(t%100>=20||t>=100&&t%100==0)&&(a=" de "),t+a+r[n]}return t.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",m:"un minut",mm:e,h:"o oră",hh:e,d:"o zi",dd:e,M:"o lună",MM:e,y:"un an",yy:e},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e){var n=t.split("_");return e%10==1&&e%100!=11?n[0]:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?n[1]:n[2]}function n(t,n,r){var a={mm:n?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};return"m"===r?n?"минута":"минуту":t+" "+e(a[r],+t)}var r=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i];return t.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:r,longMonthsParse:r,shortMonthsParse:r,monthsRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsShortRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,monthsShortStrictRegex:/^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сегодня в] LT",nextDay:"[Завтра в] LT",lastDay:"[Вчера в] LT",nextWeek:function(t){if(t.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В следующее] dddd [в] LT";case 1:case 2:case 4:return"[В следующий] dddd [в] LT";case 3:case 5:case 6:return"[В следующую] dddd [в] LT"}},lastWeek:function(t){if(t.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",m:n,mm:n,h:"час",hh:n,d:"день",dd:n,M:"месяц",MM:n,y:"год",yy:n},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(t){return/^(дня|вечера)$/.test(t)},meridiem:function(t,e,n){return t<4?"ночи":t<12?"утра":t<17?"дня":"вечера"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(t,e){switch(e){case"M":case"d":case"DDD":return t+"-й";case"D":return t+"-го";case"w":case"W":return t+"-я";default:return t}},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e=["جنوري","فيبروري","مارچ","اپريل","مئي","جون","جولاءِ","آگسٽ","سيپٽمبر","آڪٽوبر","نومبر","ڊسمبر"],n=["آچر","سومر","اڱارو","اربع","خميس","جمع","ڇنڇر"];return t.defineLocale("sd",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(t){return"شام"===t},meridiem:function(t,e,n){return t<12?"صبح":"شام"},calendar:{sameDay:"[اڄ] LT",nextDay:"[سڀاڻي] LT",nextWeek:"dddd [اڳين هفتي تي] LT",lastDay:"[ڪالهه] LT",lastWeek:"[گزريل هفتي] dddd [تي] LT",sameElse:"L"},relativeTime:{future:"%s پوء",past:"%s اڳ",s:"چند سيڪنڊ",m:"هڪ منٽ",mm:"%d منٽ",h:"هڪ ڪلاڪ",hh:"%d ڪلاڪ",d:"هڪ ڏينهن",dd:"%d ڏينهن",M:"هڪ مهينو",MM:"%d مهينا",y:"هڪ سال",yy:"%d سال"},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/,/g,"،")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("se",{months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("si",{months:"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්".split("_"),monthsShort:"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ".split("_"),weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},calendar:{sameDay:"[අද] LT[ට]",nextDay:"[හෙට] LT[ට]",nextWeek:"dddd LT[ට]",lastDay:"[ඊයේ] LT[ට]",lastWeek:"[පසුගිය] dddd LT[ට]",sameElse:"L"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",m:"මිනිත්තුව",mm:"මිනිත්තු %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"},dayOfMonthOrdinalParse:/\d{1,2} වැනි/,ordinal:function(t){return t+" වැනි"},meridiemParse:/පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,isPM:function(t){return"ප.ව."===t||"පස් වරු"===t},meridiem:function(t,e,n){return t>11?n?"ප.ව.":"පස් වරු":n?"පෙ.ව.":"පෙර වරු"}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t){return t>1&&t<5}function n(t,n,r,a){var i=t+" ";switch(r){case"s":return n||a?"pár sekúnd":"pár sekundami";case"m":return n?"minúta":a?"minútu":"minútou";case"mm":return n||a?i+(e(t)?"minúty":"minút"):i+"minútami";case"h":return n?"hodina":a?"hodinu":"hodinou";case"hh":return n||a?i+(e(t)?"hodiny":"hodín"):i+"hodinami";case"d":return n||a?"deň":"dňom";case"dd":return n||a?i+(e(t)?"dni":"dní"):i+"dňami";case"M":return n||a?"mesiac":"mesiacom";case"MM":return n||a?i+(e(t)?"mesiace":"mesiacov"):i+"mesiacmi";case"y":return n||a?"rok":"rokom";case"yy":return n||a?i+(e(t)?"roky":"rokov"):i+"rokmi"}}var r="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),a="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");return t.defineLocale("sk",{months:r,monthsShort:a,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n,r){var a=t+" ";switch(n){case"s":return e||r?"nekaj sekund":"nekaj sekundami";case"m":return e?"ena minuta":"eno minuto";case"mm":return a+=1===t?e?"minuta":"minuto":2===t?e||r?"minuti":"minutama":t<5?e||r?"minute":"minutami":e||r?"minut":"minutami";case"h":return e?"ena ura":"eno uro";case"hh":return a+=1===t?e?"ura":"uro":2===t?e||r?"uri":"urama":t<5?e||r?"ure":"urami":e||r?"ur":"urami";case"d":return e||r?"en dan":"enim dnem";case"dd":return a+=1===t?e||r?"dan":"dnem":2===t?e||r?"dni":"dnevoma":e||r?"dni":"dnevi";case"M":return e||r?"en mesec":"enim mesecem";case"MM":return a+=1===t?e||r?"mesec":"mesecem":2===t?e||r?"meseca":"mesecema":t<5?e||r?"mesece":"meseci":e||r?"mesecev":"meseci";case"y":return e||r?"eno leto":"enim letom";case"yy":return a+=1===t?e||r?"leto":"letom":2===t?e||r?"leti":"letoma":t<5?e||r?"leta":"leti":e||r?"let":"leti"}}return t.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(t){return"M"===t.charAt(0)},meridiem:function(t,e,n){return t<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={words:{m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(t,e){return 1===t?e[0]:t>=2&&t<=4?e[1]:e[2]},translate:function(t,n,r){var a=e.words[r];return 1===r.length?n?a[0]:a[1]:t+" "+e.correctGrammaticalCase(t,a)}};return t.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:"dan",dd:e.translate,M:"mesec",MM:e.translate,y:"godinu",yy:e.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={words:{m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(t,e){return 1===t?e[0]:t>=2&&t<=4?e[1]:e[2]},translate:function(t,n,r){var a=e.words[r];return 1===r.length?n?a[0]:a[1]:t+" "+e.correctGrammaticalCase(t,a)}};return t.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){return["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:"дан",dd:e.translate,M:"месец",MM:e.translate,y:"годину",yy:e.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(t,e,n){return t<11?"ekuseni":t<15?"emini":t<19?"entsambama":"ebusuku"},meridiemHour:function(t,e){return 12===t&&(t=0),"ekuseni"===e?t:"emini"===e?t>=11?t:t+12:"entsambama"===e||"ebusuku"===e?0===t?0:t+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}(e|a)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"e":1===e?"a":2===e?"a":"e")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"masiku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"௧",2:"௨",3:"௩",4:"௪",5:"௫",6:"௬",7:"௭",8:"௮",9:"௯",0:"௦"},n={"௧":"1","௨":"2","௩":"3","௪":"4","௫":"5","௬":"6","௭":"7","௮":"8","௯":"9","௦":"0"};return t.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},dayOfMonthOrdinalParse:/\d{1,2}வது/,ordinal:function(t){return t+"வது"},preparse:function(t){return t.replace(/[௧௨௩௪௫௬௭௮௯௦]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(t,e,n){return t<2?" யாமம்":t<6?" வைகறை":t<10?" காலை":t<14?" நண்பகல்":t<18?" எற்பாடு":t<22?" மாலை":" யாமம்"},meridiemHour:function(t,e){return 12===t&&(t=0),"யாமம்"===e?t<2?t:t+12:"வைகறை"===e||"காலை"===e?t:"நண்பகல்"===e&&t>=10?t:t+12},week:{dow:0,doy:6}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("te",{months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),monthsParseExact:!0,weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[నేడు] LT",nextDay:"[రేపు] LT",nextWeek:"dddd, LT",lastDay:"[నిన్న] LT",lastWeek:"[గత] dddd, LT",sameElse:"L"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"},dayOfMonthOrdinalParse:/\d{1,2}వ/,ordinal:"%dవ",meridiemParse:/రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,meridiemHour:function(t,e){return 12===t&&(t=0),"రాత్రి"===e?t<4?t:t+12:"ఉదయం"===e?t:"మధ్యాహ్నం"===e?t>=10?t:t+12:"సాయంత్రం"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"రాత్రి":t<10?"ఉదయం":t<17?"మధ్యాహ్నం":t<20?"సాయంత్రం":"రాత్రి"},week:{dow:0,doy:6}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sext_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Sex_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"minutu balun",m:"minutu ida",mm:"minutus %d",h:"horas ida",hh:"horas %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(t){return"หลังเที่ยง"===t},meridiem:function(t,e,n){return t<12?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(t){return t},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t){var e=t;return e=-1!==t.indexOf("jaj")?e.slice(0,-3)+"leS":-1!==t.indexOf("jar")?e.slice(0,-3)+"waQ":-1!==t.indexOf("DIS")?e.slice(0,-3)+"nem":e+" pIq"}function n(t){var e=t;return e=-1!==t.indexOf("jaj")?e.slice(0,-3)+"Hu’":-1!==t.indexOf("jar")?e.slice(0,-3)+"wen":-1!==t.indexOf("DIS")?e.slice(0,-3)+"ben":e+" ret"}function r(t,e,n,r){var i=a(t);switch(n){case"mm":return i+" tup";case"hh":return i+" rep";case"dd":return i+" jaj";case"MM":return i+" jar";case"yy":return i+" DIS"}}function a(t){var e=Math.floor(t%1e3/100),n=Math.floor(t%100/10),r=t%10,a="";return e>0&&(a+=i[e]+"vatlh"),n>0&&(a+=(""!==a?" ":"")+i[n]+"maH"),r>0&&(a+=(""!==a?" ":"")+i[r]),""===a?"pagh":a}var i="pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");return t.defineLocale("tlh",{months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa’leS] LT",nextWeek:"LLL",lastDay:"[wa’Hu’] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:e,past:n,s:"puS lup",m:"wa’ tup",mm:r,h:"wa’ rep",hh:r,d:"wa’ jaj",dd:r,M:"wa’ jar",MM:r,y:"wa’ DIS",yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};return t.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[haftaya] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen hafta] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},dayOfMonthOrdinalParse:/\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,ordinal:function(t){if(0===t)return t+"'ıncı";var n=t%10,r=t%100-n,a=t>=100?100:null;return t+(e[n]||e[r]||e[a])},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n,r){var a={s:["viensas secunds","'iensas secunds"],m:["'n míut","'iens míut"],mm:[t+" míuts",t+" míuts"],h:["'n þora","'iensa þora"],hh:[t+" þoras",t+" þoras"],d:["'n ziua","'iensa ziua"],dd:[t+" ziuas",t+" ziuas"],M:["'n mes","'iens mes"],MM:[t+" mesen",t+" mesen"],y:["'n ar","'iens ar"],yy:[t+" ars",t+" ars"]};return r?a[n][0]:e?a[n][0]:a[n][1]}return t.defineLocale("tzl",{months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(t){return"d'o"===t.toLowerCase()},meridiem:function(t,e,n){return t>11?n?"d'o":"D'O":n?"d'a":"D'A"},calendar:{sameDay:"[oxhi à] LT",nextDay:"[demà à] LT",nextWeek:"dddd [à] LT",lastDay:"[ieiri à] LT",lastWeek:"[sür el] dddd [lasteu à] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,doy:12}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("tzm-latn",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e){var n=t.split("_");return e%10==1&&e%100!=11?n[0]:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?n[1]:n[2]}function n(t,n,r){var a={mm:n?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:n?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};return"m"===r?n?"хвилина":"хвилину":"h"===r?n?"година":"годину":t+" "+e(a[r],+t)}function r(t,e){var n={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")};return t?n[/(\[[ВвУу]\]) ?dddd/.test(e)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(e)?"genitive":"nominative"][t.day()]:n.nominative}function a(t){return function(){return t+"о"+(11===this.hours()?"б":"")+"] LT"}}return t.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:r,weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:a("[Сьогодні "),nextDay:a("[Завтра "),lastDay:a("[Вчора "),nextWeek:a("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return a("[Минулої] dddd [").call(this);case 1:case 2:case 4:return a("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",m:n,mm:n,h:"годину",hh:n,d:"день",dd:n,M:"місяць",MM:n,y:"рік",yy:n},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(t){return/^(дня|вечора)$/.test(t)},meridiem:function(t,e,n){return t<4?"ночі":t<12?"ранку":t<17?"дня":"вечора"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го)/,ordinal:function(t,e){switch(e){case"M":case"d":case"DDD":case"w":case"W":return t+"-й";case"D":return t+"-го";default:return t}},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e=["جنوری","فروری","مارچ","اپریل","مئی","جون","جولائی","اگست","ستمبر","اکتوبر","نومبر","دسمبر"],n=["اتوار","پیر","منگل","بدھ","جمعرات","جمعہ","ہفتہ"];return t.defineLocale("ur",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(t){return"شام"===t},meridiem:function(t,e,n){return t<12?"صبح":"شام"},calendar:{sameDay:"[آج بوقت] LT",nextDay:"[کل بوقت] LT",nextWeek:"dddd [بوقت] LT",lastDay:"[گذشتہ روز بوقت] LT",lastWeek:"[گذشتہ] dddd [بوقت] LT",sameElse:"L"},relativeTime:{future:"%s بعد",past:"%s قبل",s:"چند سیکنڈ",m:"ایک منٹ",mm:"%d منٹ",h:"ایک گھنٹہ",hh:"%d گھنٹے",d:"ایک دن",dd:"%d دن",M:"ایک ماہ",MM:"%d ماہ",y:"ایک سال",yy:"%d سال"},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/,/g,"،")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(t){return/^ch$/i.test(t)},meridiem:function(t,e,n){return t<12?n?"sa":"SA":n?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(t){return t},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("x-pseudo",{months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),monthsParseExact:!0,weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~ódá~ý át] LT",nextDay:"[T~ómó~rró~w át] LT",nextWeek:"dddd [át] LT",lastDay:"[Ý~ést~érdá~ý át] LT",lastWeek:"[L~ást] dddd [át] LT",sameElse:"L"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("yo",{months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Ònì ni] LT",nextDay:"[Ọ̀la ni] LT",nextWeek:"dddd [Ọsẹ̀ tón'bọ] [ni] LT",lastDay:"[Àna ni] LT",lastWeek:"dddd [Ọsẹ̀ tólọ́] [ni] LT",sameElse:"L"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"},dayOfMonthOrdinalParse:/ọjọ́\s\d{1,2}/,ordinal:"ọjọ́ %d",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日Ah点mm分",LLLL:"YYYY年MMMD日ddddAh点mm分",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(t,e){return 12===t&&(t=0),"凌晨"===e||"早上"===e||"上午"===e?t:"下午"===e||"晚上"===e?t+12:t>=11?t:t+12},meridiem:function(t,e,n){var r=100*t+e;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";case"M":return t+"月";case"w":case"W":return t+"周";default:return t}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日 HH:mm",LLLL:"YYYY年MMMD日dddd HH:mm",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(t,e){return 12===t&&(t=0),"凌晨"===e||"早上"===e||"上午"===e?t:"中午"===e?t>=11?t:t+12:"下午"===e||"晚上"===e?t+12:void 0},meridiem:function(t,e,n){var r=100*t+e;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";case"M":return t+"月";case"w":case"W":return t+"週";default:return t}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日 HH:mm",LLLL:"YYYY年MMMD日dddd HH:mm",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(t,e){return 12===t&&(t=0),"凌晨"===e||"早上"===e||"上午"===e?t:"中午"===e?t>=11?t:t+12:"下午"===e||"晚上"===e?t+12:void 0},meridiem:function(t,e,n){var r=100*t+e;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";case"M":return t+"月";case"w":case"W":return t+"週";default:return t}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})})},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.getSubGraphs=e.indexNodes=e.getDepthFirstPos=e.addSubGraph=e.defaultStyle=e.clear=e.getClasses=e.getEdges=e.getVertices=e.getDirection=e.bindFunctions=e.setClickEvent=e.getTooltip=e.setClass=e.setDirection=e.addClass=e.updateLink=e.updateLinkInterpolate=e.addLink=e.addVertex=void 0;var a,i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o=n(1),s=n(156),u=r(s),l=n(6),c=r(l),d={},f=[],h=[],_=[],p={},m=0,y=[],g=e.addVertex=function(t,e,n,r){var a;void 0!==t&&0!==t.trim().length&&(void 0===d[t]&&(d[t]={id:t,styles:[],classes:[]}),void 0!==e&&(a=e.trim(),'"'===a[0]&&'"'===a[a.length-1]&&(a=a.substring(1,a.length-1)),d[t].text=a),void 0!==n&&(d[t].type=n),void 0!==n&&(d[t].type=n),void 0!==r&&null!==r&&r.forEach(function(e){d[t].styles.push(e)}))},v=e.addLink=function(t,e,n,r){o.logger.info("Got edge...",t,e);var a={start:t,end:e,type:void 0,text:""};r=n.text,void 0!==r&&(a.text=r.trim(),'"'===a.text[0]&&'"'===a.text[a.text.length-1]&&(a.text=a.text.substring(1,a.text.length-1))),void 0!==n&&(a.type=n.type,a.stroke=n.stroke),f.push(a)},M=e.updateLinkInterpolate=function(t,e){"default"===t?f.defaultInterpolate=e:f[t].interpolate=e},b=e.updateLink=function(t,e){"default"===t?f.defaultStyle=e:(-1===u.default.isSubstringInArray("fill",e)&&e.push("fill:none"),f[t].style=e)},k=e.addClass=function(t,e){void 0===h[t]&&(h[t]={id:t,styles:[]}),void 0!==e&&null!==e&&e.forEach(function(e){h[t].styles.push(e)})},L=e.setDirection=function(t){a=t},w=e.setClass=function(t,e){t.indexOf(",")>0?t.split(",").forEach(function(t){void 0!==d[t]&&d[t].classes.push(e)}):void 0!==d[t]&&d[t].classes.push(e)},x=function(t,e){void 0!==e&&(p[t]=e)},D=function(t,e){void 0!==e&&void 0!==d[t]&&y.push(function(n){var r=c.default.select(n).select("#"+t);null!==r&&r.on("click",function(){window[e](t)})})},Y=function(t,e){void 0!==e&&void 0!==d[t]&&y.push(function(n){var r=c.default.select(n).select("#"+t);null!==r&&r.on("click",function(){window.open(e,"newTab")})})},T=e.getTooltip=function(t){return p[t]},A=e.setClickEvent=function(t,e,n,r){t.indexOf(",")>0?t.split(",").forEach(function(t){x(t,r),D(t,e),Y(t,n)}):(x(t,r),D(t,e),Y(t,n))},S=e.bindFunctions=function(t){y.forEach(function(e){e(t)})},E=e.getDirection=function(){return a},j=e.getVertices=function(){return d},C=e.getEdges=function(){return f},F=e.getClasses=function(){return h},O=function(t){var e=c.default.select(".mermaidTooltip");null===e[0][0]&&(e=c.default.select("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),c.default.select(t).select("svg").selectAll("g.node").on("mouseover",function(){var t=c.default.select(this);if(null!==t.attr("title")){var n=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.html(t.attr("title")).style("left",n.left+(n.right-n.left)/2+"px").style("top",n.top-14+document.body.scrollTop+"px"),t.classed("hover",!0)}}).on("mouseout",function(){e.transition().duration(500).style("opacity",0),c.default.select(this).classed("hover",!1)})};y.push(O);var H=e.clear=function(){d={},h={},f=[],y=[],y.push(O),_=[],m=0,p=[]},P=e.defaultStyle=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},N=e.addSubGraph=function(t,e){var n=[];n=function(t){var e={boolean:{},number:{},string:{}},n=[];return t.filter(function(t){var r=void 0===t?"undefined":i(t);return" "!==t&&(r in e?!e[r].hasOwnProperty(t)&&(e[r][t]=!0):!(n.indexOf(t)>=0)&&n.push(t))})}(n.concat.apply(n,t));var r={id:"subGraph"+m,nodes:n,title:e};return _.push(r),m+=1,r.id},B=function(t){var e;for(e=0;e<_.length;e++)if(_[e].id===t)return e;return-1},I=-1,R=[],z=function t(e,n){var r=_[n].nodes;if(!((I+=1)>2e3)){if(R[I]=n,_[n].id===e)return{result:!0,count:0};for(var a=0,i=1;a=0){var s=t(e,o);if(s.result)return{result:!0,count:i+s.count};i+=s.count}a+=1}return{result:!1,count:i}}},W=e.getDepthFirstPos=function(t){return R[t]},q=e.indexNodes=function(){I=-1,_.length>0&&z("none",_.length-1)},U=e.getSubGraphs=function(){return _};e.default={addVertex:g,addLink:v,updateLinkInterpolate:M,updateLink:b,addClass:k,setDirection:L,setClass:w,getTooltip:T,setClickEvent:A,bindFunctions:S,getDirection:E,getVertices:j,getEdges:C,getClasses:F,clear:H,defaultStyle:P,addSubGraph:N,getDepthFirstPos:W,indexNodes:q,getSubGraphs:U}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isSubstringInArray=e.detectType=void 0;var r=n(1),a=e.detectType=function(t){return t=t.replace(/^\s*%%.*\n/g,"\n"),t.match(/^\s*sequenceDiagram/)?"sequenceDiagram":t.match(/^\s*digraph/)?"dotGraph":t.match(/^\s*info/)?"info":t.match(/^\s*gantt/)?"gantt":t.match(/^\s*classDiagram/)?(r.logger.debug("Detected classDiagram syntax"),"classDiagram"):t.match(/^\s*gitGraph/)?(r.logger.debug("Detected gitGraph syntax"),"gitGraph"):"graph"},i=e.isSubstringInArray=function(t,e){for(var n=0;n2&&D.push("'"+this.terminals_[L]+"'");T=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+D.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(u+1)+": Unexpected "+(g==d?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(T,{text:h.match,token:this.terminals_[g]||g,line:h.yylineno,loc:m,expected:D})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+M+", token: "+g);switch(b[0]){case 1:n.push(g),a.push(h.yytext),i.push(h.yylloc),n.push(b[1]),g=null,v?(g=v,v=null):(l=h.yyleng,s=h.yytext,u=h.yylineno,m=h.yylloc,c>0&&c--);break;case 2:if(w=this.productions_[b[1]][1],Y.$=a[a.length-w],Y._$={first_line:i[i.length-(w||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(w||1)].first_column,last_column:i[i.length-1].last_column},y&&(Y._$.range=[i[i.length-(w||1)].range[0],i[i.length-1].range[1]]),void 0!==(k=this.performAction.apply(Y,[s,l,u,_.yy,b[1],a,i].concat(f))))return k;w&&(n=n.slice(0,-1*w*2),a=a.slice(0,-1*w),i=i.slice(0,-1*w)),n.push(this.productions_[b[1]][0]),a.push(Y.$),i.push(Y._$),x=o[n[n.length-2]][n[n.length-1]],n.push(x);break;case 3:return!0}}return!0}},Yt=function(){return{EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var a=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[a[0],a[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,a;if(this.options.backtrack_lexer&&(a={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(a.yylloc.range=this.yylloc.range.slice(0))),r=t[0].match(/(?:\r\n?|\n).*/g),r&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var i in a)this[i]=a[i];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,n,r;this._more||(this.yytext="",this.match="");for(var a=this._currentRules(),i=0;ie[0].length)){if(e=n,r=i,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,a[i])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,a[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return t=this.conditionStack.length-1-Math.abs(t||0),t>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:break;case 1:this.begin("string");break;case 2:this.popState();break;case 3:return"STR";case 4:return 71;case 5:return 78;case 6:return 72;case 7:return 82;case 8:return 73;case 9:return 74;case 10:return 75;case 11:return 12;case 12:return 30;case 13:return 32;case 14:case 15:case 16:case 17:case 18:case 19:return 13;case 20:return 81;case 21:return 91;case 22:return 89;case 23:return 8;case 24:return 86;case 25:return 98;case 26:return 16;case 27:return 15;case 28:return 17;case 29:return 18;case 30:return 53;case 31:return 51;case 32:return 52;case 33:return 54;case 34:return 58;case 35:return 56;case 36:return 57;case 37:return 59;case 38:return 58;case 39:return 56;case 40:return 57;case 41:return 59;case 42:return 63;case 43:return 61;case 44:return 62;case 45:return 64;case 46:return 50;case 47:return 55;case 48:return 60;case 49:return 40;case 50:return 41;case 51:return 46;case 52:return 92;case 53:return 96;case 54:return 84;case 55:case 56:return 97;case 57:return 88;case 58:return 94;case 59:return 95;case 60:return 65;case 61:return 38;case 62:return 39;case 63:return 36;case 64:return 37;case 65:return 42;case 66:return 43;case 67:return 101;case 68:return 9;case 69:return 10;case 70:return 11}},rules:[/^(?:%%[^\n]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:click\b)/,/^(?:graph\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:LR\b)/,/^(?:RL\b)/,/^(?:TB\b)/,/^(?:BT\b)/,/^(?:TD\b)/,/^(?:BR\b)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:v\b)/,/^(?:\s*--[x]\s*)/,/^(?:\s*-->\s*)/,/^(?:\s*--[o]\s*)/,/^(?:\s*---\s*)/,/^(?:\s*-\.-[x]\s*)/,/^(?:\s*-\.->\s*)/,/^(?:\s*-\.-[o]\s*)/,/^(?:\s*-\.-\s*)/,/^(?:\s*.-[x]\s*)/,/^(?:\s*\.->\s*)/,/^(?:\s*\.-[o]\s*)/,/^(?:\s*\.-\s*)/,/^(?:\s*==[x]\s*)/,/^(?:\s*==>\s*)/,/^(?:\s*==[o]\s*)/,/^(?:\s*==[\=]\s*)/,/^(?:\s*--\s*)/,/^(?:\s*-\.\s*)/,/^(?:\s*==\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:[A-Za-z]+)/,/^(?:[!"#$%&'*+,-.`?\\_\/])/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:\n+)/,/^(?:\s)/,/^(?:$)/],conditions:{string:{rules:[2,3],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70],inclusive:!0}}}}();return Dt.lexer=Yt,t.prototype=Dt,Dt.Parser=t,new t}();e.parser=a,e.Parser=a.Parser,e.parse=function(){return a.parse.apply(a,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var a=n(8).readFileSync(n(9).normalize(r[1]),"utf8");return e.parser.parse(a)},void 0!==r&&n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(e,n(7),n(3)(t))},function(t,e,n){"use strict";(function(t,r){var a=function(){function t(){this.yy={}}var e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,5],r=[1,6],a=[1,12],i=[1,13],o=[1,14],s=[1,15],u=[1,16],l=[1,17],c=[1,18],d=[1,19],f=[1,20],h=[1,21],_=[1,22],p=[8,16,17,18,19,20,21,22,23,24,25,26],m=[1,37],y=[1,33],g=[1,34],v=[1,35],M=[1,36],b=[8,10,16,17,18,19,20,21,22,23,24,25,26,28,32,37,39,40,45,57,58],k=[10,28],L=[10,28,37,57,58],w=[2,49],x=[1,45],D=[1,48],Y=[1,49],T=[1,52],A=[2,65],S=[1,65],E=[1,66],j=[1,67],C=[1,68],F=[1,69],O=[1,70],H=[1,71],P=[1,72],N=[1,73],B=[8,16,17,18,19,20,21,22,23,24,25,26,47],I=[10,28,37],R={trace:function(){},yy:{},symbols_:{error:2,expressions:3,graph:4,EOF:5,graphStatement:6,idStatement:7,"{":8,stmt_list:9,"}":10,strict:11,GRAPH:12,DIGRAPH:13,textNoTags:14,textNoTagsToken:15,ALPHA:16,NUM:17,COLON:18,PLUS:19,EQUALS:20,MULT:21,DOT:22,BRKT:23,SPACE:24,MINUS:25,keywords:26,stmt:27,";":28,node_stmt:29,edge_stmt:30,attr_stmt:31,"=":32,subgraph:33,attr_list:34,NODE:35,EDGE:36,"[":37,a_list:38,"]":39,",":40,edgeRHS:41,node_id:42,edgeop:43,port:44,":":45,compass_pt:46,SUBGRAPH:47,n:48,ne:49,e:50,se:51,s:52,sw:53,w:54,nw:55,c:56,ARROW_POINT:57,ARROW_OPEN:58,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",8:"{",10:"}",11:"strict",12:"GRAPH",13:"DIGRAPH",16:"ALPHA",17:"NUM",18:"COLON",19:"PLUS",20:"EQUALS",21:"MULT",22:"DOT",23:"BRKT",24:"SPACE",25:"MINUS",26:"keywords",28:";",32:"=",35:"NODE",36:"EDGE",37:"[",39:"]",40:",",45:":",47:"SUBGRAPH",48:"n",49:"ne",50:"e",51:"se",52:"s",53:"sw",54:"w",55:"nw",56:"c",57:"ARROW_POINT",58:"ARROW_OPEN"},productions_:[0,[3,2],[4,5],[4,6],[4,4],[6,1],[6,1],[7,1],[14,1],[14,2],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[9,1],[9,3],[27,1],[27,1],[27,1],[27,3],[27,1],[31,2],[31,2],[31,2],[34,4],[34,3],[34,3],[34,2],[38,5],[38,5],[38,3],[30,3],[30,3],[30,2],[30,2],[41,3],[41,3],[41,2],[41,2],[29,2],[29,1],[42,2],[42,1],[44,4],[44,2],[44,2],[33,5],[33,4],[33,3],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,0],[43,1],[43,1]],performAction:function(t,e,n,r,a,i,o){var s=i.length-1;switch(a){case 1:this.$=i[s-1];break;case 2:this.$=i[s-4];break;case 3:this.$=i[s-5];break;case 4:this.$=i[s-3];break;case 8:case 10:case 11:this.$=i[s];break;case 9:this.$=i[s-1]+""+i[s];break;case 12:case 13:case 14:case 15:case 16:case 18:case 19:case 20:this.$=i[s];break;case 17:this.$="
    ";break;case 39:this.$="oy";break;case 40:r.addLink(i[s-1],i[s].id,i[s].op),this.$="oy";break;case 42:r.addLink(i[s-1],i[s].id,i[s].op),this.$={op:i[s-2],id:i[s-1]};break;case 44:this.$={op:i[s-1],id:i[s]};break;case 48:r.addVertex(i[s-1]),this.$=i[s-1];break;case 49:r.addVertex(i[s]),this.$=i[s];break;case 66:this.$="arrow";break;case 67:this.$="arrow_open"}},table:[{3:1,4:2,6:3,11:[1,4],12:n,13:r},{1:[3]},{5:[1,7]},{7:8,8:[1,9],14:10,15:11,16:a,17:i,18:o,19:s,20:u,21:l,22:c,23:d,24:f,25:h,26:_},{6:23,12:n,13:r},e(p,[2,5]),e(p,[2,6]),{1:[2,1]},{8:[1,24]},{7:30,8:m,9:25,12:y,14:10,15:11,16:a,17:i,18:o,19:s,20:u,21:l,22:c,23:d,24:f,25:h,26:_,27:26,29:27,30:28,31:29,33:31,35:g,36:v,42:32,47:M},e([8,10,28,32,37,39,40,45,57,58],[2,7],{15:38,16:a,17:i,18:o,19:s,20:u,21:l,22:c,23:d,24:f,25:h,26:_}),e(b,[2,8]),e(b,[2,10]),e(b,[2,11]),e(b,[2,12]),e(b,[2,13]),e(b,[2,14]),e(b,[2,15]),e(b,[2,16]),e(b,[2,17]),e(b,[2,18]),e(b,[2,19]),e(b,[2,20]),{7:39,14:10,15:11,16:a,17:i,18:o,19:s,20:u,21:l,22:c,23:d,24:f,25:h,26:_},{7:30,8:m,9:40,12:y,14:10,15:11,16:a,17:i,18:o,19:s,20:u,21:l,22:c,23:d,24:f,25:h,26:_,27:26,29:27,30:28,31:29,33:31,35:g,36:v,42:32,47:M},{10:[1,41]},{10:[2,21],28:[1,42]},e(k,[2,23]),e(k,[2,24]),e(k,[2,25]),e(L,w,{44:44,32:[1,43],45:x}),e(k,[2,27],{41:46,43:47,57:D,58:Y}),e(k,[2,47],{43:47,34:50,41:51,37:T,57:D,58:Y}),{34:53,37:T},{34:54,37:T},{34:55,37:T},{7:56,8:[1,57],14:10,15:11,16:a,17:i,18:o,19:s,20:u,21:l,22:c,23:d,24:f,25:h,26:_},{7:30,8:m,9:58,12:y,14:10,15:11,16:a,17:i,18:o,19:s,20:u,21:l,22:c,23:d,24:f,25:h,26:_,27:26,29:27,30:28,31:29,33:31,35:g,36:v,42:32,47:M},e(b,[2,9]),{8:[1,59]},{10:[1,60]},{5:[2,4]},{7:30,8:m,9:61,12:y,14:10,15:11,16:a,17:i,18:o,19:s,20:u,21:l,22:c,23:d,24:f,25:h,26:_,27:26,29:27,30:28,31:29,33:31,35:g,36:v,42:32,47:M},{7:62,14:10,15:11,16:a,17:i,18:o,19:s,20:u,21:l,22:c,23:d,24:f,25:h,26:_},e(L,[2,48]),e(L,A,{14:10,15:11,7:63,46:64,16:a,17:i,18:o,19:s,20:u,21:l,22:c,23:d,24:f,25:h,26:_,48:S,49:E,50:j,51:C,52:F,53:O,54:H,55:P,56:N}),e(k,[2,41],{34:74,37:T}),{7:77,8:m,14:10,15:11,16:a,17:i,18:o,19:s,20:u,21:l,22:c,23:d,24:f,25:h,26:_,33:76,42:75,47:M},e(B,[2,66]),e(B,[2,67]),e(k,[2,46]),e(k,[2,40],{34:78,37:T}),{7:81,14:10,15:11,16:a,17:i,18:o,19:s,20:u,21:l,22:c,23:d,24:f,25:h,26:_,38:79,39:[1,80]},e(k,[2,28]),e(k,[2,29]),e(k,[2,30]),{8:[1,82]},{7:30,8:m,9:83,12:y,14:10,15:11,16:a,17:i,18:o,19:s,20:u,21:l,22:c,23:d,24:f,25:h,26:_,27:26,29:27,30:28,31:29,33:31,35:g,36:v,42:32,47:M},{10:[1,84]},{7:30,8:m,9:85,12:y,14:10,15:11,16:a,17:i,18:o,19:s,20:u,21:l,22:c,23:d,24:f,25:h,26:_,27:26,29:27,30:28,31:29,33:31,35:g,36:v,42:32,47:M},{5:[2,2]},{10:[2,22]},e(k,[2,26]),e(L,[2,51],{45:[1,86]}),e(L,[2,52]),e(L,[2,56]),e(L,[2,57]),e(L,[2,58]),e(L,[2,59]),e(L,[2,60]),e(L,[2,61]),e(L,[2,62]),e(L,[2,63]),e(L,[2,64]),e(k,[2,38]),e(I,[2,44],{43:47,41:87,57:D,58:Y}),e(I,[2,45],{43:47,41:88,57:D,58:Y}),e(L,w,{44:44,45:x}),e(k,[2,39]),{39:[1,89]},e(k,[2,34],{34:90,37:T}),{32:[1,91]},{7:30,8:m,9:92,12:y,14:10,15:11,16:a,17:i,18:o,19:s,20:u,21:l,22:c,23:d,24:f,25:h,26:_,27:26,29:27,30:28,31:29,33:31,35:g,36:v,42:32,47:M},{10:[1,93]},e(L,[2,55]),{10:[1,94]},e(L,A,{46:95,48:S,49:E,50:j,51:C,52:F,53:O,54:H,55:P,56:N}),e(I,[2,42]),e(I,[2,43]),e(k,[2,33],{34:96,37:T}),e(k,[2,32]),{7:97,14:10,15:11,16:a,17:i,18:o,19:s,20:u,21:l,22:c,23:d,24:f,25:h,26:_},{10:[1,98]},e(L,[2,54]),{5:[2,3]},e(L,[2,50]),e(k,[2,31]),{28:[1,99],39:[2,37],40:[1,100]},e(L,[2,53]),{7:81,14:10,15:11,16:a,17:i,18:o,19:s,20:u,21:l,22:c,23:d,24:f,25:h,26:_,38:101},{7:81,14:10,15:11,16:a,17:i,18:o,19:s,20:u,21:l,22:c,23:d,24:f,25:h,26:_,38:102},{39:[2,35]},{39:[2,36]}],defaultActions:{7:[2,1],41:[2,4],60:[2,2],61:[2,22],94:[2,3],101:[2,35],102:[2,36]},parseError:function(t,e){if(!e.recoverable){var n=function(t,e){this.message=t,this.hash=e};throw n.prototype=Error,new n(t,e)}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],a=[null],i=[],o=this.table,s="",u=0,l=0,c=0,d=1,f=i.slice.call(arguments,1),h=Object.create(this.lexer),_={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(_.yy[p]=this.yy[p]);h.setInput(t,_.yy),_.yy.lexer=h,_.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var m=h.yylloc;i.push(m);var y=h.options&&h.options.ranges;"function"==typeof _.yy.parseError?this.parseError=_.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,v,M,b,k,L,w,x,D,Y={};;){if(M=n[n.length-1],this.defaultActions[M]?b=this.defaultActions[M]:(null!==g&&void 0!==g||(g=function(){var t;return t=r.pop()||h.lex()||d,"number"!=typeof t&&(t instanceof Array&&(r=t,t=r.pop()),t=e.symbols_[t]||t),t}()),b=o[M]&&o[M][g]),void 0===b||!b.length||!b[0]){var T="";D=[];for(L in o[M])this.terminals_[L]&&L>2&&D.push("'"+this.terminals_[L]+"'");T=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+D.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(u+1)+": Unexpected "+(g==d?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(T,{text:h.match,token:this.terminals_[g]||g,line:h.yylineno,loc:m,expected:D})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+M+", token: "+g);switch(b[0]){case 1:n.push(g),a.push(h.yytext),i.push(h.yylloc),n.push(b[1]),g=null,v?(g=v,v=null):(l=h.yyleng,s=h.yytext,u=h.yylineno,m=h.yylloc,c>0&&c--);break;case 2:if(w=this.productions_[b[1]][1],Y.$=a[a.length-w],Y._$={first_line:i[i.length-(w||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(w||1)].first_column,last_column:i[i.length-1].last_column},y&&(Y._$.range=[i[i.length-(w||1)].range[0],i[i.length-1].range[1]]),void 0!==(k=this.performAction.apply(Y,[s,l,u,_.yy,b[1],a,i].concat(f))))return k;w&&(n=n.slice(0,-1*w*2),a=a.slice(0,-1*w),i=i.slice(0,-1*w)),n.push(this.productions_[b[1]][0]),a.push(Y.$),i.push(Y._$),x=o[n[n.length-2]][n[n.length-1]],n.push(x);break;case 3:return!0}}return!0}},z=function(){return{EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var a=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[a[0],a[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,a;if(this.options.backtrack_lexer&&(a={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(a.yylloc.range=this.yylloc.range.slice(0))),r=t[0].match(/(?:\r\n?|\n).*/g),r&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var i in a)this[i]=a[i];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,n,r;this._more||(this.yytext="",this.match="");for(var a=this._currentRules(),i=0;ie[0].length)){if(e=n,r=i,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,a[i])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,a[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return t=this.conditionStack.length-1-Math.abs(t||0),t>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return"STYLE";case 1:return"LINKSTYLE";case 2:return"CLASSDEF";case 3:return"CLASS";case 4:return"CLICK";case 5:return 12;case 6:return 13;case 7:return 47;case 8:return 35;case 9:return 36;case 10:case 11:case 12:case 13:case 14:case 15:return"DIR";case 16:return 17;case 17:return 23;case 18:return 18;case 19:return 28;case 20:return 40;case 21:return 32;case 22:return 21;case 23:return 22;case 24:return"ARROW_CROSS";case 25:return 57;case 26:return"ARROW_CIRCLE";case 27:return 58;case 28:return 25;case 29:return 19;case 30:return 20;case 31:return 16;case 32:return"PIPE";case 33:return"PS";case 34:return"PE";case 35:return 37;case 36:return 39;case 37:return 8;case 38:return 10;case 39:return"QUOTE";case 40:return 24;case 41:return"NEWLINE";case 42:return 5}},rules:[/^(?:style\b)/,/^(?:linkStyle\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:click\b)/,/^(?:graph\b)/,/^(?:digraph\b)/,/^(?:subgraph\b)/,/^(?:node\b)/,/^(?:edge\b)/,/^(?:LR\b)/,/^(?:RL\b)/,/^(?:TB\b)/,/^(?:BT\b)/,/^(?:TD\b)/,/^(?:BR\b)/,/^(?:[0-9])/,/^(?:#)/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:=)/,/^(?:\*)/,/^(?:\.)/,/^(?:--[x])/,/^(?:->)/,/^(?:--[o])/,/^(?:--)/,/^(?:-)/,/^(?:\+)/,/^(?:=)/,/^(?:[\u0021-\u0027\u002A-\u002E\u003F\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC_])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:\s)/,/^(?:\n)/,/^(?:$)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],inclusive:!0}}}}();return R.lexer=z,t.prototype=R,R.Parser=t,new t}();e.parser=a,e.Parser=a.Parser,e.parse=function(){return a.parse.apply(a,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var a=n(8).readFileSync(n(9).normalize(r[1]),"utf8");return e.parser.parse(a)},void 0!==r&&n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(e,n(7),n(3)(t))},function(t,e,n){function r(t,e,n,r){return a(t,String(e),n||s,r||function(e){return t.outEdges(e)})}function a(t,e,n,r){var a,i,s={},u=new o,l=function(t){var e=t.v!==a?t.v:t.w,r=s[e],o=n(t),l=i.distance+o;if(o<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+t+" Weight: "+o);l0&&(a=u.removeMin(),i=s[a],i.distance!==Number.POSITIVE_INFINITY);)r(a).forEach(l);return s}var i=n(4),o=n(160);t.exports=r;var s=i.constant(1)},function(t,e,n){function r(){this._arr=[],this._keyIndices={}}var a=n(4);t.exports=r,r.prototype.size=function(){return this._arr.length},r.prototype.keys=function(){return this._arr.map(function(t){return t.key})},r.prototype.has=function(t){return a.has(this._keyIndices,t)},r.prototype.priority=function(t){var e=this._keyIndices[t];if(void 0!==e)return this._arr[e].priority},r.prototype.min=function(){if(0===this.size())throw new Error("Queue underflow");return this._arr[0].key},r.prototype.add=function(t,e){var n=this._keyIndices;if(t=String(t),!a.has(n,t)){var r=this._arr,i=r.length;return n[t]=i,r.push({key:t,priority:e}),this._decrease(i),!0}return!1},r.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var t=this._arr.pop();return delete this._keyIndices[t.key],this._heapify(0),t.key},r.prototype.decrease=function(t,e){var n=this._keyIndices[t];if(e>this._arr[n].priority)throw new Error("New priority is greater than current priority. Key: "+t+" Old: "+this._arr[n].priority+" New: "+e);this._arr[n].priority=e,this._decrease(n)},r.prototype._heapify=function(t){var e=this._arr,n=2*t,r=n+1,a=t;n>1,!(n[e].priority2&&D.push("'"+this.terminals_[L]+"'");T=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+D.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(u+1)+": Unexpected "+(g==d?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(T,{text:h.match,token:this.terminals_[g]||g,line:h.yylineno,loc:m,expected:D})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+M+", token: "+g);switch(b[0]){case 1:n.push(g),a.push(h.yytext),i.push(h.yylloc),n.push(b[1]),g=null,v?(g=v,v=null):(l=h.yyleng,s=h.yytext,u=h.yylineno,m=h.yylloc,c>0&&c--);break;case 2:if(w=this.productions_[b[1]][1],Y.$=a[a.length-w],Y._$={first_line:i[i.length-(w||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(w||1)].first_column,last_column:i[i.length-1].last_column},y&&(Y._$.range=[i[i.length-(w||1)].range[0],i[i.length-1].range[1]]),void 0!==(k=this.performAction.apply(Y,[s,l,u,_.yy,b[1],a,i].concat(f))))return k;w&&(n=n.slice(0,-1*w*2),a=a.slice(0,-1*w),i=i.slice(0,-1*w)),n.push(this.productions_[b[1]][0]),a.push(Y.$),i.push(Y._$),x=o[n[n.length-2]][n[n.length-1]],n.push(x);break;case 3:return!0}}return!0}},w=function(){return{EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var a=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[a[0],a[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,a;if(this.options.backtrack_lexer&&(a={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(a.yylloc.range=this.yylloc.range.slice(0))),r=t[0].match(/(?:\r\n?|\n).*/g),r&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var i in a)this[i]=a[i];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,n,r;this._more||(this.yytext="",this.match="");for(var a=this._currentRules(),i=0;ie[0].length)){if(e=n,r=i,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,a[i])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,a[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return t=this.conditionStack.length-1-Math.abs(t||0),t>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 5;case 1:case 2:case 3:case 4:break;case 5:return this.begin("ID"),10;case 6:return this.begin("ALIAS"),39;case 7:return this.popState(),this.popState(),this.begin("LINE"),12;case 8:return this.popState(),this.popState(),5;case 9:return this.begin("LINE"),20;case 10:return this.begin("LINE"),22;case 11:return this.begin("LINE"),23;case 12:return this.begin("LINE"),24;case 13:return this.begin("LINE"),25;case 14:return this.begin("LINE"),27;case 15:return this.popState(),13;case 16:return 21;case 17:return 34;case 18:return 35;case 19:return 30;case 20:return 28;case 21:return this.begin("ID"),15;case 22:return this.begin("ID"),16;case 23:return 18;case 24:return 6;case 25:return 33;case 26:return 5;case 27:return e.yytext=e.yytext.trim(),39;case 28:return 42;case 29:return 43;case 30:return 40;case 31:return 41;case 32:return 44;case 33:return 45;case 34:return 46;case 35:return 37;case 36:return 38;case 37:return 5;case 38:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:participant\b)/i,/^(?:[^\->:\n,;]+?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:and\b)/i,/^(?:[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\b)/i,/^(?:sequenceDiagram\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?::[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[2,3,15],inclusive:!1},ALIAS:{rules:[2,3,7,8],inclusive:!1},ID:{rules:[2,3,6],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,9,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],inclusive:!0}}}}();return L.lexer=w,t.prototype=L,L.Parser=t,new t}();e.parser=a,e.Parser=a.Parser,e.parse=function(){return a.parse.apply(a,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var a=n(8).readFileSync(n(9).normalize(r[1]),"utf8");return e.parser.parse(a)},void 0!==r&&n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(e,n(7),n(3)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.apply=e.setTitle=e.addNote=e.PLACEMENT=e.ARROWTYPE=e.LINETYPE=e.clear=e.getTitle=e.getActorKeys=e.getActor=e.getActors=e.getMessages=e.addSignal=e.addMessage=e.addActor=void 0;var r=n(1),a={},i=[],o=[],s="",u=e.addActor=function(t,e,n){var r=a[t];r&&e===r.name&&null==n||(null==n&&(n=e),a[t]={name:e,description:n})},l=e.addMessage=function(t,e,n,r){i.push({from:t,to:e,message:n,answer:r})},c=e.addSignal=function(t,e,n,a){r.logger.debug("Adding message from="+t+" to="+e+" message="+n+" type="+a),i.push({from:t,to:e,message:n,type:a})},d=e.getMessages=function(){return i},f=e.getActors=function(){return a},h=e.getActor=function(t){return a[t]},_=e.getActorKeys=function(){return Object.keys(a)},p=e.getTitle=function(){return s},m=e.clear=function(){a={},i=[]},y=e.LINETYPE={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21},g=e.ARROWTYPE={FILLED:0,OPEN:1},v=e.PLACEMENT={LEFTOF:0,RIGHTOF:1,OVER:2},M=e.addNote=function(t,e,n){var r={actor:t,placement:e,message:n},a=[].concat(t,t);o.push(r),i.push({from:a[0],to:a[1],message:n,type:y.NOTE,placement:e})},b=e.setTitle=function(t){s=t},k=e.apply=function t(e){if(e instanceof Array)e.forEach(function(e){t(e)});else switch(e.type){case"addActor":u(e.actor,e.actor,e.description);break;case"activeStart":case"activeEnd":c(e.actor,void 0,void 0,e.signalType);break;case"addNote":M(e.actor,e.placement,e.text);break;case"addMessage":c(e.from,e.to,e.msg,e.signalType);break;case"loopStart":c(void 0,void 0,e.loopText,e.signalType);break;case"loopEnd":c(void 0,void 0,void 0,e.signalType);break;case"optStart":c(void 0,void 0,e.optText,e.signalType);break;case"optEnd":c(void 0,void 0,void 0,e.signalType);break;case"altStart":case"else":c(void 0,void 0,e.altText,e.signalType);break;case"altEnd":c(void 0,void 0,void 0,e.signalType);break;case"setTitle":b(e.text);break;case"parStart":case"and":c(void 0,void 0,e.parText,e.signalType);break;case"parEnd":c(void 0,void 0,void 0,e.signalType)}};e.default={addActor:u,addMessage:l,addSignal:c,getMessages:d,getActors:f,getActor:h,getActorKeys:_,getTitle:p,clear:m,LINETYPE:y,ARROWTYPE:g,PLACEMENT:v,addNote:M,setTitle:b,apply:k}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getInfo=e.setInfo=e.getMessage=e.setMessage=void 0;var r=n(1),a="",i=!1,o=e.setMessage=function(t){r.logger.debug("Setting message to: "+t),a=t},s=e.getMessage=function(){return a},u=e.setInfo=function(t){i=t},l=e.getInfo=function(){return i};e.default={setMessage:o,getMessage:s,setInfo:u,getInfo:l}},function(t,e,n){"use strict";(function(t,r){var a=function(){function t(){this.yy={}}var e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[6,9,10,12],r={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,message:11,say:12,TXT:13,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo",12:"say",13:"TXT"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1],[8,1],[11,2]],performAction:function(t,e,n,r,a,i,o){var s=i.length-1;switch(a){case 1:return r;case 4:break;case 6:r.setInfo(!0);break;case 7:r.setMessage(i[s]);break;case 8:this.$=i[s-1].substring(1).trim().replace(/\\n/gm,"\n")}},table:[{3:1,4:[1,2]},{1:[3]},e(n,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8],11:9,12:[1,10]},{1:[2,1]},e(n,[2,3]),e(n,[2,4]),e(n,[2,5]),e(n,[2,6]),e(n,[2,7]),{13:[1,11]},e(n,[2,8])],defaultActions:{4:[2,1]},parseError:function(t,e){if(!e.recoverable){var n=function(t,e){this.message=t,this.hash=e};throw n.prototype=Error,new n(t,e)}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],a=[null],i=[],o=this.table,s="",u=0,l=0,c=0,d=1,f=i.slice.call(arguments,1),h=Object.create(this.lexer),_={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(_.yy[p]=this.yy[p]);h.setInput(t,_.yy),_.yy.lexer=h,_.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var m=h.yylloc;i.push(m);var y=h.options&&h.options.ranges;"function"==typeof _.yy.parseError?this.parseError=_.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,v,M,b,k,L,w,x,D,Y={};;){if(M=n[n.length-1],this.defaultActions[M]?b=this.defaultActions[M]:(null!==g&&void 0!==g||(g=function(){var t;return t=r.pop()||h.lex()||d,"number"!=typeof t&&(t instanceof Array&&(r=t,t=r.pop()),t=e.symbols_[t]||t),t}()),b=o[M]&&o[M][g]),void 0===b||!b.length||!b[0]){var T="";D=[];for(L in o[M])this.terminals_[L]&&L>2&&D.push("'"+this.terminals_[L]+"'");T=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+D.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(u+1)+": Unexpected "+(g==d?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(T,{text:h.match,token:this.terminals_[g]||g,line:h.yylineno,loc:m,expected:D})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+M+", token: "+g);switch(b[0]){case 1:n.push(g),a.push(h.yytext),i.push(h.yylloc),n.push(b[1]),g=null,v?(g=v,v=null):(l=h.yyleng,s=h.yytext,u=h.yylineno,m=h.yylloc,c>0&&c--);break;case 2:if(w=this.productions_[b[1]][1],Y.$=a[a.length-w],Y._$={first_line:i[i.length-(w||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(w||1)].first_column,last_column:i[i.length-1].last_column},y&&(Y._$.range=[i[i.length-(w||1)].range[0],i[i.length-1].range[1]]),void 0!==(k=this.performAction.apply(Y,[s,l,u,_.yy,b[1],a,i].concat(f))))return k;w&&(n=n.slice(0,-1*w*2),a=a.slice(0,-1*w),i=i.slice(0,-1*w)),n.push(this.productions_[b[1]][0]),a.push(Y.$),i.push(Y._$),x=o[n[n.length-2]][n[n.length-1]],n.push(x);break;case 3:return!0}}return!0}},a=function(){return{EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var a=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[a[0],a[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,a;if(this.options.backtrack_lexer&&(a={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(a.yylloc.range=this.yylloc.range.slice(0))),r=t[0].match(/(?:\r\n?|\n).*/g),r&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var i in a)this[i]=a[i];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,n,r;this._more||(this.yytext="",this.match="");for(var a=this._currentRules(),i=0;ie[0].length)){if(e=n,r=i,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,a[i])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,a[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return t=this.conditionStack.length-1-Math.abs(t||0),t>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 9;case 1:return 10;case 2:return 4;case 3:return 12;case 4:return 13;case 5:return 6;case 6:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:showInfo\b)/i,/^(?:info\b)/i,/^(?:say\b)/i,/^(?::[^#\n;]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6],inclusive:!0}}}}();return r.lexer=a,t.prototype=r,r.Parser=t,new t}();e.parser=a,e.Parser=a.Parser,e.parse=function(){return a.parse.apply(a,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var a=n(8).readFileSync(n(9).normalize(r[1]),"utf8");return e.parser.parse(a)},void 0!==r&&n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(e,n(7),n(3)(t))},function(t,e,n){"use strict";(function(t,r){var a=function(){function t(){this.yy={}}var e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[6,8,10,11,12,13,14],r=[1,9],a=[1,10],i=[1,11],o=[1,12],s={trace:function(){},yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,dateFormat:11,title:12,section:13,taskTxt:14,taskData:15,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",11:"dateFormat",12:"title",13:"section",14:"taskTxt",15:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,1],[9,1],[9,2]],performAction:function(t,e,n,r,a,i,o){var s=i.length-1;switch(a){case 1:return i[s-1];case 2:this.$=[];break;case 3:i[s-1].push(i[s]),this.$=i[s-1];break;case 4:case 5:this.$=i[s];break;case 6:case 7:this.$=[];break;case 8:r.setDateFormat(i[s].substr(11)),this.$=i[s].substr(11);break;case 9:r.setTitle(i[s].substr(6)),this.$=i[s].substr(6);break;case 10:r.addSection(i[s].substr(8)),this.$=i[s].substr(8);break;case 11:r.addTask(i[s-1],i[s]),this.$="task"}},table:[{3:1,4:[1,2]},{1:[3]},e(n,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:a,13:i,14:o},e(n,[2,7],{1:[2,1]}),e(n,[2,3]),{9:13,11:r,12:a,13:i,14:o},e(n,[2,5]),e(n,[2,6]),e(n,[2,8]),e(n,[2,9]),e(n,[2,10]),{15:[1,14]},e(n,[2,4]),e(n,[2,11])],defaultActions:{},parseError:function(t,e){if(!e.recoverable){var n=function(t,e){this.message=t,this.hash=e};throw n.prototype=Error,new n(t,e)}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],a=[null],i=[],o=this.table,s="",u=0,l=0,c=0,d=1,f=i.slice.call(arguments,1),h=Object.create(this.lexer),_={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(_.yy[p]=this.yy[p]);h.setInput(t,_.yy),_.yy.lexer=h,_.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var m=h.yylloc;i.push(m);var y=h.options&&h.options.ranges;"function"==typeof _.yy.parseError?this.parseError=_.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,v,M,b,k,L,w,x,D,Y={};;){if(M=n[n.length-1],this.defaultActions[M]?b=this.defaultActions[M]:(null!==g&&void 0!==g||(g=function(){var t;return t=r.pop()||h.lex()||d,"number"!=typeof t&&(t instanceof Array&&(r=t,t=r.pop()),t=e.symbols_[t]||t),t}()),b=o[M]&&o[M][g]),void 0===b||!b.length||!b[0]){var T="";D=[];for(L in o[M])this.terminals_[L]&&L>2&&D.push("'"+this.terminals_[L]+"'");T=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+D.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(u+1)+": Unexpected "+(g==d?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(T,{text:h.match,token:this.terminals_[g]||g,line:h.yylineno,loc:m,expected:D})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+M+", token: "+g);switch(b[0]){case 1:n.push(g),a.push(h.yytext),i.push(h.yylloc),n.push(b[1]),g=null,v?(g=v,v=null):(l=h.yyleng,s=h.yytext,u=h.yylineno,m=h.yylloc,c>0&&c--);break;case 2:if(w=this.productions_[b[1]][1],Y.$=a[a.length-w],Y._$={first_line:i[i.length-(w||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(w||1)].first_column,last_column:i[i.length-1].last_column},y&&(Y._$.range=[i[i.length-(w||1)].range[0],i[i.length-1].range[1]]),void 0!==(k=this.performAction.apply(Y,[s,l,u,_.yy,b[1],a,i].concat(f))))return k;w&&(n=n.slice(0,-1*w*2),a=a.slice(0,-1*w),i=i.slice(0,-1*w)),n.push(this.productions_[b[1]][0]),a.push(Y.$),i.push(Y._$),x=o[n[n.length-2]][n[n.length-1]],n.push(x);break;case 3:return!0}}return!0}},u=function(){return{EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var a=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[a[0],a[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,a;if(this.options.backtrack_lexer&&(a={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(a.yylloc.range=this.yylloc.range.slice(0))),r=t[0].match(/(?:\r\n?|\n).*/g),r&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var i in a)this[i]=a[i];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,n,r;this._more||(this.yytext="",this.match="");for(var a=this._currentRules(),i=0;ie[0].length)){if(e=n,r=i,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,a[i])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,a[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return t=this.conditionStack.length-1-Math.abs(t||0),t>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 10;case 1:case 2:case 3:break;case 4:return 4;case 5:return 11;case 6:return"date";case 7:return 12;case 8:return 13;case 9:return 14;case 10:return 15;case 11:return":";case 12:return 6;case 13:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13],inclusive:!0}}}}();return s.lexer=u,t.prototype=s,s.Parser=t,new t}();e.parser=a,e.Parser=a.Parser,e.parse=function(){return a.parse.apply(a,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var a=n(8).readFileSync(n(9).normalize(r[1]),"utf8");return e.parser.parse(a)},void 0!==r&&n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(e,n(7),n(3)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.addTaskOrg=e.findTaskById=e.addTask=e.getTasks=e.addSection=e.getTitle=e.setTitle=e.getDateFormat=e.setDateFormat=e.clear=void 0;var r,a,i=n(0),o=function(t){return t&&t.__esModule?t:{default:t}}(i),s=n(1),u="",l="",c=[],d=[],f="",h=e.clear=function(){c=[],d=[],f="",l="",k=0,r=void 0,a=void 0,D=[]},_=e.setDateFormat=function(t){u=t},p=e.getDateFormat=function(){return u},m=e.setTitle=function(t){l=t},y=e.getTitle=function(){return l},g=e.addSection=function(t){f=t,c.push(t)},v=e.getTasks=function(){for(var t=E(),e=0;!t&&e<10;)t=E(),e++;return d=D},M=function(t,e,n){n=n.trim();var r=/^after\s+([\d\w-]+)/,a=r.exec(n.trim());if(null!==a){var i=A(a[1]);if(void 0===i){var u=new Date;return u.setHours(0,0,0,0),u}return i.endTime}return(0,o.default)(n,e.trim(),!0).isValid()?(0,o.default)(n,e.trim(),!0).toDate():(s.logger.debug("Invalid date:"+n),s.logger.debug("With date format:"+e.trim()),new Date)},b=function(t,e,n){if(n=n.trim(),(0,o.default)(n,e.trim(),!0).isValid())return(0,o.default)(n,e.trim()).toDate();var r=(0,o.default)(t),a=/^([\d]+)([wdhms])/,i=a.exec(n.trim());if(null!==i){switch(i[2]){case"s":r.add(i[1],"seconds");break;case"m":r.add(i[1],"minutes");break;case"h":r.add(i[1],"hours");break;case"d":r.add(i[1],"days");break;case"w":r.add(i[1],"weeks")}return r.toDate()}return r.toDate()},k=0,L=function(t){return void 0===t?"task"+(k+=1):t},w=function(t,e){var n;n=":"===e.substr(0,1)?e.substr(1,e.length):e;for(var r=n.split(","),a={},i=p(),o=!0;o;)o=!1,r[0].match(/^\s*active\s*$/)&&(a.active=!0,r.shift(1),o=!0),r[0].match(/^\s*done\s*$/)&&(a.done=!0,r.shift(1),o=!0),r[0].match(/^\s*crit\s*$/)&&(a.crit=!0,r.shift(1),o=!0);var s;for(s=0;s2&&D.push("'"+this.terminals_[L]+"'");T=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+D.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(u+1)+": Unexpected "+(g==d?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(T,{text:h.match,token:this.terminals_[g]||g,line:h.yylineno,loc:m,expected:D})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+M+", token: "+g);switch(b[0]){case 1:n.push(g),a.push(h.yytext),i.push(h.yylloc),n.push(b[1]),g=null,v?(g=v,v=null):(l=h.yyleng,s=h.yytext,u=h.yylineno,m=h.yylloc,c>0&&c--);break;case 2:if(w=this.productions_[b[1]][1],Y.$=a[a.length-w],Y._$={first_line:i[i.length-(w||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(w||1)].first_column,last_column:i[i.length-1].last_column},y&&(Y._$.range=[i[i.length-(w||1)].range[0],i[i.length-1].range[1]]),void 0!==(k=this.performAction.apply(Y,[s,l,u,_.yy,b[1],a,i].concat(f))))return k;w&&(n=n.slice(0,-1*w*2),a=a.slice(0,-1*w),i=i.slice(0,-1*w)),n.push(this.productions_[b[1]][0]),a.push(Y.$),i.push(Y._$),x=o[n[n.length-2]][n[n.length-1]],n.push(x);break;case 3:return!0}}return!0}},L=function(){return{EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var a=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[a[0],a[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,a;if(this.options.backtrack_lexer&&(a={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(a.yylloc.range=this.yylloc.range.slice(0))),r=t[0].match(/(?:\r\n?|\n).*/g),r&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var i in a)this[i]=a[i];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,n,r;this._more||(this.yytext="",this.match="");for(var a=this._currentRules(),i=0;ie[0].length)){if(e=n,r=i,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,a[i])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,a[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return t=this.conditionStack.length-1-Math.abs(t||0),t>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:break;case 1:return 6;case 2:break;case 3:return 5;case 4:return this.begin("struct"),17;case 5:return this.popState(),19;case 6:break;case 7:return"MEMBER";case 8:return 16;case 9:this.begin("string");break;case 10:this.popState();break;case 11:return"STR";case 12:case 13:return 27;case 14:case 15:return 29;case 16:return 28;case 17:return 26;case 18:return 30;case 19:return 31;case 20:return 13;case 21:return 43;case 22:return"DOT";case 23:return"PLUS";case 24:return 40;case 25:case 26:return"EQUALS";case 27:return 47;case 28:return"PUNCTUATION";case 29:return 46;case 30:return 45;case 31:return 42;case 32:return 8}},rules:[/^(?:%%[^\n]*)/,/^(?:\n+)/,/^(?:\s+)/,/^(?:classDiagram\b)/,/^(?:[\{])/,/^(?:\})/,/^(?:[\n])/,/^(?:[^\{\}\n]*)/,/^(?:class\b)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:--)/,/^(?:\.\.)/,/^(?::[^#\n;]+)/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:[A-Za-z]+)/,/^(?:[!"#$%&'*+,-.`?\\_\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:$)/],conditions:{string:{rules:[10,11],inclusive:!1},struct:{rules:[5,6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,8,9,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],inclusive:!0}}}}();return k.lexer=L,t.prototype=k,k.Parser=t,new t}();e.parser=a,e.Parser=a.Parser,e.parse=function(){return a.parse.apply(a,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var a=n(8).readFileSync(n(9).normalize(r[1]),"utf8");return e.parser.parse(a)},void 0!==r&&n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(e,n(7),n(3)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.relationType=e.lineType=e.cleanupLabel=e.addMembers=e.addRelation=e.getRelations=e.getClasses=e.getClass=e.clear=e.addClass=void 0;var r,a=n(1),i=[];r={};var o=e.addClass=function(t){void 0===r[t]&&(r[t]={id:t,methods:[],members:[]})},s=e.clear=function(){i=[],r={}},u=e.getClass=function(t){return r[t]},l=e.getClasses=function(){return r},c=e.getRelations=function(){return i},d=e.addRelation=function(t){a.logger.warn("Adding relation: "+JSON.stringify(t)),o(t.id1),o(t.id2),i.push(t)},f=e.addMembers=function(t,e){var n=r[t];"string"==typeof e&&(")"===e.substr(-1)?n.methods.push(e):n.members.push(e))},h=e.cleanupLabel=function(t){return":"===t.substring(0,1)?t.substr(2).trim():t.trim()},_=e.lineType={LINE:0,DOTTED_LINE:1},p=e.relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3};e.default={addClass:o,clear:s,getClass:u,getClasses:l,getRelations:c,addRelation:d,addMembers:f,cleanupLabel:h,lineType:_,relationType:p}},function(t,e,n){"use strict";(function(t,r){var a=function(){function t(){this.yy={}}var e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[2,3],r=[1,7],a=[7,12,15,17,19,20,21],i=[7,11,12,15,17,19,20,21],o=[2,20],s=[1,32],u={trace:function(){},yy:{},symbols_:{error:2,start:3,GG:4,":":5,document:6,EOF:7,DIR:8,options:9,body:10,OPT:11,NL:12,line:13,statement:14,COMMIT:15,commit_arg:16,BRANCH:17,ID:18,CHECKOUT:19,MERGE:20,RESET:21,reset_arg:22,STR:23,HEAD:24,reset_parents:25,CARET:26,$accept:0,$end:1},terminals_:{2:"error",4:"GG",5:":",7:"EOF",8:"DIR",11:"OPT",12:"NL",15:"COMMIT",17:"BRANCH",18:"ID",19:"CHECKOUT",20:"MERGE",21:"RESET",23:"STR",24:"HEAD",26:"CARET"},productions_:[0,[3,4],[3,5],[6,0],[6,2],[9,2],[9,1],[10,0],[10,2],[13,2],[13,1],[14,2],[14,2],[14,2],[14,2],[14,2],[16,0],[16,1],[22,2],[22,2],[25,0],[25,2]],performAction:function(t,e,n,r,a,i,o){var s=i.length-1;switch(a){case 1:return i[s-1];case 2:return r.setDirection(i[s-3]),i[s-1];case 4:r.setOptions(i[s-1]),this.$=i[s];break;case 5:i[s-1]+=i[s],this.$=i[s-1];break;case 7:this.$=[];break;case 8:i[s-1].push(i[s]),this.$=i[s-1];break;case 9:this.$=i[s-1];break;case 11:r.commit(i[s]);break;case 12:r.branch(i[s]);break;case 13:r.checkout(i[s]);break;case 14:r.merge(i[s]);break;case 15:r.reset(i[s]);break;case 16:this.$="";break;case 17:this.$=i[s];break;case 18:this.$=i[s-1]+":"+i[s];break;case 19:this.$=i[s-1]+":"+r.count,r.count=0;break;case 20:r.count=0;break;case 21:r.count+=1}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3],8:[1,4]},{6:5,7:n,9:6,12:r},{5:[1,8]},{7:[1,9]},e(a,[2,7],{10:10,11:[1,11]}),e(i,[2,6]),{6:12,7:n,9:6,12:r},{1:[2,1]},{7:[2,4],12:[1,15],13:13,14:14,15:[1,16],17:[1,17],19:[1,18],20:[1,19],21:[1,20]},e(i,[2,5]),{7:[1,21]},e(a,[2,8]),{12:[1,22]},e(a,[2,10]),{12:[2,16],16:23,23:[1,24]},{18:[1,25]},{18:[1,26]},{18:[1,27]},{18:[1,30],22:28,24:[1,29]},{1:[2,2]},e(a,[2,9]),{12:[2,11]},{12:[2,17]},{12:[2,12]},{12:[2,13]},{12:[2,14]},{12:[2,15]},{12:o,25:31,26:s},{12:o,25:33,26:s},{12:[2,18]},{12:o,25:34,26:s},{12:[2,19]},{12:[2,21]}],defaultActions:{9:[2,1],21:[2,2],23:[2,11],24:[2,17],25:[2,12],26:[2,13],27:[2,14],28:[2,15],31:[2,18],33:[2,19],34:[2,21]},parseError:function(t,e){if(!e.recoverable){var n=function(t,e){this.message=t,this.hash=e};throw n.prototype=Error,new n(t,e)}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],a=[null],i=[],o=this.table,s="",u=0,l=0,c=0,d=1,f=i.slice.call(arguments,1),h=Object.create(this.lexer),_={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(_.yy[p]=this.yy[p]);h.setInput(t,_.yy),_.yy.lexer=h,_.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var m=h.yylloc;i.push(m);var y=h.options&&h.options.ranges;"function"==typeof _.yy.parseError?this.parseError=_.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,v,M,b,k,L,w,x,D,Y={};;){if(M=n[n.length-1],this.defaultActions[M]?b=this.defaultActions[M]:(null!==g&&void 0!==g||(g=function(){var t;return t=r.pop()||h.lex()||d,"number"!=typeof t&&(t instanceof Array&&(r=t,t=r.pop()),t=e.symbols_[t]||t),t}()),b=o[M]&&o[M][g]),void 0===b||!b.length||!b[0]){var T="";D=[];for(L in o[M])this.terminals_[L]&&L>2&&D.push("'"+this.terminals_[L]+"'");T=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+D.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(u+1)+": Unexpected "+(g==d?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(T,{text:h.match,token:this.terminals_[g]||g,line:h.yylineno,loc:m,expected:D})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+M+", token: "+g);switch(b[0]){case 1:n.push(g),a.push(h.yytext),i.push(h.yylloc),n.push(b[1]),g=null,v?(g=v,v=null):(l=h.yyleng,s=h.yytext,u=h.yylineno,m=h.yylloc,c>0&&c--);break;case 2:if(w=this.productions_[b[1]][1],Y.$=a[a.length-w],Y._$={first_line:i[i.length-(w||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(w||1)].first_column,last_column:i[i.length-1].last_column},y&&(Y._$.range=[i[i.length-(w||1)].range[0],i[i.length-1].range[1]]),void 0!==(k=this.performAction.apply(Y,[s,l,u,_.yy,b[1],a,i].concat(f))))return k;w&&(n=n.slice(0,-1*w*2),a=a.slice(0,-1*w),i=i.slice(0,-1*w)),n.push(this.productions_[b[1]][0]),a.push(Y.$),i.push(Y._$),x=o[n[n.length-2]][n[n.length-1]],n.push(x);break;case 3:return!0}}return!0}},l=function(){return{EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var a=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[a[0],a[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,a;if(this.options.backtrack_lexer&&(a={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(a.yylloc.range=this.yylloc.range.slice(0))),r=t[0].match(/(?:\r\n?|\n).*/g),r&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var i in a)this[i]=a[i];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,n,r;this._more||(this.yytext="",this.match="");for(var a=this._currentRules(),i=0;ie[0].length)){if(e=n,r=i,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,a[i])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,a[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return t=this.conditionStack.length-1-Math.abs(t||0),t>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 12;case 1:case 2:case 3:break;case 4:return 4;case 5:return 15;case 6:return 17;case 7:return 20;case 8:return 21;case 9:return 19;case 10:case 11:return 8;case 12:return 5;case 13:return 26;case 14:this.begin("options");break;case 15:this.popState();break;case 16:return 11;case 17:this.begin("string");break;case 18:this.popState();break;case 19:return 23;case 20:return 18;case 21:return 7}},rules:[/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit\b)/i,/^(?:branch\b)/i,/^(?:merge\b)/i,/^(?:reset\b)/i,/^(?:checkout\b)/i,/^(?:LR\b)/i,/^(?:BT\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:end\r?\n)/i,/^(?:[^\n]+\r?\n)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[a-zA-Z][a-zA-Z0-9_]+)/i,/^(?:$)/i],conditions:{options:{rules:[15,16],inclusive:!1},string:{rules:[18,19],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,20,21],inclusive:!0}}}}();return u.lexer=l,t.prototype=u,u.Parser=t,new t}();e.parser=a,e.Parser=a.Parser,e.parse=function(){return a.parse.apply(a,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var a=n(8).readFileSync(n(9).normalize(r[1]),"utf8");return e.parser.parse(a)},void 0!==r&&n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(e,n(7),n(3)(t))},function(t,e,n){t.exports=n(224)},function(t,e,n){var r=n(226),a=n(239),i=a(r);t.exports=i},function(t,e,n){function r(t,e){var n=o(t),r=!n&&i(t),c=!n&&!r&&s(t),f=!n&&!r&&!c&&l(t),h=n||r||c||f,_=h?a(t.length,String):[],p=_.length;for(var m in t)!e&&!d.call(t,m)||h&&("length"==m||c&&("offset"==m||"parent"==m)||f&&("buffer"==m||"byteLength"==m||"byteOffset"==m)||u(m,p))||_.push(m);return _}var a=n(229),i=n(176),o=n(2),s=n(178),u=n(33),l=n(179),c=Object.prototype,d=c.hasOwnProperty;t.exports=r},function(t,e,n){var r=n(230),a=n(12),i=Object.prototype,o=i.hasOwnProperty,s=i.propertyIsEnumerable,u=r(function(){return arguments}())?r:function(t){return a(t)&&o.call(t,"callee")&&!s.call(t,"callee")};t.exports=u},function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(e,n(19))},function(t,e,n){(function(t){var r=n(5),a=n(233),i="object"==typeof e&&e&&!e.nodeType&&e,o=i&&"object"==typeof t&&t&&!t.nodeType&&t,s=o&&o.exports===i,u=s?r.Buffer:void 0,l=u?u.isBuffer:void 0,c=l||a;t.exports=c}).call(e,n(3)(t))},function(t,e,n){var r=n(234),a=n(180),i=n(235),o=i&&i.isTypedArray,s=o?a(o):r;t.exports=s},function(t,e){function n(t){return function(e){return t(e)}}t.exports=n},function(t,e){function n(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||r)}var r=Object.prototype;t.exports=n},function(t,e,n){function r(t){if(!i(t))return!1;var e=a(t);return e==s||e==u||e==o||e==l}var a=n(11),i=n(14),o="[object AsyncFunction]",s="[object Function]",u="[object GeneratorFunction]",l="[object Proxy]";t.exports=r},function(t,e,n){function r(t,e,n){"__proto__"==e&&a?a(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}var a=n(184);t.exports=r},function(t,e,n){var r=n(10),a=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=a},function(t,e){function n(t){if(null!=t){try{return a.call(t)}catch(t){}try{return t+""}catch(t){}}return""}var r=Function.prototype,a=r.toString;t.exports=n},function(t,e,n){function r(t){var e=this.__data__=new a(t);this.size=e.size}var a=n(24),i=n(270),o=n(271),s=n(272),u=n(273),l=n(274);r.prototype.clear=i,r.prototype.delete=o,r.prototype.get=s,r.prototype.has=u,r.prototype.set=l,t.exports=r},function(t,e,n){function r(t,e,n,o,s){return t===e||(null==t||null==e||!i(t)&&!i(e)?t!==t&&e!==e:a(t,e,n,o,r,s))}var a=n(287),i=n(12);t.exports=r},function(t,e,n){function r(t,e,n,r,l,c){var d=n&s,f=t.length,h=e.length;if(f!=h&&!(d&&h>f))return!1;var _=c.get(t);if(_&&c.get(e))return _==e;var p=-1,m=!0,y=n&u?new a:void 0;for(c.set(t,e),c.set(e,t);++pe.seq&&o(e,t)}function u(t,e,n){var r=t.indexOf(e);-1===r?t.push(n):t.splice(r,1,n)}function l(t){var e=(0,v.default)(t,"seq"),n="";t.forEach(function(t){n+=t===e?"\t*":"\t|"});var r=[n,e.id,e.seq];if((0,y.default)(L,function(t,n){t===e.id&&r.push(n)}),M.logger.debug(r.join(" ")),Array.isArray(e.parent)){var a=b[e.parent[0]];u(t,e,a),t.push(b[e.parent[1]])}else{if(null==e.parent)return;var i=b[e.parent];u(t,e,i)}t=(0,p.default)(t,"id"),l(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.getHead=e.getDirection=e.getCurrentBranch=e.getCommitsArray=e.getCommits=e.getBranches=e.getBranchesAsObjArray=e.clear=e.prettyPrint=e.reset=e.checkout=e.merge=e.branch=e.commit=e.getOptions=e.setOptions=e.setDirection=void 0;var c=n(324),d=r(c),f=n(329),h=r(f),_=n(330),p=r(_),m=n(173),y=r(m),g=n(339),v=r(g),M=n(1),b={},k=null,L={master:k},w="master",x="LR",D=0,Y=e.setDirection=function(t){x=t},T={},A=e.setOptions=function(t){M.logger.debug("options str",t),t=t&&t.trim(),t=t||"{}";try{T=JSON.parse(t)}catch(t){M.logger.error("error while parsing gitGraph options",t.message)}},S=e.getOptions=function(){return T},E=e.commit=function(t){var e={id:i(),message:t,seq:D++,parent:null==k?null:k.id};k=e,b[e.id]=e,L[w]=e.id,M.logger.debug("in pushCommit "+e.id)},j=e.branch=function(t){L[t]=null!=k?k.id:null,M.logger.debug("in createBranch")},C=e.merge=function(t){var e=b[L[w]],n=b[L[t]];if(s(e,n))return void M.logger.debug("Already merged");if(o(e,n))L[w]=L[t],k=b[L[w]];else{var r={id:i(),message:"merged branch "+t+" into "+w,seq:D++,parent:[null==k?null:k.id,L[t]]};k=r,b[r.id]=r,L[w]=r.id}M.logger.debug(L),M.logger.debug("in mergeBranch")},F=e.checkout=function(t){M.logger.debug("in checkout"),w=t;var e=L[w];k=b[e]},O=e.reset=function(t){M.logger.debug("in reset",t);var e=t.split(":")[0],n=parseInt(t.split(":")[1]),r="HEAD"===e?k:b[L[e]];for(M.logger.debug(r,n);n>0;)if(r=b[r.parent],n--,!r){var a="Critical error - unique parent commit not found during reset";throw M.logger.error(a),a}k=r,L[w]=r.id},H=e.prettyPrint=function(){M.logger.debug(b),l([R()[0]])},P=e.clear=function(){b={},k=null,L={master:k},w="master",D=0},N=e.getBranchesAsObjArray=function(){return(0,h.default)(L,function(t,e){return{name:e,commit:b[t]}})},B=e.getBranches=function(){return L},I=e.getCommits=function(){return b},R=e.getCommitsArray=function(){var t=Object.keys(b).map(function(t){return b[t]});return t.forEach(function(t){M.logger.debug(t.id)}),(0,d.default)(t,["seq"],["desc"])},z=e.getCurrentBranch=function(){return w},W=e.getDirection=function(){return x},q=e.getHead=function(){return k};e.default={setDirection:Y,setOptions:A,getOptions:S,commit:E,branch:j,merge:C,checkout:F,reset:O,prettyPrint:H,clear:P,getBranchesAsObjArray:N,getBranches:B,getCommits:I,getCommitsArray:R,getCurrentBranch:z,getDirection:W,getHead:q}},function(t,e,n){function r(t,e){var n=-1,r=i(t)?Array(t.length):[];return a(t,function(t,a,i){r[++n]=e(t,a,i)}),r}var a=n(174),i=n(13);t.exports=r},function(t,e){t.exports={name:"mermaid",version:"7.1.0",description:"Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.",main:"dist/mermaid.core.js",keywords:["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph"],scripts:{build:"node -r babel-register ./node_modules/.bin/webpack --progress --colors","build:watch":"yarn build --watch",release:"yarn build -p --config webpack.config.prod.js",upgrade:"yarn upgrade --latest && yarn remove d3 && yarn add d3@3.5.17",lint:"standard",karma:"node -r babel-register node_modules/.bin/karma start karma.conf.js --single-run",test:"yarn lint && yarn karma",jison:"node -r babel-register node_modules/.bin/gulp jison",prepublishOnly:"yarn build && yarn release && yarn test"},repository:{type:"git",url:"https://github.com/knsv/mermaid"},author:"Knut Sveidqvist",license:"MIT",standard:{ignore:["**/parser/*.js","dist/**/*.js"]},dependencies:{d3:"3.5.17","dagre-d3-renderer":"^0.4.24","dagre-layout":"^0.8.0",he:"^1.1.1",lodash:"^4.17.4",moment:"^2.18.1"},devDependencies:{"babel-core":"^6.26.0","babel-loader":"^7.1.2","babel-plugin-lodash":"^3.2.11","babel-preset-env":"^1.6.0","babel-preset-es2015":"^6.24.1","codeclimate-test-reporter":"^0.5.0","css-loader":"^0.28.7","css-to-string-loader":"^0.1.3","extract-text-webpack-plugin":"^3.0.0",gulp:"^3.9.1","gulp-filelog":"^0.4.1","gulp-jison":"^1.2.0","inject-loader":"^3.0.1",jasmine:"^2.8.0","jasmine-es6":"^0.4.1",jison:"^0.4.18",karma:"^1.7.1","karma-chrome-launcher":"^2.2.0","karma-jasmine":"^1.1.0","karma-sourcemap-loader":"^0.3.7","karma-webpack":"^2.0.4",less:"^2.7.2","less-loader":"^4.0.5",puppeteer:"^0.10.2",standard:"^10.0.3","style-loader":"^0.18.2",webpack:"^3.5.6","webpack-node-externals":"^1.6.0"},files:["dist","src"]}},function(t,e,n){"use strict";(function(t){function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var a=n(201),i=r(a),o=n(202),s=r(o),u=n(1),l=n(199),c=r(l),d=0,f=function(){var e=s.default.getConfig();u.logger.debug("Starting rendering diagrams");var n;arguments.length>=2?(/*! sequence config was passed as #1 */ -void 0!==arguments[0]&&(m.sequenceConfig=arguments[0]),n=arguments[1]):n=arguments[0];var r;"function"==typeof arguments[arguments.length-1]?(r=arguments[arguments.length-1],u.logger.debug("Callback function found")):void 0!==e.mermaid&&("function"==typeof e.mermaid.callback?(r=e.mermaid.callback,u.logger.debug("Callback function found")):u.logger.debug("No Callback function found")),n=void 0===n?document.querySelectorAll(".mermaid"):"string"==typeof n?document.querySelectorAll(n):n instanceof window.Node?[n]:n,void 0!==t.mermaid_config&&s.default.initialize(t.mermaid_config),u.logger.debug("Start On Load before: "+m.startOnLoad),void 0!==m.startOnLoad&&(u.logger.debug("Start On Load inner: "+m.startOnLoad),s.default.initialize({startOnLoad:m.startOnLoad})),void 0!==m.ganttConfig&&s.default.initialize({gantt:m.ganttConfig});for(var a,o=function(t,e){c.innerHTML=t,void 0!==r&&r(f),e(c)},l=0;l\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g,f={"­":"shy","‌":"zwnj","‍":"zwj","‎":"lrm","⁣":"ic","⁢":"it","⁡":"af","‏":"rlm","​":"ZeroWidthSpace","⁠":"NoBreak","̑":"DownBreve","⃛":"tdot","⃜":"DotDot","\t":"Tab","\n":"NewLine"," ":"puncsp"," ":"MediumSpace"," ":"thinsp"," ":"hairsp"," ":"emsp13"," ":"ensp"," ":"emsp14"," ":"emsp"," ":"numsp"," ":"nbsp","  ":"ThickSpace","‾":"oline",_:"lowbar","‐":"dash","–":"ndash","—":"mdash","―":"horbar",",":"comma",";":"semi","⁏":"bsemi",":":"colon","⩴":"Colone","!":"excl","¡":"iexcl","?":"quest","¿":"iquest",".":"period","‥":"nldr","…":"mldr","·":"middot","'":"apos","‘":"lsquo","’":"rsquo","‚":"sbquo","‹":"lsaquo","›":"rsaquo",'"':"quot","“":"ldquo","”":"rdquo","„":"bdquo","«":"laquo","»":"raquo","(":"lpar",")":"rpar","[":"lsqb","]":"rsqb","{":"lcub","}":"rcub","⌈":"lceil","⌉":"rceil","⌊":"lfloor","⌋":"rfloor","⦅":"lopar","⦆":"ropar","⦋":"lbrke","⦌":"rbrke","⦍":"lbrkslu","⦎":"rbrksld","⦏":"lbrksld","⦐":"rbrkslu","⦑":"langd","⦒":"rangd","⦓":"lparlt","⦔":"rpargt","⦕":"gtlPar","⦖":"ltrPar","⟦":"lobrk","⟧":"robrk","⟨":"lang","⟩":"rang","⟪":"Lang","⟫":"Rang","⟬":"loang","⟭":"roang","❲":"lbbrk","❳":"rbbrk","‖":"Vert","§":"sect","¶":"para","@":"commat","*":"ast","/":"sol",undefined:null,"&":"amp","#":"num","%":"percnt","‰":"permil","‱":"pertenk","†":"dagger","‡":"Dagger","•":"bull","⁃":"hybull","′":"prime","″":"Prime","‴":"tprime","⁗":"qprime","‵":"bprime","⁁":"caret","`":"grave","´":"acute","˜":"tilde","^":"Hat","¯":"macr","˘":"breve","˙":"dot","¨":"die","˚":"ring","˝":"dblac","¸":"cedil","˛":"ogon","ˆ":"circ","ˇ":"caron","°":"deg","©":"copy","®":"reg","℗":"copysr","℘":"wp","℞":"rx","℧":"mho","℩":"iiota","←":"larr","↚":"nlarr","→":"rarr","↛":"nrarr","↑":"uarr","↓":"darr","↔":"harr","↮":"nharr","↕":"varr","↖":"nwarr","↗":"nearr","↘":"searr","↙":"swarr","↝":"rarrw","↝̸":"nrarrw","↞":"Larr","↟":"Uarr","↠":"Rarr","↡":"Darr","↢":"larrtl","↣":"rarrtl","↤":"mapstoleft","↥":"mapstoup","↦":"map","↧":"mapstodown","↩":"larrhk","↪":"rarrhk","↫":"larrlp","↬":"rarrlp","↭":"harrw","↰":"lsh","↱":"rsh","↲":"ldsh","↳":"rdsh","↵":"crarr","↶":"cularr","↷":"curarr","↺":"olarr","↻":"orarr","↼":"lharu","↽":"lhard","↾":"uharr","↿":"uharl","⇀":"rharu","⇁":"rhard","⇂":"dharr","⇃":"dharl","⇄":"rlarr","⇅":"udarr","⇆":"lrarr","⇇":"llarr","⇈":"uuarr","⇉":"rrarr","⇊":"ddarr","⇋":"lrhar","⇌":"rlhar","⇐":"lArr","⇍":"nlArr","⇑":"uArr","⇒":"rArr","⇏":"nrArr","⇓":"dArr","⇔":"iff","⇎":"nhArr","⇕":"vArr","⇖":"nwArr","⇗":"neArr","⇘":"seArr","⇙":"swArr","⇚":"lAarr","⇛":"rAarr","⇝":"zigrarr","⇤":"larrb","⇥":"rarrb","⇵":"duarr","⇽":"loarr","⇾":"roarr","⇿":"hoarr","∀":"forall","∁":"comp","∂":"part","∂̸":"npart","∃":"exist","∄":"nexist","∅":"empty","∇":"Del","∈":"in","∉":"notin","∋":"ni","∌":"notni","϶":"bepsi","∏":"prod","∐":"coprod","∑":"sum","+":"plus","±":"pm","÷":"div","×":"times","<":"lt","≮":"nlt","<⃒":"nvlt","=":"equals","≠":"ne","=⃥":"bne","⩵":"Equal",">":"gt","≯":"ngt",">⃒":"nvgt","¬":"not","|":"vert","¦":"brvbar","−":"minus","∓":"mp","∔":"plusdo","⁄":"frasl","∖":"setmn","∗":"lowast","∘":"compfn","√":"Sqrt","∝":"prop","∞":"infin","∟":"angrt","∠":"ang","∠⃒":"nang","∡":"angmsd","∢":"angsph","∣":"mid","∤":"nmid","∥":"par","∦":"npar","∧":"and","∨":"or","∩":"cap","∩︀":"caps","∪":"cup","∪︀":"cups","∫":"int","∬":"Int","∭":"tint","⨌":"qint","∮":"oint","∯":"Conint","∰":"Cconint","∱":"cwint","∲":"cwconint","∳":"awconint","∴":"there4","∵":"becaus","∶":"ratio","∷":"Colon","∸":"minusd","∺":"mDDot","∻":"homtht","∼":"sim","≁":"nsim","∼⃒":"nvsim","∽":"bsim","∽̱":"race","∾":"ac","∾̳":"acE","∿":"acd","≀":"wr","≂":"esim","≂̸":"nesim","≃":"sime","≄":"nsime","≅":"cong","≇":"ncong","≆":"simne","≈":"ap","≉":"nap","≊":"ape","≋":"apid","≋̸":"napid","≌":"bcong","≍":"CupCap","≭":"NotCupCap","≍⃒":"nvap","≎":"bump","≎̸":"nbump","≏":"bumpe","≏̸":"nbumpe","≐":"doteq","≐̸":"nedot","≑":"eDot","≒":"efDot","≓":"erDot","≔":"colone","≕":"ecolon","≖":"ecir","≗":"cire","≙":"wedgeq","≚":"veeeq","≜":"trie","≟":"equest","≡":"equiv","≢":"nequiv","≡⃥":"bnequiv","≤":"le","≰":"nle","≤⃒":"nvle","≥":"ge","≱":"nge","≥⃒":"nvge","≦":"lE","≦̸":"nlE","≧":"gE","≧̸":"ngE","≨︀":"lvnE","≨":"lnE","≩":"gnE","≩︀":"gvnE","≪":"ll","≪̸":"nLtv","≪⃒":"nLt","≫":"gg","≫̸":"nGtv","≫⃒":"nGt","≬":"twixt","≲":"lsim","≴":"nlsim","≳":"gsim","≵":"ngsim","≶":"lg","≸":"ntlg","≷":"gl","≹":"ntgl","≺":"pr","⊀":"npr","≻":"sc","⊁":"nsc","≼":"prcue","⋠":"nprcue","≽":"sccue","⋡":"nsccue","≾":"prsim","≿":"scsim","≿̸":"NotSucceedsTilde","⊂":"sub","⊄":"nsub","⊂⃒":"vnsub","⊃":"sup","⊅":"nsup","⊃⃒":"vnsup","⊆":"sube","⊈":"nsube","⊇":"supe","⊉":"nsupe","⊊︀":"vsubne","⊊":"subne","⊋︀":"vsupne","⊋":"supne","⊍":"cupdot","⊎":"uplus","⊏":"sqsub","⊏̸":"NotSquareSubset","⊐":"sqsup","⊐̸":"NotSquareSuperset","⊑":"sqsube","⋢":"nsqsube","⊒":"sqsupe","⋣":"nsqsupe","⊓":"sqcap","⊓︀":"sqcaps","⊔":"sqcup","⊔︀":"sqcups","⊕":"oplus","⊖":"ominus","⊗":"otimes","⊘":"osol","⊙":"odot","⊚":"ocir","⊛":"oast","⊝":"odash","⊞":"plusb","⊟":"minusb","⊠":"timesb","⊡":"sdotb","⊢":"vdash","⊬":"nvdash","⊣":"dashv","⊤":"top","⊥":"bot","⊧":"models","⊨":"vDash","⊭":"nvDash","⊩":"Vdash","⊮":"nVdash","⊪":"Vvdash","⊫":"VDash","⊯":"nVDash","⊰":"prurel","⊲":"vltri","⋪":"nltri","⊳":"vrtri","⋫":"nrtri","⊴":"ltrie","⋬":"nltrie","⊴⃒":"nvltrie","⊵":"rtrie","⋭":"nrtrie","⊵⃒":"nvrtrie","⊶":"origof","⊷":"imof","⊸":"mumap","⊹":"hercon","⊺":"intcal","⊻":"veebar","⊽":"barvee","⊾":"angrtvb","⊿":"lrtri","⋀":"Wedge","⋁":"Vee","⋂":"xcap","⋃":"xcup","⋄":"diam","⋅":"sdot","⋆":"Star","⋇":"divonx","⋈":"bowtie","⋉":"ltimes","⋊":"rtimes","⋋":"lthree","⋌":"rthree","⋍":"bsime","⋎":"cuvee","⋏":"cuwed","⋐":"Sub","⋑":"Sup","⋒":"Cap","⋓":"Cup","⋔":"fork","⋕":"epar","⋖":"ltdot","⋗":"gtdot","⋘":"Ll","⋘̸":"nLl","⋙":"Gg","⋙̸":"nGg","⋚︀":"lesg","⋚":"leg","⋛":"gel","⋛︀":"gesl","⋞":"cuepr","⋟":"cuesc","⋦":"lnsim","⋧":"gnsim","⋨":"prnsim","⋩":"scnsim","⋮":"vellip","⋯":"ctdot","⋰":"utdot","⋱":"dtdot","⋲":"disin","⋳":"isinsv","⋴":"isins","⋵":"isindot","⋵̸":"notindot","⋶":"notinvc","⋷":"notinvb","⋹":"isinE","⋹̸":"notinE","⋺":"nisd","⋻":"xnis","⋼":"nis","⋽":"notnivc","⋾":"notnivb","⌅":"barwed","⌆":"Barwed","⌌":"drcrop","⌍":"dlcrop","⌎":"urcrop","⌏":"ulcrop","⌐":"bnot","⌒":"profline","⌓":"profsurf","⌕":"telrec","⌖":"target","⌜":"ulcorn","⌝":"urcorn","⌞":"dlcorn","⌟":"drcorn","⌢":"frown","⌣":"smile","⌭":"cylcty","⌮":"profalar","⌶":"topbot","⌽":"ovbar","⌿":"solbar","⍼":"angzarr","⎰":"lmoust","⎱":"rmoust","⎴":"tbrk","⎵":"bbrk","⎶":"bbrktbrk","⏜":"OverParenthesis","⏝":"UnderParenthesis","⏞":"OverBrace","⏟":"UnderBrace","⏢":"trpezium","⏧":"elinters","␣":"blank","─":"boxh","│":"boxv","┌":"boxdr","┐":"boxdl","└":"boxur","┘":"boxul","├":"boxvr","┤":"boxvl","┬":"boxhd","┴":"boxhu","┼":"boxvh","═":"boxH","║":"boxV","╒":"boxdR","╓":"boxDr","╔":"boxDR","╕":"boxdL","╖":"boxDl","╗":"boxDL","╘":"boxuR","╙":"boxUr","╚":"boxUR","╛":"boxuL","╜":"boxUl","╝":"boxUL","╞":"boxvR","╟":"boxVr","╠":"boxVR","╡":"boxvL","╢":"boxVl","╣":"boxVL","╤":"boxHd","╥":"boxhD","╦":"boxHD","╧":"boxHu","╨":"boxhU","╩":"boxHU","╪":"boxvH","╫":"boxVh","╬":"boxVH","▀":"uhblk","▄":"lhblk","█":"block","░":"blk14","▒":"blk12","▓":"blk34","□":"squ","▪":"squf","▫":"EmptyVerySmallSquare","▭":"rect","▮":"marker","▱":"fltns","△":"xutri","▴":"utrif","▵":"utri","▸":"rtrif","▹":"rtri","▽":"xdtri","▾":"dtrif","▿":"dtri","◂":"ltrif","◃":"ltri","◊":"loz","○":"cir","◬":"tridot","◯":"xcirc","◸":"ultri","◹":"urtri","◺":"lltri","◻":"EmptySmallSquare","◼":"FilledSmallSquare","★":"starf","☆":"star","☎":"phone","♀":"female","♂":"male","♠":"spades","♣":"clubs","♥":"hearts","♦":"diams","♪":"sung","✓":"check","✗":"cross","✠":"malt","✶":"sext","❘":"VerticalSeparator","⟈":"bsolhsub","⟉":"suphsol","⟵":"xlarr","⟶":"xrarr","⟷":"xharr","⟸":"xlArr","⟹":"xrArr","⟺":"xhArr","⟼":"xmap","⟿":"dzigrarr","⤂":"nvlArr","⤃":"nvrArr","⤄":"nvHarr","⤅":"Map","⤌":"lbarr","⤍":"rbarr","⤎":"lBarr","⤏":"rBarr","⤐":"RBarr","⤑":"DDotrahd","⤒":"UpArrowBar","⤓":"DownArrowBar","⤖":"Rarrtl","⤙":"latail","⤚":"ratail","⤛":"lAtail","⤜":"rAtail","⤝":"larrfs","⤞":"rarrfs","⤟":"larrbfs","⤠":"rarrbfs","⤣":"nwarhk","⤤":"nearhk","⤥":"searhk","⤦":"swarhk","⤧":"nwnear","⤨":"toea","⤩":"tosa","⤪":"swnwar","⤳":"rarrc","⤳̸":"nrarrc","⤵":"cudarrr","⤶":"ldca","⤷":"rdca","⤸":"cudarrl","⤹":"larrpl","⤼":"curarrm","⤽":"cularrp","⥅":"rarrpl","⥈":"harrcir","⥉":"Uarrocir","⥊":"lurdshar","⥋":"ldrushar","⥎":"LeftRightVector","⥏":"RightUpDownVector","⥐":"DownLeftRightVector","⥑":"LeftUpDownVector","⥒":"LeftVectorBar","⥓":"RightVectorBar","⥔":"RightUpVectorBar","⥕":"RightDownVectorBar","⥖":"DownLeftVectorBar","⥗":"DownRightVectorBar","⥘":"LeftUpVectorBar","⥙":"LeftDownVectorBar","⥚":"LeftTeeVector","⥛":"RightTeeVector","⥜":"RightUpTeeVector","⥝":"RightDownTeeVector","⥞":"DownLeftTeeVector","⥟":"DownRightTeeVector","⥠":"LeftUpTeeVector","⥡":"LeftDownTeeVector","⥢":"lHar","⥣":"uHar","⥤":"rHar","⥥":"dHar","⥦":"luruhar","⥧":"ldrdhar","⥨":"ruluhar","⥩":"rdldhar","⥪":"lharul","⥫":"llhard","⥬":"rharul","⥭":"lrhard","⥮":"udhar","⥯":"duhar","⥰":"RoundImplies","⥱":"erarr","⥲":"simrarr","⥳":"larrsim","⥴":"rarrsim","⥵":"rarrap","⥶":"ltlarr","⥸":"gtrarr","⥹":"subrarr","⥻":"suplarr","⥼":"lfisht","⥽":"rfisht","⥾":"ufisht","⥿":"dfisht","⦚":"vzigzag","⦜":"vangrt","⦝":"angrtvbd","⦤":"ange","⦥":"range","⦦":"dwangle","⦧":"uwangle","⦨":"angmsdaa","⦩":"angmsdab","⦪":"angmsdac","⦫":"angmsdad","⦬":"angmsdae","⦭":"angmsdaf","⦮":"angmsdag","⦯":"angmsdah","⦰":"bemptyv","⦱":"demptyv","⦲":"cemptyv","⦳":"raemptyv","⦴":"laemptyv","⦵":"ohbar","⦶":"omid","⦷":"opar","⦹":"operp","⦻":"olcross","⦼":"odsold","⦾":"olcir","⦿":"ofcir","⧀":"olt","⧁":"ogt","⧂":"cirscir","⧃":"cirE","⧄":"solb","⧅":"bsolb","⧉":"boxbox","⧍":"trisb","⧎":"rtriltri","⧏":"LeftTriangleBar","⧏̸":"NotLeftTriangleBar","⧐":"RightTriangleBar","⧐̸":"NotRightTriangleBar","⧜":"iinfin","⧝":"infintie","⧞":"nvinfin","⧣":"eparsl","⧤":"smeparsl","⧥":"eqvparsl","⧫":"lozf","⧴":"RuleDelayed","⧶":"dsol","⨀":"xodot","⨁":"xoplus","⨂":"xotime","⨄":"xuplus","⨆":"xsqcup","⨍":"fpartint","⨐":"cirfnint","⨑":"awint","⨒":"rppolint","⨓":"scpolint","⨔":"npolint","⨕":"pointint","⨖":"quatint","⨗":"intlarhk","⨢":"pluscir","⨣":"plusacir","⨤":"simplus","⨥":"plusdu","⨦":"plussim","⨧":"plustwo","⨩":"mcomma","⨪":"minusdu","⨭":"loplus","⨮":"roplus","⨯":"Cross","⨰":"timesd","⨱":"timesbar","⨳":"smashp","⨴":"lotimes","⨵":"rotimes","⨶":"otimesas","⨷":"Otimes","⨸":"odiv","⨹":"triplus","⨺":"triminus","⨻":"tritime","⨼":"iprod","⨿":"amalg","⩀":"capdot","⩂":"ncup","⩃":"ncap","⩄":"capand","⩅":"cupor","⩆":"cupcap","⩇":"capcup","⩈":"cupbrcap","⩉":"capbrcup","⩊":"cupcup","⩋":"capcap","⩌":"ccups","⩍":"ccaps","⩐":"ccupssm","⩓":"And","⩔":"Or","⩕":"andand","⩖":"oror","⩗":"orslope","⩘":"andslope","⩚":"andv","⩛":"orv","⩜":"andd","⩝":"ord","⩟":"wedbar","⩦":"sdote","⩪":"simdot","⩭":"congdot","⩭̸":"ncongdot","⩮":"easter","⩯":"apacir","⩰":"apE","⩰̸":"napE","⩱":"eplus","⩲":"pluse","⩳":"Esim","⩷":"eDDot","⩸":"equivDD","⩹":"ltcir","⩺":"gtcir","⩻":"ltquest","⩼":"gtquest","⩽":"les","⩽̸":"nles","⩾":"ges","⩾̸":"nges","⩿":"lesdot","⪀":"gesdot","⪁":"lesdoto","⪂":"gesdoto","⪃":"lesdotor","⪄":"gesdotol","⪅":"lap","⪆":"gap","⪇":"lne","⪈":"gne","⪉":"lnap","⪊":"gnap","⪋":"lEg","⪌":"gEl","⪍":"lsime","⪎":"gsime","⪏":"lsimg","⪐":"gsiml","⪑":"lgE","⪒":"glE","⪓":"lesges","⪔":"gesles","⪕":"els","⪖":"egs","⪗":"elsdot","⪘":"egsdot","⪙":"el","⪚":"eg","⪝":"siml","⪞":"simg","⪟":"simlE","⪠":"simgE","⪡":"LessLess","⪡̸":"NotNestedLessLess","⪢":"GreaterGreater","⪢̸":"NotNestedGreaterGreater","⪤":"glj","⪥":"gla","⪦":"ltcc","⪧":"gtcc","⪨":"lescc","⪩":"gescc","⪪":"smt","⪫":"lat","⪬":"smte","⪬︀":"smtes","⪭":"late","⪭︀":"lates","⪮":"bumpE","⪯":"pre","⪯̸":"npre","⪰":"sce","⪰̸":"nsce","⪳":"prE","⪴":"scE","⪵":"prnE","⪶":"scnE","⪷":"prap","⪸":"scap","⪹":"prnap","⪺":"scnap","⪻":"Pr","⪼":"Sc","⪽":"subdot","⪾":"supdot","⪿":"subplus","⫀":"supplus","⫁":"submult","⫂":"supmult","⫃":"subedot","⫄":"supedot","⫅":"subE","⫅̸":"nsubE","⫆":"supE","⫆̸":"nsupE","⫇":"subsim","⫈":"supsim","⫋︀":"vsubnE","⫋":"subnE","⫌︀":"vsupnE","⫌":"supnE","⫏":"csub","⫐":"csup","⫑":"csube","⫒":"csupe","⫓":"subsup","⫔":"supsub","⫕":"subsub","⫖":"supsup","⫗":"suphsub","⫘":"supdsub","⫙":"forkv","⫚":"topfork","⫛":"mlcp","⫤":"Dashv","⫦":"Vdashl","⫧":"Barv","⫨":"vBar","⫩":"vBarv","⫫":"Vbar","⫬":"Not","⫭":"bNot","⫮":"rnmid","⫯":"cirmid","⫰":"midcir","⫱":"topcir","⫲":"nhpar","⫳":"parsim","⫽":"parsl","⫽⃥":"nparsl","♭":"flat","♮":"natur","♯":"sharp","¤":"curren","¢":"cent",$:"dollar","£":"pound","¥":"yen","€":"euro","¹":"sup1","½":"half","⅓":"frac13","¼":"frac14","⅕":"frac15","⅙":"frac16","⅛":"frac18","²":"sup2","⅔":"frac23","⅖":"frac25","³":"sup3","¾":"frac34","⅗":"frac35","⅜":"frac38","⅘":"frac45","⅚":"frac56","⅝":"frac58","⅞":"frac78","𝒶":"ascr","𝕒":"aopf","𝔞":"afr","𝔸":"Aopf","𝔄":"Afr","𝒜":"Ascr","ª":"ordf","á":"aacute","Á":"Aacute","à":"agrave","À":"Agrave","ă":"abreve","Ă":"Abreve","â":"acirc","Â":"Acirc","å":"aring","Å":"angst","ä":"auml","Ä":"Auml","ã":"atilde","Ã":"Atilde","ą":"aogon","Ą":"Aogon","ā":"amacr","Ā":"Amacr","æ":"aelig","Æ":"AElig","𝒷":"bscr","𝕓":"bopf","𝔟":"bfr","𝔹":"Bopf","ℬ":"Bscr","𝔅":"Bfr","𝔠":"cfr","𝒸":"cscr","𝕔":"copf","ℭ":"Cfr","𝒞":"Cscr","ℂ":"Copf","ć":"cacute","Ć":"Cacute","ĉ":"ccirc","Ĉ":"Ccirc","č":"ccaron","Č":"Ccaron","ċ":"cdot","Ċ":"Cdot","ç":"ccedil","Ç":"Ccedil","℅":"incare","𝔡":"dfr","ⅆ":"dd","𝕕":"dopf","𝒹":"dscr","𝒟":"Dscr","𝔇":"Dfr","ⅅ":"DD","𝔻":"Dopf","ď":"dcaron","Ď":"Dcaron","đ":"dstrok","Đ":"Dstrok","ð":"eth","Ð":"ETH","ⅇ":"ee","ℯ":"escr","𝔢":"efr","𝕖":"eopf","ℰ":"Escr","𝔈":"Efr","𝔼":"Eopf","é":"eacute","É":"Eacute","è":"egrave","È":"Egrave","ê":"ecirc","Ê":"Ecirc","ě":"ecaron","Ě":"Ecaron","ë":"euml","Ë":"Euml","ė":"edot","Ė":"Edot","ę":"eogon","Ę":"Eogon","ē":"emacr","Ē":"Emacr","𝔣":"ffr","𝕗":"fopf","𝒻":"fscr","𝔉":"Ffr","𝔽":"Fopf","ℱ":"Fscr","ff":"fflig","ffi":"ffilig","ffl":"ffllig","fi":"filig",fj:"fjlig","fl":"fllig","ƒ":"fnof","ℊ":"gscr","𝕘":"gopf","𝔤":"gfr","𝒢":"Gscr","𝔾":"Gopf","𝔊":"Gfr","ǵ":"gacute","ğ":"gbreve","Ğ":"Gbreve","ĝ":"gcirc","Ĝ":"Gcirc","ġ":"gdot","Ġ":"Gdot","Ģ":"Gcedil","𝔥":"hfr","ℎ":"planckh","𝒽":"hscr","𝕙":"hopf","ℋ":"Hscr","ℌ":"Hfr","ℍ":"Hopf","ĥ":"hcirc","Ĥ":"Hcirc","ℏ":"hbar","ħ":"hstrok","Ħ":"Hstrok","𝕚":"iopf","𝔦":"ifr","𝒾":"iscr","ⅈ":"ii","𝕀":"Iopf","ℐ":"Iscr","ℑ":"Im","í":"iacute","Í":"Iacute","ì":"igrave","Ì":"Igrave","î":"icirc","Î":"Icirc","ï":"iuml","Ï":"Iuml","ĩ":"itilde","Ĩ":"Itilde","İ":"Idot","į":"iogon","Į":"Iogon","ī":"imacr","Ī":"Imacr","ij":"ijlig","IJ":"IJlig","ı":"imath","𝒿":"jscr","𝕛":"jopf","𝔧":"jfr","𝒥":"Jscr","𝔍":"Jfr","𝕁":"Jopf","ĵ":"jcirc","Ĵ":"Jcirc","ȷ":"jmath","𝕜":"kopf","𝓀":"kscr","𝔨":"kfr","𝒦":"Kscr","𝕂":"Kopf","𝔎":"Kfr","ķ":"kcedil","Ķ":"Kcedil","𝔩":"lfr","𝓁":"lscr","ℓ":"ell","𝕝":"lopf","ℒ":"Lscr","𝔏":"Lfr","𝕃":"Lopf","ĺ":"lacute","Ĺ":"Lacute","ľ":"lcaron","Ľ":"Lcaron","ļ":"lcedil","Ļ":"Lcedil","ł":"lstrok","Ł":"Lstrok","ŀ":"lmidot","Ŀ":"Lmidot","𝔪":"mfr","𝕞":"mopf","𝓂":"mscr","𝔐":"Mfr","𝕄":"Mopf","ℳ":"Mscr","𝔫":"nfr","𝕟":"nopf","𝓃":"nscr","ℕ":"Nopf","𝒩":"Nscr","𝔑":"Nfr","ń":"nacute","Ń":"Nacute","ň":"ncaron","Ň":"Ncaron","ñ":"ntilde","Ñ":"Ntilde","ņ":"ncedil","Ņ":"Ncedil","№":"numero","ŋ":"eng","Ŋ":"ENG","𝕠":"oopf","𝔬":"ofr","ℴ":"oscr","𝒪":"Oscr","𝔒":"Ofr","𝕆":"Oopf","º":"ordm","ó":"oacute","Ó":"Oacute","ò":"ograve","Ò":"Ograve","ô":"ocirc","Ô":"Ocirc","ö":"ouml","Ö":"Ouml","ő":"odblac","Ő":"Odblac","õ":"otilde","Õ":"Otilde","ø":"oslash","Ø":"Oslash","ō":"omacr","Ō":"Omacr","œ":"oelig","Œ":"OElig","𝔭":"pfr","𝓅":"pscr","𝕡":"popf","ℙ":"Popf","𝔓":"Pfr","𝒫":"Pscr","𝕢":"qopf","𝔮":"qfr","𝓆":"qscr","𝒬":"Qscr","𝔔":"Qfr","ℚ":"Qopf","ĸ":"kgreen","𝔯":"rfr","𝕣":"ropf","𝓇":"rscr","ℛ":"Rscr","ℜ":"Re","ℝ":"Ropf","ŕ":"racute","Ŕ":"Racute","ř":"rcaron","Ř":"Rcaron","ŗ":"rcedil","Ŗ":"Rcedil","𝕤":"sopf","𝓈":"sscr","𝔰":"sfr","𝕊":"Sopf","𝔖":"Sfr","𝒮":"Sscr","Ⓢ":"oS","ś":"sacute","Ś":"Sacute","ŝ":"scirc","Ŝ":"Scirc","š":"scaron","Š":"Scaron","ş":"scedil","Ş":"Scedil","ß":"szlig","𝔱":"tfr","𝓉":"tscr","𝕥":"topf","𝒯":"Tscr","𝔗":"Tfr","𝕋":"Topf","ť":"tcaron","Ť":"Tcaron","ţ":"tcedil","Ţ":"Tcedil","™":"trade","ŧ":"tstrok","Ŧ":"Tstrok","𝓊":"uscr","𝕦":"uopf","𝔲":"ufr","𝕌":"Uopf","𝔘":"Ufr","𝒰":"Uscr","ú":"uacute","Ú":"Uacute","ù":"ugrave","Ù":"Ugrave","ŭ":"ubreve","Ŭ":"Ubreve","û":"ucirc","Û":"Ucirc","ů":"uring","Ů":"Uring","ü":"uuml","Ü":"Uuml","ű":"udblac","Ű":"Udblac","ũ":"utilde","Ũ":"Utilde","ų":"uogon","Ų":"Uogon","ū":"umacr","Ū":"Umacr","𝔳":"vfr","𝕧":"vopf","𝓋":"vscr","𝔙":"Vfr","𝕍":"Vopf","𝒱":"Vscr","𝕨":"wopf","𝓌":"wscr","𝔴":"wfr","𝒲":"Wscr","𝕎":"Wopf","𝔚":"Wfr","ŵ":"wcirc","Ŵ":"Wcirc","𝔵":"xfr","𝓍":"xscr","𝕩":"xopf","𝕏":"Xopf","𝔛":"Xfr","𝒳":"Xscr","𝔶":"yfr","𝓎":"yscr","𝕪":"yopf","𝒴":"Yscr","𝔜":"Yfr","𝕐":"Yopf","ý":"yacute","Ý":"Yacute","ŷ":"ycirc","Ŷ":"Ycirc","ÿ":"yuml","Ÿ":"Yuml","𝓏":"zscr","𝔷":"zfr","𝕫":"zopf","ℨ":"Zfr","ℤ":"Zopf","𝒵":"Zscr","ź":"zacute","Ź":"Zacute","ž":"zcaron","Ž":"Zcaron","ż":"zdot","Ż":"Zdot","Ƶ":"imped","þ":"thorn","Þ":"THORN","ʼn":"napos","α":"alpha","Α":"Alpha","β":"beta","Β":"Beta","γ":"gamma","Γ":"Gamma","δ":"delta","Δ":"Delta","ε":"epsi","ϵ":"epsiv","Ε":"Epsilon","ϝ":"gammad","Ϝ":"Gammad","ζ":"zeta","Ζ":"Zeta","η":"eta","Η":"Eta","θ":"theta","ϑ":"thetav","Θ":"Theta","ι":"iota","Ι":"Iota","κ":"kappa","ϰ":"kappav","Κ":"Kappa","λ":"lambda","Λ":"Lambda","μ":"mu","µ":"micro","Μ":"Mu","ν":"nu","Ν":"Nu","ξ":"xi","Ξ":"Xi","ο":"omicron","Ο":"Omicron","π":"pi","ϖ":"piv","Π":"Pi","ρ":"rho","ϱ":"rhov","Ρ":"Rho","σ":"sigma","Σ":"Sigma","ς":"sigmaf","τ":"tau","Τ":"Tau","υ":"upsi","Υ":"Upsilon","ϒ":"Upsi","φ":"phi","ϕ":"phiv","Φ":"Phi","χ":"chi","Χ":"Chi","ψ":"psi","Ψ":"Psi","ω":"omega","Ω":"ohm","а":"acy","А":"Acy","б":"bcy","Б":"Bcy","в":"vcy","В":"Vcy","г":"gcy","Г":"Gcy","ѓ":"gjcy","Ѓ":"GJcy","д":"dcy","Д":"Dcy","ђ":"djcy","Ђ":"DJcy","е":"iecy","Е":"IEcy","ё":"iocy","Ё":"IOcy","є":"jukcy","Є":"Jukcy","ж":"zhcy","Ж":"ZHcy","з":"zcy","З":"Zcy","ѕ":"dscy","Ѕ":"DScy","и":"icy","И":"Icy","і":"iukcy","І":"Iukcy","ї":"yicy","Ї":"YIcy","й":"jcy","Й":"Jcy","ј":"jsercy","Ј":"Jsercy","к":"kcy","К":"Kcy","ќ":"kjcy","Ќ":"KJcy","л":"lcy","Л":"Lcy","љ":"ljcy","Љ":"LJcy","м":"mcy","М":"Mcy","н":"ncy","Н":"Ncy","њ":"njcy","Њ":"NJcy","о":"ocy","О":"Ocy","п":"pcy","П":"Pcy","р":"rcy","Р":"Rcy","с":"scy","С":"Scy","т":"tcy","Т":"Tcy","ћ":"tshcy","Ћ":"TSHcy","у":"ucy","У":"Ucy","ў":"ubrcy","Ў":"Ubrcy","ф":"fcy","Ф":"Fcy","х":"khcy","Х":"KHcy","ц":"tscy","Ц":"TScy","ч":"chcy","Ч":"CHcy","џ":"dzcy","Џ":"DZcy","ш":"shcy","Ш":"SHcy","щ":"shchcy","Щ":"SHCHcy","ъ":"hardcy","Ъ":"HARDcy","ы":"ycy","Ы":"Ycy","ь":"softcy","Ь":"SOFTcy","э":"ecy","Э":"Ecy","ю":"yucy","Ю":"YUcy","я":"yacy","Я":"YAcy","ℵ":"aleph","ℶ":"beth","ℷ":"gimel","ℸ":"daleth"},h=/["&'<>`]/g,_={'"':""","&":"&","'":"'","<":"<",">":">","`":"`"},p=/&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/,m=/[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,y=/&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)([=a-zA-Z0-9])?/g,g={aacute:"á",Aacute:"Á",abreve:"ă",Abreve:"Ă",ac:"∾",acd:"∿",acE:"∾̳",acirc:"â",Acirc:"Â",acute:"´",acy:"а",Acy:"А",aelig:"æ",AElig:"Æ",af:"⁡",afr:"𝔞",Afr:"𝔄",agrave:"à",Agrave:"À",alefsym:"ℵ",aleph:"ℵ",alpha:"α",Alpha:"Α",amacr:"ā",Amacr:"Ā",amalg:"⨿",amp:"&",AMP:"&",and:"∧",And:"⩓",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",aogon:"ą",Aogon:"Ą",aopf:"𝕒",Aopf:"𝔸",ap:"≈",apacir:"⩯",ape:"≊",apE:"⩰",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",aring:"å",Aring:"Å",ascr:"𝒶",Ascr:"𝒜",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",atilde:"ã",Atilde:"Ã",auml:"ä",Auml:"Ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",barwed:"⌅",Barwed:"⌆",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",bcy:"б",Bcy:"Б",bdquo:"„",becaus:"∵",because:"∵",Because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",beta:"β",Beta:"Β",beth:"ℶ",between:"≬",bfr:"𝔟",Bfr:"𝔅",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bnot:"⌐",bNot:"⫭",bopf:"𝕓",Bopf:"𝔹",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxdl:"┐",boxdL:"╕",boxDl:"╖",boxDL:"╗",boxdr:"┌",boxdR:"╒",boxDr:"╓",boxDR:"╔",boxh:"─",boxH:"═",boxhd:"┬",boxhD:"╥",boxHd:"╤",boxHD:"╦",boxhu:"┴",boxhU:"╨",boxHu:"╧",boxHU:"╩",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxul:"┘",boxuL:"╛",boxUl:"╜",boxUL:"╝",boxur:"└",boxuR:"╘",boxUr:"╙",boxUR:"╚",boxv:"│",boxV:"║",boxvh:"┼",boxvH:"╪",boxVh:"╫",boxVH:"╬",boxvl:"┤",boxvL:"╡",boxVl:"╢",boxVL:"╣",boxvr:"├",boxvR:"╞",boxVr:"╟",boxVR:"╠",bprime:"‵",breve:"˘",Breve:"˘",brvbar:"¦",bscr:"𝒷",Bscr:"ℬ",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpe:"≏",bumpE:"⪮",bumpeq:"≏",Bumpeq:"≎",cacute:"ć",Cacute:"Ć",cap:"∩",Cap:"⋒",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",ccaron:"č",Ccaron:"Č",ccedil:"ç",Ccedil:"Ç",ccirc:"ĉ",Ccirc:"Ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",cdot:"ċ",Cdot:"Ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",centerdot:"·",CenterDot:"·",cfr:"𝔠",Cfr:"ℭ",chcy:"ч",CHcy:"Ч",check:"✓",checkmark:"✓",chi:"χ",Chi:"Χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cire:"≗",cirE:"⧃",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",colon:":",Colon:"∷",colone:"≔",Colone:"⩴",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",conint:"∮",Conint:"∯",ContourIntegral:"∮",copf:"𝕔",Copf:"ℂ",coprod:"∐",Coproduct:"∐",copy:"©",COPY:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",cross:"✗",Cross:"⨯",cscr:"𝒸",Cscr:"𝒞",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",cup:"∪",Cup:"⋓",cupbrcap:"⩈",cupcap:"⩆",CupCap:"≍",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",dagger:"†",Dagger:"‡",daleth:"ℸ",darr:"↓",dArr:"⇓",Darr:"↡",dash:"‐",dashv:"⊣",Dashv:"⫤",dbkarow:"⤏",dblac:"˝",dcaron:"ď",Dcaron:"Ď",dcy:"д",Dcy:"Д",dd:"ⅆ",DD:"ⅅ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",delta:"δ",Delta:"Δ",demptyv:"⦱",dfisht:"⥿",dfr:"𝔡",Dfr:"𝔇",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",diamond:"⋄",Diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",djcy:"ђ",DJcy:"Ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",dopf:"𝕕",Dopf:"𝔻",dot:"˙",Dot:"¨",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",downarrow:"↓",Downarrow:"⇓",DownArrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",dscr:"𝒹",Dscr:"𝒟",dscy:"ѕ",DScy:"Ѕ",dsol:"⧶",dstrok:"đ",Dstrok:"Đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",dzcy:"џ",DZcy:"Џ",dzigrarr:"⟿",eacute:"é",Eacute:"É",easter:"⩮",ecaron:"ě",Ecaron:"Ě",ecir:"≖",ecirc:"ê",Ecirc:"Ê",ecolon:"≕",ecy:"э",Ecy:"Э",eDDot:"⩷",edot:"ė",eDot:"≑",Edot:"Ė",ee:"ⅇ",efDot:"≒",efr:"𝔢",Efr:"𝔈",eg:"⪚",egrave:"è",Egrave:"È",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",emacr:"ē",Emacr:"Ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",eng:"ŋ",ENG:"Ŋ",ensp:" ",eogon:"ę",Eogon:"Ę",eopf:"𝕖",Eopf:"𝔼",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",epsilon:"ε",Epsilon:"Ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",escr:"ℯ",Escr:"ℰ",esdot:"≐",esim:"≂",Esim:"⩳",eta:"η",Eta:"Η",eth:"ð",ETH:"Ð",euml:"ë",Euml:"Ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",exponentiale:"ⅇ",ExponentialE:"ⅇ",fallingdotseq:"≒",fcy:"ф",Fcy:"Ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",ffr:"𝔣",Ffr:"𝔉",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",fopf:"𝕗",Fopf:"𝔽",forall:"∀",ForAll:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",fscr:"𝒻",Fscr:"ℱ",gacute:"ǵ",gamma:"γ",Gamma:"Γ",gammad:"ϝ",Gammad:"Ϝ",gap:"⪆",gbreve:"ğ",Gbreve:"Ğ",Gcedil:"Ģ",gcirc:"ĝ",Gcirc:"Ĝ",gcy:"г",Gcy:"Г",gdot:"ġ",Gdot:"Ġ",ge:"≥",gE:"≧",gel:"⋛",gEl:"⪌",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",gfr:"𝔤",Gfr:"𝔊",gg:"≫",Gg:"⋙",ggg:"⋙",gimel:"ℷ",gjcy:"ѓ",GJcy:"Ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gne:"⪈",gnE:"≩",gneq:"⪈",gneqq:"≩",gnsim:"⋧",gopf:"𝕘",Gopf:"𝔾",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",gscr:"ℊ",Gscr:"𝒢",gsim:"≳",gsime:"⪎",gsiml:"⪐",gt:">",Gt:"≫",GT:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",hardcy:"ъ",HARDcy:"Ъ",harr:"↔",hArr:"⇔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",hcirc:"ĥ",Hcirc:"Ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",hfr:"𝔥",Hfr:"ℌ",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",hopf:"𝕙",Hopf:"ℍ",horbar:"―",HorizontalLine:"─",hscr:"𝒽",Hscr:"ℋ",hslash:"ℏ",hstrok:"ħ",Hstrok:"Ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",iacute:"í",Iacute:"Í",ic:"⁣",icirc:"î",Icirc:"Î",icy:"и",Icy:"И",Idot:"İ",iecy:"е",IEcy:"Е",iexcl:"¡",iff:"⇔",ifr:"𝔦",Ifr:"ℑ",igrave:"ì",Igrave:"Ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",ijlig:"ij",IJlig:"IJ",Im:"ℑ",imacr:"ī",Imacr:"Ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",int:"∫",Int:"∬",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",iocy:"ё",IOcy:"Ё",iogon:"į",Iogon:"Į",iopf:"𝕚",Iopf:"𝕀",iota:"ι",Iota:"Ι",iprod:"⨼",iquest:"¿",iscr:"𝒾",Iscr:"ℐ",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",itilde:"ĩ",Itilde:"Ĩ",iukcy:"і",Iukcy:"І",iuml:"ï",Iuml:"Ï",jcirc:"ĵ",Jcirc:"Ĵ",jcy:"й",Jcy:"Й",jfr:"𝔧",Jfr:"𝔍",jmath:"ȷ",jopf:"𝕛",Jopf:"𝕁",jscr:"𝒿",Jscr:"𝒥",jsercy:"ј",Jsercy:"Ј",jukcy:"є",Jukcy:"Є",kappa:"κ",Kappa:"Κ",kappav:"ϰ",kcedil:"ķ",Kcedil:"Ķ",kcy:"к",Kcy:"К",kfr:"𝔨",Kfr:"𝔎",kgreen:"ĸ",khcy:"х",KHcy:"Х",kjcy:"ќ",KJcy:"Ќ",kopf:"𝕜",Kopf:"𝕂",kscr:"𝓀",Kscr:"𝒦",lAarr:"⇚",lacute:"ĺ",Lacute:"Ĺ",laemptyv:"⦴",lagran:"ℒ",lambda:"λ",Lambda:"Λ",lang:"⟨",Lang:"⟪",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",larr:"←",lArr:"⇐",Larr:"↞",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",latail:"⤙",lAtail:"⤛",late:"⪭",lates:"⪭︀",lbarr:"⤌",lBarr:"⤎",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",lcaron:"ľ",Lcaron:"Ľ",lcedil:"ļ",Lcedil:"Ļ",lceil:"⌈",lcub:"{",lcy:"л",Lcy:"Л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",le:"≤",lE:"≦",LeftAngleBracket:"⟨",leftarrow:"←",Leftarrow:"⇐",LeftArrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",leftrightarrow:"↔",Leftrightarrow:"⇔",LeftRightArrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",leg:"⋚",lEg:"⪋",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",lfr:"𝔩",Lfr:"𝔏",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",ljcy:"љ",LJcy:"Љ",ll:"≪",Ll:"⋘",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",lmidot:"ŀ",Lmidot:"Ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lne:"⪇",lnE:"≨",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",longleftarrow:"⟵",Longleftarrow:"⟸",LongLeftArrow:"⟵",longleftrightarrow:"⟷",Longleftrightarrow:"⟺",LongLeftRightArrow:"⟷",longmapsto:"⟼",longrightarrow:"⟶",Longrightarrow:"⟹",LongRightArrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",lopf:"𝕝",Lopf:"𝕃",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",lscr:"𝓁",Lscr:"ℒ",lsh:"↰",Lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",lstrok:"ł",Lstrok:"Ł",lt:"<",Lt:"≪",LT:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",map:"↦",Map:"⤅",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",mcy:"м",Mcy:"М",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",mfr:"𝔪",Mfr:"𝔐",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",mopf:"𝕞",Mopf:"𝕄",mp:"∓",mscr:"𝓂",Mscr:"ℳ",mstpos:"∾",mu:"μ",Mu:"Μ",multimap:"⊸",mumap:"⊸",nabla:"∇",nacute:"ń",Nacute:"Ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",ncaron:"ň",Ncaron:"Ň",ncedil:"ņ",Ncedil:"Ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",ncy:"н",Ncy:"Н",ndash:"–",ne:"≠",nearhk:"⤤",nearr:"↗",neArr:"⇗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",nfr:"𝔫",Nfr:"𝔑",nge:"≱",ngE:"≧̸",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",ngt:"≯",nGt:"≫⃒",ngtr:"≯",nGtv:"≫̸",nharr:"↮",nhArr:"⇎",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",njcy:"њ",NJcy:"Њ",nlarr:"↚",nlArr:"⇍",nldr:"‥",nle:"≰",nlE:"≦̸",nleftarrow:"↚",nLeftarrow:"⇍",nleftrightarrow:"↮",nLeftrightarrow:"⇎",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nlt:"≮",nLt:"≪⃒",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",nopf:"𝕟",Nopf:"ℕ",not:"¬",Not:"⫬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrarr:"↛",nrArr:"⇏",nrarrc:"⤳̸",nrarrw:"↝̸",nrightarrow:"↛",nRightarrow:"⇏",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",nscr:"𝓃",Nscr:"𝒩",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsube:"⊈",nsubE:"⫅̸",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupe:"⊉",nsupE:"⫆̸",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",ntilde:"ñ",Ntilde:"Ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",nu:"ν",Nu:"Ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nvdash:"⊬",nvDash:"⊭",nVdash:"⊮",nVDash:"⊯",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwarr:"↖",nwArr:"⇖",nwarrow:"↖",nwnear:"⤧",oacute:"ó",Oacute:"Ó",oast:"⊛",ocir:"⊚",ocirc:"ô",Ocirc:"Ô",ocy:"о",Ocy:"О",odash:"⊝",odblac:"ő",Odblac:"Ő",odiv:"⨸",odot:"⊙",odsold:"⦼",oelig:"œ",OElig:"Œ",ofcir:"⦿",ofr:"𝔬",Ofr:"𝔒",ogon:"˛",ograve:"ò",Ograve:"Ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",omacr:"ō",Omacr:"Ō",omega:"ω",Omega:"Ω",omicron:"ο",Omicron:"Ο",omid:"⦶",ominus:"⊖",oopf:"𝕠",Oopf:"𝕆",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",or:"∨",Or:"⩔",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",oscr:"ℴ",Oscr:"𝒪",oslash:"ø",Oslash:"Ø",osol:"⊘",otilde:"õ",Otilde:"Õ",otimes:"⊗",Otimes:"⨷",otimesas:"⨶",ouml:"ö",Ouml:"Ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",pcy:"п",Pcy:"П",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",pfr:"𝔭",Pfr:"𝔓",phi:"φ",Phi:"Φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",pi:"π",Pi:"Π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",popf:"𝕡",Popf:"ℙ",pound:"£",pr:"≺",Pr:"⪻",prap:"⪷",prcue:"≼",pre:"⪯",prE:"⪳",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",prime:"′",Prime:"″",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",pscr:"𝓅",Pscr:"𝒫",psi:"ψ",Psi:"Ψ",puncsp:" ",qfr:"𝔮",Qfr:"𝔔",qint:"⨌",qopf:"𝕢",Qopf:"ℚ",qprime:"⁗",qscr:"𝓆",Qscr:"𝒬",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",quot:'"',QUOT:'"',rAarr:"⇛",race:"∽̱",racute:"ŕ",Racute:"Ŕ",radic:"√",raemptyv:"⦳",rang:"⟩",Rang:"⟫",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",rarr:"→",rArr:"⇒",Rarr:"↠",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",rarrtl:"↣",Rarrtl:"⤖",rarrw:"↝",ratail:"⤚",rAtail:"⤜",ratio:"∶",rationals:"ℚ",rbarr:"⤍",rBarr:"⤏",RBarr:"⤐",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",rcaron:"ř",Rcaron:"Ř",rcedil:"ŗ",Rcedil:"Ŗ",rceil:"⌉",rcub:"}",rcy:"р",Rcy:"Р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",reg:"®",REG:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",rfr:"𝔯",Rfr:"ℜ",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",rho:"ρ",Rho:"Ρ",rhov:"ϱ",RightAngleBracket:"⟩",rightarrow:"→",Rightarrow:"⇒",RightArrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",ropf:"𝕣",Ropf:"ℝ",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",rscr:"𝓇",Rscr:"ℛ",rsh:"↱",Rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",sacute:"ś",Sacute:"Ś",sbquo:"‚",sc:"≻",Sc:"⪼",scap:"⪸",scaron:"š",Scaron:"Š",sccue:"≽",sce:"⪰",scE:"⪴",scedil:"ş",Scedil:"Ş",scirc:"ŝ",Scirc:"Ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",scy:"с",Scy:"С",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",searr:"↘",seArr:"⇘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",sfr:"𝔰",Sfr:"𝔖",sfrown:"⌢",sharp:"♯",shchcy:"щ",SHCHcy:"Щ",shcy:"ш",SHcy:"Ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",sigma:"σ",Sigma:"Σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",softcy:"ь",SOFTcy:"Ь",sol:"/",solb:"⧄",solbar:"⌿",sopf:"𝕤",Sopf:"𝕊",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",square:"□",Square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",sscr:"𝓈",Sscr:"𝒮",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",star:"☆",Star:"⋆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",sub:"⊂",Sub:"⋐",subdot:"⪽",sube:"⊆",subE:"⫅",subedot:"⫃",submult:"⫁",subne:"⊊",subnE:"⫋",subplus:"⪿",subrarr:"⥹",subset:"⊂",Subset:"⋐",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",sum:"∑",Sum:"∑",sung:"♪",sup:"⊃",Sup:"⋑",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supe:"⊇",supE:"⫆",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supne:"⊋",supnE:"⫌",supplus:"⫀",supset:"⊃",Supset:"⋑",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swarr:"↙",swArr:"⇙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",tau:"τ",Tau:"Τ",tbrk:"⎴",tcaron:"ť",Tcaron:"Ť",tcedil:"ţ",Tcedil:"Ţ",tcy:"т",Tcy:"Т",tdot:"⃛",telrec:"⌕",tfr:"𝔱",Tfr:"𝔗",there4:"∴",therefore:"∴",Therefore:"∴",theta:"θ",Theta:"Θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",thorn:"þ",THORN:"Þ",tilde:"˜",Tilde:"∼",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",topf:"𝕥",Topf:"𝕋",topfork:"⫚",tosa:"⤩",tprime:"‴",trade:"™",TRADE:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",tscr:"𝓉",Tscr:"𝒯",tscy:"ц",TScy:"Ц",tshcy:"ћ",TSHcy:"Ћ",tstrok:"ŧ",Tstrok:"Ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",uacute:"ú",Uacute:"Ú",uarr:"↑",uArr:"⇑",Uarr:"↟",Uarrocir:"⥉",ubrcy:"ў",Ubrcy:"Ў",ubreve:"ŭ",Ubreve:"Ŭ",ucirc:"û",Ucirc:"Û",ucy:"у",Ucy:"У",udarr:"⇅",udblac:"ű",Udblac:"Ű",udhar:"⥮",ufisht:"⥾",ufr:"𝔲",Ufr:"𝔘",ugrave:"ù",Ugrave:"Ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",umacr:"ū",Umacr:"Ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",uogon:"ų",Uogon:"Ų",uopf:"𝕦",Uopf:"𝕌",uparrow:"↑",Uparrow:"⇑",UpArrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",updownarrow:"↕",Updownarrow:"⇕",UpDownArrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",upsi:"υ",Upsi:"ϒ",upsih:"ϒ",upsilon:"υ",Upsilon:"Υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",uring:"ů",Uring:"Ů",urtri:"◹",uscr:"𝓊",Uscr:"𝒰",utdot:"⋰",utilde:"ũ",Utilde:"Ũ",utri:"▵",utrif:"▴",uuarr:"⇈",uuml:"ü",Uuml:"Ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",varr:"↕",vArr:"⇕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",vBar:"⫨",Vbar:"⫫",vBarv:"⫩",vcy:"в",Vcy:"В",vdash:"⊢",vDash:"⊨",Vdash:"⊩",VDash:"⊫",Vdashl:"⫦",vee:"∨",Vee:"⋁",veebar:"⊻",veeeq:"≚",vellip:"⋮",verbar:"|",Verbar:"‖",vert:"|",Vert:"‖",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",vfr:"𝔳",Vfr:"𝔙",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",vopf:"𝕧",Vopf:"𝕍",vprop:"∝",vrtri:"⊳",vscr:"𝓋",Vscr:"𝒱",vsubne:"⊊︀",vsubnE:"⫋︀",vsupne:"⊋︀",vsupnE:"⫌︀",Vvdash:"⊪",vzigzag:"⦚",wcirc:"ŵ",Wcirc:"Ŵ",wedbar:"⩟",wedge:"∧",Wedge:"⋀",wedgeq:"≙",weierp:"℘",wfr:"𝔴",Wfr:"𝔚",wopf:"𝕨",Wopf:"𝕎",wp:"℘",wr:"≀",wreath:"≀",wscr:"𝓌",Wscr:"𝒲",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",xfr:"𝔵",Xfr:"𝔛",xharr:"⟷",xhArr:"⟺",xi:"ξ",Xi:"Ξ",xlarr:"⟵",xlArr:"⟸",xmap:"⟼",xnis:"⋻",xodot:"⨀",xopf:"𝕩",Xopf:"𝕏",xoplus:"⨁",xotime:"⨂",xrarr:"⟶",xrArr:"⟹",xscr:"𝓍",Xscr:"𝒳",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",yacute:"ý",Yacute:"Ý",yacy:"я",YAcy:"Я",ycirc:"ŷ",Ycirc:"Ŷ",ycy:"ы",Ycy:"Ы",yen:"¥",yfr:"𝔶",Yfr:"𝔜",yicy:"ї",YIcy:"Ї",yopf:"𝕪",Yopf:"𝕐",yscr:"𝓎",Yscr:"𝒴",yucy:"ю",YUcy:"Ю",yuml:"ÿ",Yuml:"Ÿ",zacute:"ź",Zacute:"Ź",zcaron:"ž",Zcaron:"Ž",zcy:"з",Zcy:"З",zdot:"ż",Zdot:"Ż",zeetrf:"ℨ",ZeroWidthSpace:"​",zeta:"ζ",Zeta:"Ζ",zfr:"𝔷",Zfr:"ℨ",zhcy:"ж",ZHcy:"Ж",zigrarr:"⇝",zopf:"𝕫",Zopf:"ℤ",zscr:"𝓏",Zscr:"𝒵",zwj:"‍",zwnj:"‌"},v={aacute:"á",Aacute:"Á",acirc:"â",Acirc:"Â",acute:"´",aelig:"æ",AElig:"Æ",agrave:"à",Agrave:"À",amp:"&",AMP:"&",aring:"å",Aring:"Å",atilde:"ã",Atilde:"Ã",auml:"ä",Auml:"Ä",brvbar:"¦",ccedil:"ç",Ccedil:"Ç",cedil:"¸",cent:"¢",copy:"©",COPY:"©",curren:"¤",deg:"°",divide:"÷",eacute:"é",Eacute:"É",ecirc:"ê",Ecirc:"Ê",egrave:"è",Egrave:"È",eth:"ð",ETH:"Ð",euml:"ë",Euml:"Ë",frac12:"½",frac14:"¼",frac34:"¾",gt:">",GT:">",iacute:"í",Iacute:"Í",icirc:"î",Icirc:"Î",iexcl:"¡",igrave:"ì",Igrave:"Ì",iquest:"¿",iuml:"ï",Iuml:"Ï",laquo:"«",lt:"<",LT:"<",macr:"¯",micro:"µ",middot:"·",nbsp:" ",not:"¬",ntilde:"ñ",Ntilde:"Ñ",oacute:"ó",Oacute:"Ó",ocirc:"ô",Ocirc:"Ô",ograve:"ò",Ograve:"Ò",ordf:"ª",ordm:"º",oslash:"ø",Oslash:"Ø",otilde:"õ",Otilde:"Õ",ouml:"ö",Ouml:"Ö",para:"¶",plusmn:"±",pound:"£",quot:'"',QUOT:'"',raquo:"»",reg:"®",REG:"®",sect:"§",shy:"­",sup1:"¹",sup2:"²",sup3:"³",szlig:"ß",thorn:"þ",THORN:"Þ",times:"×",uacute:"ú",Uacute:"Ú",ucirc:"û",Ucirc:"Û",ugrave:"ù",Ugrave:"Ù",uml:"¨",uuml:"ü",Uuml:"Ü",yacute:"ý",Yacute:"Ý",yen:"¥",yuml:"ÿ"},M={0:"�",128:"€",130:"‚",131:"ƒ",132:"„",133:"…",134:"†",135:"‡",136:"ˆ",137:"‰",138:"Š",139:"‹",140:"Œ",142:"Ž",145:"‘",146:"’",147:"“",148:"”",149:"•",150:"–",151:"—",152:"˜",153:"™",154:"š",155:"›",156:"œ",158:"ž",159:"Ÿ"},b=[1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65e3,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111],k=String.fromCharCode,L={},w=L.hasOwnProperty,x=function(t,e){return w.call(t,e)},D=function(t,e){for(var n=-1,r=t.length;++n=55296&&t<=57343||t>1114111?(e&&E("character reference outside the permissible Unicode range"),"�"):x(M,t)?(e&&E("disallowed character reference"),M[t]):(e&&D(b,t)&&E("disallowed character reference"),t>65535&&(t-=65536,n+=k(t>>>10&1023|55296),t=56320|1023&t),n+=k(t))},A=function(t){return"&#x"+t.toString(16).toUpperCase()+";"},S=function(t){return"&#"+t+";"},E=function(t){throw Error("Parse error: "+t)},j=function(t,e){e=Y(e,j.options),e.strict&&m.test(t)&&E("forbidden code point");var n=e.encodeEverything,r=e.useNamedReferences,a=e.allowUnsafeSymbols,i=e.decimal?S:A,o=function(t){return i(t.charCodeAt(0))};return n?(t=t.replace(l,function(t){return r&&x(f,t)?"&"+f[t]+";":o(t)}),r&&(t=t.replace(/>\u20D2/g,">⃒").replace(/<\u20D2/g,"<⃒").replace(/fj/g,"fj")),r&&(t=t.replace(d,function(t){return"&"+f[t]+";"}))):r?(a||(t=t.replace(h,function(t){return"&"+f[t]+";"})),t=t.replace(/>\u20D2/g,">⃒").replace(/<\u20D2/g,"<⃒"),t=t.replace(d,function(t){return"&"+f[t]+";"})):a||(t=t.replace(h,o)),t.replace(u,function(t){var e=t.charCodeAt(0),n=t.charCodeAt(1);return i(1024*(e-55296)+n-56320+65536)}).replace(c,o)};j.options={allowUnsafeSymbols:!1,encodeEverything:!1,strict:!1,useNamedReferences:!1,decimal:!1};var C=function(t,e){e=Y(e,C.options);var n=e.strict;return n&&p.test(t)&&E("malformed character reference"),t.replace(y,function(t,r,a,i,o,s,u,l){var c,d,f,h,_,p;return r?(f=r,d=a,n&&!d&&E("character reference was not terminated by a semicolon"),c=parseInt(f,10),T(c,n)):i?(h=i,d=o,n&&!d&&E("character reference was not terminated by a semicolon"),c=parseInt(h,16),T(c,n)):s?(_=s,x(g,_)?g[_]:(n&&E("named character reference was not terminated by a semicolon"),t)):(_=u,p=l,p&&e.isAttributeValue?(n&&"="==p&&E("`&` did not start a character reference"),t):(n&&E("named character reference was not terminated by a semicolon"),v[_]+(p||"")))})};C.options={isAttributeValue:!1,strict:!1};var F=function(t){return t.replace(h,function(t){return _[t]})},O={version:"1.1.1",encode:j,decode:C,escape:F,unescape:C};void 0!==(a=function(){return O}.call(e,n,e,t))&&(t.exports=a)}()}).call(e,n(3)(t),n(19))},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function a(t){var e,n=h.default.detectType(t);switch(n){case"gitGraph":e=U.default,e.parser.yy=J.default;break;case"graph":e=L.default,e.parser.yy=d.default;break;case"dotGraph":e=x.default,e.parser.yy=d.default;break;case"sequenceDiagram":e=Y.default,e.parser.yy=A.default;break;case"info":e=b.default,e.parser.yy=E.default;break;case"gantt":e=O.default,e.parser.yy=P.default;break;case"classDiagram":e=B.default,e.parser.yy=W.default}e.parser.yy.parseError=function(t,e){throw{str:t,hash:e}},e.parse(t)}function i(t,e,n,r){try{if(1===arguments.length&&(e=t,t="mermaidId0"),"undefined"!=typeof document)return ht(t,e,n,r)}catch(t){l.logger.warn(t)}}function o(t){l.logger.debug("Initializing mermaidAPI"),"object"===(void 0===t?"undefined":u(t))&&_t(t),(0,l.setLogLevel)(lt.logLevel)}function s(){return lt}Object.defineProperty(e,"__esModule",{value:!0}),e.decodeEntities=e.encodeEntities=e.version=void 0;var u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},l=n(1),c=n(155),d=r(c),f=n(156),h=r(f),_=n(204),p=r(_),m=n(218),y=r(m),g=n(220),v=r(g),M=n(167),b=r(M),k=n(157),L=r(k),w=n(158),x=r(w),D=n(164),Y=r(D),T=n(165),A=r(T),S=n(166),E=r(S),j=n(221),C=r(j),F=n(168),O=r(F),H=n(169),P=r(H),N=n(170),B=r(N),I=n(222),R=r(I),z=n(171),W=r(z),q=n(172),U=r(q),V=n(223),$=r(V),G=n(197),J=r(G),Z=n(6),K=r(Z),X=n(199),Q=r(X),tt=n(342),et=r(tt),nt=n(344),rt=r(nt),at=n(346),it=r(at),ot=n(348),st=r(ot),ut={dark:et.default,default:rt.default,forest:it.default,neutral:st.default},lt={theme:rt.default,logLevel:5,startOnLoad:!0,arrowMarkerAbsolute:!1,flowchart:{htmlLabels:!0,useMaxWidth:!0},sequenceDiagram:{diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,mirrorActors:!0,bottomMarginAdj:1,useMaxWidth:!0},gantt:{titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,leftPadding:75,gridLineStartPadding:35,fontSize:11,fontFamily:'"Open-Sans", "sans-serif"',numberSectionStyles:3,axisFormatter:[["%I:%M",function(t){return t.getHours()}],["w. %U",function(t){return 1===t.getDay()}],["%a %d",function(t){return t.getDay()&&1!==t.getDate()}],["%b %d",function(t){return 1!==t.getDate()}],["%m-%y",function(t){return t.getMonth()}]]},classDiagram:{},gitGraph:{},info:{}};(0,l.setLogLevel)(lt.logLevel);var ct=e.version=function(){return Q.default.version},dt=e.encodeEntities=function(t){var e=t;return e=e.replace(/style.*:\S*#.*;/g,function(t){return t.substring(0,t.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(t){return t.substring(0,t.length-1)}),e=e.replace(/#\w+;/g,function(t){var e=t.substring(1,t.length-1);return/^\+?\d+$/.test(e)?"fl°°"+e+"¶ß":"fl°"+e+"¶ß"})},ft=e.decodeEntities=function(t){var e=t;return e=e.replace(/fl°°/g,function(){return"&#"}),e=e.replace(/fl°/g,function(){return"&"}),e=e.replace(/¶ß/g,function(){return";"})},ht=function(t,e,n,r){if(void 0!==r)r.innerHTML="",K.default.select(r).append("div").attr("id","d"+t).append("svg").attr("id",t).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").append("g");else{var a=document.querySelector("#d"+t);a&&(a.innerHTML=""),K.default.select("body").append("div").attr("id","d"+t).append("svg").attr("id",t).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").append("g")}window.txt=e,e=dt(e);var i=K.default.select("#d"+t).node();switch(h.default.detectType(e)){case"gitGraph":lt.flowchart.arrowMarkerAbsolute=lt.arrowMarkerAbsolute,$.default.setConf(lt.gitGraph),$.default.draw(e,t,!1);break;case"graph":lt.flowchart.arrowMarkerAbsolute=lt.arrowMarkerAbsolute,p.default.setConf(lt.flowchart),p.default.draw(e,t,!1);break;case"dotGraph":lt.flowchart.arrowMarkerAbsolute=lt.arrowMarkerAbsolute,p.default.setConf(lt.flowchart),p.default.draw(e,t,!0);break;case"sequenceDiagram":lt.sequenceDiagram.arrowMarkerAbsolute=lt.arrowMarkerAbsolute,y.default.setConf(lt.sequenceDiagram),y.default.draw(e,t);break;case"gantt":lt.gantt.arrowMarkerAbsolute=lt.arrowMarkerAbsolute,C.default.setConf(lt.gantt),C.default.draw(e,t);break;case"classDiagram":lt.classDiagram.arrowMarkerAbsolute=lt.arrowMarkerAbsolute,R.default.setConf(lt.classDiagram),R.default.draw(e,t);break;case"info":lt.info.arrowMarkerAbsolute=lt.arrowMarkerAbsolute,v.default.draw(e,t,ct())}var o=i.firstChild,s=document.createElement("style"),u=window.getComputedStyle(o);s.innerHTML="\n "+(ut[lt.theme]||rt.default)+"\nsvg {\n color: "+u.color+";\n font: "+u.font+";\n}\n ",o.insertBefore(s,o.firstChild),K.default.select("#d"+t).selectAll("foreignobject div").attr("xmlns","http://www.w3.org/1999/xhtml");var c="";lt.arrowMarkerAbsolute&&(c=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,c=c.replace(/\(/g,"\\("),c=c.replace(/\)/g,"\\)"));var f=K.default.select("#d"+t).node().innerHTML.replace(/url\(#arrowhead/g,"url("+c+"#arrowhead","g");f=ft(f),void 0!==n?n(f,d.default.bindFunctions):l.logger.warn("CB = undefined!");var _=K.default.select("#d"+t).node();return null!==_&&"function"==typeof _.remove&&K.default.select("#d"+t).node().remove(),f},_t=function(t){var e,n=Object.keys(t);for(e=0;e0&&(o=i.classes.join(" "));var s="";s=n(s,i.styles),a=void 0===i.text?i.id:i.text;var u="";if(p.htmlLabels)u="html",a=a.replace(/fa:fa[\w-]+/g,function(t){return''});else{var l=document.createElementNS("http://www.w3.org/2000/svg","text"),c=a.split(/
    /),d=0;for(d=0;d'+a.text+""):(i.labelType="text",i.style="stroke: #333; stroke-width: 1.5px;fill:none",i.label=a.text.replace(/
    /g,"\n"))):i.label=a.text.replace(/
    /g,"\n")),e.setEdge(a.start,a.end,i,r)})},v=e.getClasses=function(t,e){var n;i.default.clear(),n=e?l.default.parser:s.default.parser,n.yy=i.default,n.parse(t);var r=i.default.getClasses();return void 0===r.default&&(r.default={id:"default"},r.default.styles=[],r.default.clusterStyles=["rx:4px","fill: rgb(255, 255, 222)","rx: 4px","stroke: rgb(170, 170, 51)","stroke-width: 1px"],r.default.nodeLabelStyles=["fill:#000","stroke:none","font-weight:300",'font-family:"Helvetica Neue",Helvetica,Arial,sans-serf',"font-size:14px"],r.default.edgeLabelStyles=["fill:#000","stroke:none","font-weight:300",'font-family:"Helvetica Neue",Helvetica,Arial,sans-serf',"font-size:14px"]),r},M=e.draw=function(t,e,n){_.logger.debug("Drawing flowchart");var r;i.default.clear(),r=n?l.default.parser:s.default.parser,r.yy=i.default;try{r.parse(t)}catch(t){_.logger.debug("Parsing failed")}var a;void 0===(a=i.default.getDirection())&&(a="TD");var o,u=new h.default.graphlib.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:a,marginx:20,marginy:20}).setDefaultEdgeLabel(function(){return{}}),c=i.default.getSubGraphs(),f=0;for(f=c.length-1;f>=0;f--)o=c[f],i.default.addVertex(o.id,o.title,"group",void 0);var m=i.default.getVertices(),v=i.default.getEdges();f=0;var M;for(f=c.length-1;f>=0;f--)for(o=c[f],d.default.selectAll("cluster").append("text"),M=0;M1&&o.sort(function(t,e){var r=t.x-n.x,a=t.y-n.y,i=Math.sqrt(r*r+a*a),o=e.x-n.x,s=e.y-n.y,u=Math.sqrt(o*o+s*s);return iMath.abs(a)*s?(i<0&&(s=-s),u=0===i?0:s*a/i,l=s):(a<0&&(o=-o),u=o,l=0===a?0:o*i/a),{x:n+u,y:r+l}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=r},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var a=n(1),i=r(a),o=n(11),s=r(o),u=n(5),l=r(u),c=n(12),d=r(c),f=n(14),h=r(f),_=n(0),p=r(_),m=n(27);e.default={d3:i.default,graphlib:s.default,dagre:l.default,intersect:d.default,render:h.default,util:p.default,version:m.version}},function(t,e){t.exports=n(20)},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var a=n(6),i=r(a),o=n(7),s=r(o),u=n(3),l=r(u),c=n(8),d=r(c),f=n(9),h=r(f);e.default={node:i.default,circle:s.default,ellipse:l.default,polygon:d.default,rect:h.default}},function(t,e,n){"use strict";function r(t,e,n,r){var i=e.y-t.y,o=t.x-e.x,s=e.x*t.y-t.x*e.y,u=i*n.x+o*n.y+s,l=i*r.x+o*r.y+s;if(0===u||0===l||!a(u,l)){var c=r.y-n.y,d=n.x-r.x,f=r.x*n.y-n.x*r.y,h=c*t.x+d*t.y+f,_=c*e.x+d*e.y+f;if(0===h||0===_||!a(h,_)){var p=i*d-c*o;if(0!==p){var m=Math.abs(p/2),y=o*f-d*s,g=y<0?(y-m)/p:(y+m)/p;y=c*s-i*f;return{x:g,y:y<0?(y-m)/p:(y+m)/p}}}}}function a(t,e){return t*e>0}Object.defineProperty(e,"__esModule",{value:!0}),e.default=r},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function a(){var t=g.default,e=M.default,n=k.default,r=w.default,a=D.default,u=T.default,l=function(l,d){i(d);var h=s(l,"output"),p=s(h,"clusters"),y=s(h,"edgePaths"),g=n(s(h,"edgeLabels"),d),v=t(s(h,"nodes"),d,a);(0,c.layout)(d),(0,f.default)(v,d),(0,_.default)(g,d),r(y,d,u);var M=e(p,d);(0,m.default)(M,d),o(d)};return l.createNodes=function(e){return arguments.length?(t=e,l):t},l.createClusters=function(t){return arguments.length?(e=t,l):e},l.createEdgeLabels=function(t){return arguments.length?(n=t,l):n},l.createEdgePaths=function(t){return arguments.length?(r=t,l):r},l.shapes=function(t){return arguments.length?(a=t,l):a},l.arrows=function(t){return arguments.length?(u=t,l):u},l}function i(t){t.nodes().forEach(function(e){var n=t.node(e);l.default.has(n,"label")||t.children(e).length||(n.label=e),l.default.has(n,"paddingX")&&l.default.defaults(n,{paddingLeft:n.paddingX,paddingRight:n.paddingX}),l.default.has(n,"paddingY")&&l.default.defaults(n,{paddingTop:n.paddingY,paddingBottom:n.paddingY}),l.default.has(n,"padding")&&l.default.defaults(n,{paddingLeft:n.padding,paddingRight:n.padding,paddingTop:n.padding,paddingBottom:n.padding}),l.default.defaults(n,A),l.default.each(["paddingLeft","paddingRight","paddingTop","paddingBottom"],function(t){n[t]=Number(n[t])}),l.default.has(n,"width")&&(n._prevWidth=n.width),l.default.has(n,"height")&&(n._prevHeight=n.height)}),t.edges().forEach(function(e){var n=t.edge(e);l.default.has(n,"label")||(n.label=""),l.default.defaults(n,S)})}function o(t){l.default.each(t.nodes(),function(e){var n=t.node(e);l.default.has(n,"_prevWidth")?n.width=n._prevWidth:delete n.width,l.default.has(n,"_prevHeight")?n.height=n._prevHeight:delete n.height,delete n._prevWidth,delete n._prevHeight})}function s(t,e){var n=t.select("g."+e);return n.empty()&&(n=t.append("g").attr("class",e)),n}Object.defineProperty(e,"__esModule",{value:!0});var u=n(2),l=r(u),c=n(5),d=n(15),f=r(d),h=n(16),_=r(h),p=n(17),m=r(p),y=n(18),g=r(y),v=n(22),M=r(v),b=n(23),k=r(b),L=n(24),w=r(L),x=n(25),D=r(x),Y=n(26),T=r(Y),A={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},S={arrowhead:"normal",lineInterpolate:"linear"};e.default=a},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function a(t,e){function n(t){var n=e.node(t);return"translate("+n.x+","+n.y+")"}t.filter(function(){return!o.default.select(this).classed("update")}).attr("transform",n),u.default.applyTransition(t,e).style("opacity",1).attr("transform",n)}Object.defineProperty(e,"__esModule",{value:!0});var i=n(1),o=r(i),s=n(0),u=r(s);e.default=a},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function a(t,e){function n(t){var n=e.edge(t);return u.default.has(n,"x")?"translate("+n.x+","+n.y+")":""}t.filter(function(){return!o.default.select(this).classed("update")}).attr("transform",n),c.default.applyTransition(t,e).style("opacity",1).attr("transform",n)}Object.defineProperty(e,"__esModule",{value:!0});var i=n(1),o=r(i),s=n(2),u=r(s),l=n(0),c=r(l);e.default=a},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function a(t,e){function n(t){var n=e.node(t);return"translate("+n.x+","+n.y+")"}var r=t.filter(function(){return!o.default.select(this).classed("update")});r.attr("transform",n),u.default.applyTransition(t,e).style("opacity",1).attr("transform",n),u.default.applyTransition(r.selectAll("rect"),e).attr("width",function(t){return e.node(t).width}).attr("height",function(t){return e.node(t).height}).attr("x",function(t){return-e.node(t).width/2}).attr("y",function(t){return-e.node(t).height/2})}Object.defineProperty(e,"__esModule",{value:!0});var i=n(1),o=r(i),s=n(0),u=r(s);e.default=a},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function a(t,e,n){var r=e.nodes().filter(function(t){return!f.default.isSubgraph(e,t)}),a=t.selectAll("g.node").data(r,function(t){return t}).classed("update",!0);return a.selectAll("*").remove(),a.enter().append("g").attr("class","node").style("opacity",0),a.each(function(t){var r=e.node(t),a=u.default.select(this),i=a.append("g").attr("class","label"),s=(0,c.default)(i,r),l=n[r.shape],d=o.default.pick(s.node().getBBox(),"width","height");r.elem=this,r.id&&a.attr("id",r.id),r.labelId&&i.attr("id",r.labelId),f.default.applyClass(a,r.class,(a.classed("update")?"update ":"")+"node"),o.default.has(r,"width")&&(d.width=r.width),o.default.has(r,"height")&&(d.height=r.height),d.width+=r.paddingLeft+r.paddingRight,d.height+=r.paddingTop+r.paddingBottom,i.attr("transform","translate("+(r.paddingLeft-r.paddingRight)/2+","+(r.paddingTop-r.paddingBottom)/2+")");var h=l(u.default.select(this),d,r);f.default.applyStyle(h,r.style);var _=h.node().getBBox();r.width=_.width,r.height=_.height}),f.default.applyTransition(a.exit(),e).style("opacity",0).remove(),a}Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),o=r(i),s=n(1),u=r(s),l=n(4),c=r(l),d=n(0),f=r(d);e.default=a},function(t,e,n){"use strict";function r(t,e){for(var n=t.append("text"),r=a(e.label).split("\n"),i=0;i1||1===e.length&&t.hasEdge(e[0],e[0])})}var a=n(4),i=n(161);t.exports=r},function(t,e,n){function r(t,e,n){return a(t,e||o,n||function(e){return t.outEdges(e)})}function a(t,e,n){var r={},a=t.nodes();return a.forEach(function(t){r[t]={},r[t][t]={distance:0},a.forEach(function(e){t!==e&&(r[t][e]={distance:Number.POSITIVE_INFINITY})}),n(t).forEach(function(n){var a=n.v===t?n.w:n.v,i=e(n);r[t][a]={distance:i,predecessor:t}})}),a.forEach(function(t){var e=r[t];a.forEach(function(n){var i=r[n];a.forEach(function(n){var r=i[t],a=e[n],o=i[n],s=r.distance+a.distance;s0;){if(r=l.removeMin(),a.has(u,r))s.setEdge(r,u[r]);else{if(c)throw new Error("Input graph is not connected: "+t);c=!0}t.nodeEdges(r).forEach(n)}return s}var a=n(4),i=n(32),o=n(160);t.exports=r},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.draw=e.setConf=e.drawActors=e.bounds=void 0;var a=n(219),i=r(a),o=n(1),s=n(6),u=r(s),l=n(164),c=n(165),d=r(c);l.parser.yy=d.default;var f={diagramMarginX:50,diagramMarginY:30,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,mirrorActors:!1,bottomMarginAdj:1,activationWidth:10,textPlacement:"tspan"},h=e.bounds={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],init:function(){this.sequenceItems=[],this.activations=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(t,e,n,r){void 0===t[e]?t[e]=n:t[e]=r(n,t[e])},updateBounds:function(t,e,n,r){function a(a){return function(s){o++;var u=i.sequenceItems.length-o+1;i.updateVal(s,"starty",e-u*f.boxMargin,Math.min),i.updateVal(s,"stopy",r+u*f.boxMargin,Math.max),i.updateVal(h.data,"startx",t-u*f.boxMargin,Math.min),i.updateVal(h.data,"stopx",n+u*f.boxMargin,Math.max),"activation"!==a&&(i.updateVal(s,"startx",t-u*f.boxMargin,Math.min),i.updateVal(s,"stopx",n+u*f.boxMargin,Math.max),i.updateVal(h.data,"starty",e-u*f.boxMargin,Math.min),i.updateVal(h.data,"stopy",r+u*f.boxMargin,Math.max))}}var i=this,o=0;this.sequenceItems.forEach(a()),this.activations.forEach(a("activation"))},insert:function(t,e,n,r){var a,i,o,s;a=Math.min(t,n),o=Math.max(t,n),i=Math.min(e,r),s=Math.max(e,r),this.updateVal(h.data,"startx",a,Math.min),this.updateVal(h.data,"starty",i,Math.min),this.updateVal(h.data,"stopx",o,Math.max),this.updateVal(h.data,"stopy",s,Math.max),this.updateBounds(a,i,o,s)},newActivation:function(t,e){var n=l.parser.yy.getActors()[t.from.actor],r=g(t.from.actor).length,a=n.x+f.width/2+(r-1)*f.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+f.activationWidth,stopy:void 0,actor:t.from.actor,anchored:i.default.anchorElement(e)})},endActivation:function(t){var e=this.activations.map(function(t){return t.actor}).lastIndexOf(t.from.actor);return this.activations.splice(e,1)[0]},newLoop:function(t){this.sequenceItems.push({startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t})},endLoop:function(){return this.sequenceItems.pop()},addSectionToLoop:function(t){var e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push(h.getVerticalPos()),e.sectionTitles.push(t),this.sequenceItems.push(e)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},_=function(t,e,n,r,a){var o=i.default.getNoteRect();o.x=e,o.y=n,o.width=a||f.width,o.class="note";var s=t.append("g"),u=i.default.drawRect(s,o),l=i.default.getTextObj();l.x=e-4,l.y=n-13,l.textMargin=f.noteMargin,l.dy="1em",l.text=r.message,l.class="noteText";var c=i.default.drawText(s,l,o.width-f.noteMargin),d=c[0][0].getBBox().height;!a&&d>f.width?(c.remove(),s=t.append("g"),c=i.default.drawText(s,l,2*o.width-f.noteMargin),d=c[0][0].getBBox().height,u.attr("width",2*o.width),h.insert(e,n,e+2*o.width,n+2*f.noteMargin+d)):h.insert(e,n,e+o.width,n+2*f.noteMargin+d),u.attr("height",d+2*f.noteMargin),h.bumpVerticalPos(d+2*f.noteMargin)},p=function(t,e,n,r,a){var i,o=t.append("g"),s=e+(n-e)/2,u=o.append("text").attr("x",s).attr("y",r-7).style("text-anchor","middle").attr("class","messageText").text(a.message);i=void 0!==u[0][0].getBBox?u[0][0].getBBox().width:u[0][0].getBoundingClientRect();var c;if(e===n){c=o.append("path").attr("d","M "+e+","+r+" C "+(e+60)+","+(r-10)+" "+(e+60)+","+(r+30)+" "+e+","+(r+20)),h.bumpVerticalPos(30);var d=Math.max(i/2,100);h.insert(e-d,h.getVerticalPos()-10,n+d,h.getVerticalPos())}else c=o.append("line"),c.attr("x1",e),c.attr("y1",r),c.attr("x2",n),c.attr("y2",r),h.insert(e,h.getVerticalPos()-10,n,h.getVerticalPos());a.type===l.parser.yy.LINETYPE.DOTTED||a.type===l.parser.yy.LINETYPE.DOTTED_CROSS||a.type===l.parser.yy.LINETYPE.DOTTED_OPEN?(c.style("stroke-dasharray","3, 3"),c.attr("class","messageLine1")):c.attr("class","messageLine0");var _="";f.arrowMarkerAbsolute&&(_=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,_=_.replace(/\(/g,"\\("),_=_.replace(/\)/g,"\\)")),c.attr("stroke-width",2),c.attr("stroke","black"),c.style("fill","none"),a.type!==l.parser.yy.LINETYPE.SOLID&&a.type!==l.parser.yy.LINETYPE.DOTTED||c.attr("marker-end","url("+_+"#arrowhead)"),a.type!==l.parser.yy.LINETYPE.SOLID_CROSS&&a.type!==l.parser.yy.LINETYPE.DOTTED_CROSS||c.attr("marker-end","url("+_+"#crosshead)")},m=e.drawActors=function(t,e,n,r){var a;for(a=0;ae&&(n.starty=e-6,e+=12),i.default.drawActivation(c,n,e,f),h.insert(n.startx,e-10,n.stopx,e)}l.parser.yy.clear(),l.parser.parse(t+"\n"),h.init();var r,a,s,c=u.default.select("#"+e),d=l.parser.yy.getActors(),y=l.parser.yy.getActorKeys(),g=l.parser.yy.getMessages(),M=l.parser.yy.getTitle();m(c,d,y,0),i.default.insertArrowHead(c),i.default.insertArrowCrossHead(c),g.forEach(function(t){var e;switch(t.type){case l.parser.yy.LINETYPE.NOTE:h.bumpVerticalPos(f.boxMargin),r=d[t.from].x,a=d[t.to].x,t.placement===l.parser.yy.PLACEMENT.RIGHTOF?_(c,r+(f.width+f.actorMargin)/2,h.getVerticalPos(),t):t.placement===l.parser.yy.PLACEMENT.LEFTOF?_(c,r-(f.width+f.actorMargin)/2,h.getVerticalPos(),t):t.to===t.from?_(c,r,h.getVerticalPos(),t):(s=Math.abs(r-a)+f.actorMargin,_(c,(r+a+f.width-s)/2,h.getVerticalPos(),t,s));break;case l.parser.yy.LINETYPE.ACTIVE_START:h.newActivation(t,c);break;case l.parser.yy.LINETYPE.ACTIVE_END:n(t,h.getVerticalPos());break;case l.parser.yy.LINETYPE.LOOP_START:h.bumpVerticalPos(f.boxMargin),h.newLoop(t.message),h.bumpVerticalPos(f.boxMargin+f.boxTextMargin);break;case l.parser.yy.LINETYPE.LOOP_END:e=h.endLoop(),i.default.drawLoop(c,e,"loop",f),h.bumpVerticalPos(f.boxMargin);break;case l.parser.yy.LINETYPE.OPT_START:h.bumpVerticalPos(f.boxMargin),h.newLoop(t.message),h.bumpVerticalPos(f.boxMargin+f.boxTextMargin);break;case l.parser.yy.LINETYPE.OPT_END:e=h.endLoop(),i.default.drawLoop(c,e,"opt",f),h.bumpVerticalPos(f.boxMargin);break;case l.parser.yy.LINETYPE.ALT_START:h.bumpVerticalPos(f.boxMargin),h.newLoop(t.message),h.bumpVerticalPos(f.boxMargin+f.boxTextMargin);break;case l.parser.yy.LINETYPE.ALT_ELSE:h.bumpVerticalPos(f.boxMargin),e=h.addSectionToLoop(t.message),h.bumpVerticalPos(f.boxMargin);break;case l.parser.yy.LINETYPE.ALT_END:e=h.endLoop(),i.default.drawLoop(c,e,"alt",f),h.bumpVerticalPos(f.boxMargin);break;case l.parser.yy.LINETYPE.PAR_START:h.bumpVerticalPos(f.boxMargin),h.newLoop(t.message),h.bumpVerticalPos(f.boxMargin+f.boxTextMargin);break;case l.parser.yy.LINETYPE.PAR_AND:h.bumpVerticalPos(f.boxMargin),e=h.addSectionToLoop(t.message),h.bumpVerticalPos(f.boxMargin);break;case l.parser.yy.LINETYPE.PAR_END:e=h.endLoop(),i.default.drawLoop(c,e,"par",f),h.bumpVerticalPos(f.boxMargin);break;default:try{h.bumpVerticalPos(f.messageMargin);var o=v(t.from),u=v(t.to),m=o[0]<=u[0]?1:0,y=o[0]/gi," "),a=t.append("text");a.attr("x",e.x),a.attr("y",e.y),a.style("text-anchor",e.anchor),a.attr("fill",e.fill),void 0!==e.class&&a.attr("class",e.class);var i=a.append("tspan");return i.attr("x",e.x+2*e.textMargin),i.attr("fill",e.fill),i.text(r),void 0!==a.textwrap&&a.textwrap({x:e.x,y:e.y,width:n,height:1800},e.textMargin),a},i=e.drawLabel=function(t,e){var n=t.append("polygon");n.attr("points",function(t,e,n,r,a){return t+","+e+" "+(t+n)+","+e+" "+(t+n)+","+(e+r-a)+" "+(t+n-1.2*a)+","+(e+r)+" "+t+","+(e+r)}(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,a(t,e)},o=-1,s=e.drawActor=function(t,e,n,a,i){var s=e+i.width/2,u=t.append("g");0===n&&(o++,u.append("line").attr("id","actor"+o).attr("x1",s).attr("y1",5).attr("x2",s).attr("y2",2e3).attr("class","actor-line").attr("stroke-width","0.5px").attr("stroke","#999"));var l=_();l.x=e,l.y=n,l.fill="#eaeaea",l.width=i.width,l.height=i.height,l.class="actor",l.rx=3,l.ry=3,r(u,l),p(i)(a,u,l.x,l.y,l.width,l.height,{class:"actor"})},u=e.anchorElement=function(t){return t.append("g")},l=e.drawActivation=function(t,e,n){var a=_(),i=e.anchored;a.x=e.startx,a.y=e.starty,a.fill="#f4f4f4",a.width=e.stopx-e.startx,a.height=n-e.starty,r(i,a)},c=e.drawLoop=function(t,e,n,r){var o=t.append("g"),s=function(t,e,n,r){return o.append("line").attr("x1",t).attr("y1",e).attr("x2",n).attr("y2",r).attr("class","loopLine")};s(e.startx,e.starty,e.stopx,e.starty),s(e.stopx,e.starty,e.stopx,e.stopy),s(e.startx,e.stopy,e.stopx,e.stopy),s(e.startx,e.starty,e.startx,e.stopy),void 0!==e.sections&&e.sections.forEach(function(t){s(e.startx,t,e.stopx,t).style("stroke-dasharray","3, 3")});var u=h();u.text=n,u.x=e.startx,u.y=e.starty,u.labelMargin=15,u.class="labelText",i(o,u),u=h(),u.text="[ "+e.title+" ]",u.x=e.startx+(e.stopx-e.startx)/2,u.y=e.starty+1.5*r.boxMargin,u.anchor="middle",u.class="loopText",a(o,u),void 0!==e.sectionTitles&&e.sectionTitles.forEach(function(t,n){""!==t&&(u.text="[ "+t+" ]",u.y=e.sections[n]+1.5*r.boxMargin,a(o,u))})},d=e.insertArrowHead=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")},f=e.insertArrowCrossHead=function(t){var e=t.append("defs"),n=e.append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);n.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),n.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},h=e.getTextObj=function(){return{x:0,y:0,fill:"black","text-anchor":"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0}},_=e.getNoteRect=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},p=function(){function t(t,e,n,a,i,o,s){r(e.append("text").attr("x",n+i/2).attr("y",a+o/2+5).style("text-anchor","middle").text(t),s)}function e(t,e,n,a,i,o,s){var u=e.append("text").attr("x",n+i/2).attr("y",a).style("text-anchor","middle");if(u.append("tspan").attr("x",n+i/2).attr("dy","0").text(t),void 0!==u.textwrap){u.textwrap({x:n+i/2,y:a,width:i,height:o},0);var l=u.selectAll("tspan");l.length>0&&l[0].length>0&&(l=l[0],u.attr("y",a+(o/2-u[0][0].getBBox().height*(1-1/l.length)/2)).attr("dominant-baseline","central").attr("alignment-baseline","central"))}r(u,s)}function n(t,n,a,i,o,s,u){var l=n.append("switch"),c=l.append("foreignObject").attr("x",a).attr("y",i).attr("width",o).attr("height",s),d=c.append("div").style("display","table").style("height","100%").style("width","100%");d.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,l,a,i,o,s,u),r(d,u)}function r(t,e){for(var n in e)e.hasOwnProperty(n)&&t.attr(n,e[n])}return function(r){return"fo"===r.textPlacement?n:"old"===r.textPlacement?t:e}}();e.default={drawRect:r,drawText:a,drawLabel:i,drawActor:s,anchorElement:u,drawActivation:l,drawLoop:c,insertArrowHead:d,insertArrowCrossHead:f,getTextObj:h,getNoteRect:_}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.draw=void 0;var a=n(166),i=r(a),o=n(167),s=r(o),u=n(6),l=r(u),c=n(1),d=e.draw=function(t,e,n){var r;r=s.default.parser,r.yy=i.default,c.logger.debug("Renering example diagram"),r.parse(t);var a=l.default.select("#"+e);a.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size","32px").style("text-anchor","middle").text("mermaid "+n),a.attr("height",100),a.attr("width",400)};e.default={draw:d}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.draw=e.setConf=void 0;var a=n(0),i=r(a),o=n(168),s=n(169),u=r(s),l=n(6),c=r(l);o.parser.yy=u.default;var d,f,h={titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,fontFamily:'"Open-Sans", "sans-serif"'},_=e.setConf=function(t){Object.keys(t).forEach(function(e){h[e]=t[e]})},p=e.draw=function(t,e){function n(t,e,n,r,a,i,o,s){y.append("g").selectAll("rect").data(t).enter().append("rect").attr("x",0).attr("y",function(t,r){return r*e+n-2}).attr("width",function(){return o-h.rightPadding/2}).attr("height",e).attr("class",function(t){for(var e=0;en-e?n+a+1.5*h.leftPadding>o?e+r-5:n+r+5:(n-e)/2+e+r}).attr("y",function(t,r){return r*e+h.barHeight/2+(h.fontSize/2-2)+n}).attr("text-height",a).attr("class",function(t){for(var e=M(t.startTime),n=M(t.endTime),r=this.getBBox().width,a=0,i=0;in-e?n+r+1.5*h.leftPadding>o?"taskTextOutsideLeft taskTextOutside"+a+" "+s:"taskTextOutsideRight taskTextOutside"+a+" "+s:"taskText taskText"+a+" "+s})}function r(t,e,n,r){var a,i=[[".%L",function(t){return t.getMilliseconds()}],[":%S",function(t){return t.getSeconds()}],["h1 %I:%M",function(t){return t.getMinutes()}]],o=[["%Y",function(){return!0}]],s=[["%I:%M",function(t){return t.getHours()}],["%a %d",function(t){return t.getDay()&&1!==t.getDate()}],["%b %d",function(t){return 1!==t.getDate()}],["%B",function(t){return t.getMonth()}]];void 0!==h.axisFormatter&&(s=[],h.axisFormatter.forEach(function(t){var e=[];e[0]=t[0],e[1]=t[1],s.push(e)})),a=i.concat(s).concat(o);var u=c.default.svg.axis().scale(M).orient("bottom").tickSize(-r+e+h.gridLineStartPadding,0,0).tickFormat(c.default.time.format.multi(a));d>7&&d<230&&(u=u.ticks(c.default.time.monday.range)),y.append("g").attr("class","grid").attr("transform","translate("+t+", "+(r-50)+")").call(u).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em")}function a(t,e){for(var n=[],r=0,a=0;a0))return a[1]*t/2+e;for(var o=0;o "+t.w+": "+JSON.stringify(r.edge(t))),g(n,r.edge(t),r.edge(t).relation)}),n.attr("height","100%"),n.attr("width","100%"),n.attr("viewBox","0 0 "+(r.graph().width+20)+" "+(r.graph().height+20))};e.default={setConf:M,draw:b}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function a(t){t.append("defs").append("g").attr("id","def-commit").append("circle").attr("r",S.nodeRadius).attr("cx",0).attr("cy",0),t.select("#def-commit").append("foreignObject").attr("width",S.nodeLabel.width).attr("height",S.nodeLabel.height).attr("x",S.nodeLabel.x).attr("y",S.nodeLabel.y).attr("class","node-label").attr("requiredFeatures","http://www.w3.org/TR/SVG11/feature#Extensibility").append("xhtml:p").html("")}function i(t,e,n,r){r=r||"basis";var a=S.branchColors[n%S.branchColors.length],i=Y.default.svg.line().x(function(t){return Math.round(t.x)}).y(function(t){return Math.round(t.y)}).interpolate(r);t.append("svg:path").attr("d",i(e)).style("stroke",a).style("stroke-width",S.lineStrokeWidth).style("fill","none")}function o(t,e){e=e||t.node().getBBox();var n=t.node().getCTM();return{left:n.e+e.x*n.a,top:n.f+e.y*n.d,width:e.width,height:e.height}}function s(t,e,n,r,a){T.logger.debug("svgDrawLineForCommits: ",e,n);var s=o(t.select("#node-"+e+" circle")),u=o(t.select("#node-"+n+" circle"));switch(r){case"LR":if(s.left-u.left>S.nodeSpacing){var l={x:s.left-S.nodeSpacing,y:u.top+u.height/2},c={x:u.left+u.width,y:u.top+u.height/2};i(t,[l,c],a,"linear"),i(t,[{x:s.left,y:s.top+s.height/2},{x:s.left-S.nodeSpacing/2,y:s.top+s.height/2},{x:s.left-S.nodeSpacing/2,y:l.y},l],a)}else i(t,[{x:s.left,y:s.top+s.height/2},{x:s.left-S.nodeSpacing/2,y:s.top+s.height/2},{x:s.left-S.nodeSpacing/2,y:u.top+u.height/2},{x:u.left+u.width,y:u.top+u.height/2}],a);break;case"BT":u.top-s.top>S.nodeSpacing?(l={x:u.left+u.width/2,y:s.top+s.height+S.nodeSpacing},c={x:u.left+u.width/2,y:u.top},i(t,[l,c],a,"linear"),i(t,[{x:s.left+s.width/2,y:s.top+s.height},{x:s.left+s.width/2,y:s.top+s.height+S.nodeSpacing/2},{x:u.left+u.width/2,y:l.y-S.nodeSpacing/2},l],a)):i(t,[{x:s.left+s.width/2,y:s.top+s.height},{x:s.left+s.width/2,y:s.top+S.nodeSpacing/2},{x:u.left+u.width/2,y:u.top-S.nodeSpacing/2},{x:u.left+u.width/2,y:u.top}],a)}}function u(t,e){return t.select(e).node().cloneNode(!0)}function l(t,e,n,r){var a,i=Object.keys(A).length;if((0,b.default)(e))do{if(a=A[e],T.logger.debug("in renderCommitHistory",a.id,a.seq),t.select("#node-"+e).size()>0)return;t.append(function(){return u(t,"#def-commit")}).attr("class","commit").attr("id",function(){return"node-"+a.id}).attr("transform",function(){switch(r){case"LR":return"translate("+(a.seq*S.nodeSpacing+S.leftMargin)+", "+d*S.branchOffset+")";case"BT":return"translate("+(d*S.branchOffset+S.leftMargin)+", "+(i-a.seq)*S.nodeSpacing+")"}}).attr("fill",S.nodeFillColor).attr("stroke",S.nodeStrokeColor).attr("stroke-width",S.nodeStrokeWidth);var o=(0,v.default)(n,["commit",a]);o&&(T.logger.debug("found branch ",o.name),t.select("#node-"+a.id+" p").append("xhtml:span").attr("class","branch-label").text(o.name+", ")),t.select("#node-"+a.id+" p").append("xhtml:span").attr("class","commit-id").text(a.id),""!==a.message&&"BT"===r&&t.select("#node-"+a.id+" p").append("xhtml:span").attr("class","commit-msg").text(", "+a.message),e=a.parent}while(e&&A[e]);(0,y.default)(e)&&(T.logger.debug("found merge commmit",e),l(t,e[0],n,r),d++,l(t,e[1],n,r),d--)}function c(t,e,n,r){for(r=r||0;e.seq>0&&!e.lineDrawn;)(0,b.default)(e.parent)?(s(t,e.id,e.parent,n,r),e.lineDrawn=!0,e=A[e.parent]):(0,y.default)(e.parent)&&(s(t,e.id,e.parent[0],n,r),s(t,e.id,e.parent[1],n,r+1),c(t,A[e.parent[1]],n,r+1),e.lineDrawn=!0,e=A[e.parent[0]])}Object.defineProperty(e,"__esModule",{value:!0}),e.draw=e.setConf=void 0;var d,f=n(173),h=r(f),_=n(241),p=r(_),m=n(2),y=r(m),g=n(261),v=r(g),M=n(323),b=r(M),k=n(197),L=r(k),w=n(172),x=r(w),D=n(6),Y=r(D),T=n(1),A={},S={nodeSpacing:150,nodeFillColor:"yellow",nodeStrokeWidth:2,nodeStrokeColor:"grey",lineStrokeWidth:4,branchOffset:50,lineColor:"grey",leftMargin:50,branchColors:["#442f74","#983351","#609732","#AA9A39"],nodeRadius:10,nodeLabel:{width:75,height:100,x:-25,y:0}},E={},j=e.setConf=function(t){E=t},C=e.draw=function(t,e,n){try{var r;r=x.default.parser,r.yy=L.default,T.logger.debug("in gitgraph renderer",t,e,n),r.parse(t+"\n"),S=(0,p.default)(S,E,L.default.getOptions()),T.logger.debug("effective options",S);var i=L.default.getDirection();A=L.default.getCommits();var o=L.default.getBranchesAsObjArray();"BT"===i&&(S.nodeLabel.x=o.length*S.branchOffset,S.nodeLabel.width="100%",S.nodeLabel.y=-2*S.nodeRadius);var s=Y.default.select("#"+e);a(s),d=1,(0,h.default)(o,function(t){l(s,t.commit.id,o,i),c(s,t.commit,i),d++}),s.attr("height",function(){return"BT"===i?Object.keys(A).length*S.nodeSpacing:(o.length+1)*S.branchOffset})}catch(t){T.logger.error("Error while rendering gitgraph"),T.logger.error(t.message)}};e.default={setConf:j,draw:C}},function(t,e,n){function r(t,e){return(s(t)?a:i)(t,o(e))}var a=n(225),i=n(174),o=n(240),s=n(2);t.exports=r},function(t,e){function n(t,e){for(var n=-1,r=null==t?0:t.length;++n1?n[a-1]:void 0,s=a>2?n[2]:void 0;for(o=t.length>3&&"function"==typeof o?(a--,o):void 0,s&&i(n[0],n[1],s)&&(o=a<3?void 0:o,a=1),e=Object(e);++r0){if(++e>=r)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var r=800,a=16,i=Date.now;t.exports=n},function(t,e,n){function r(t,e,n){if(!s(n))return!1;var r=typeof e;return!!("number"==r?i(n)&&o(e,n.length):"string"==r&&e in n)&&a(n[e],t)}var a=n(23),i=n(13),o=n(33),s=n(14);t.exports=r},function(t,e,n){function r(t){return o(t)?a(t,!0):i(t)}var a=n(175),i=n(259),o=n(13);t.exports=r},function(t,e,n){function r(t){if(!a(t))return o(t);var e=i(t),n=[];for(var r in t)("constructor"!=r||!e&&u.call(t,r))&&n.push(r);return n}var a=n(14),i=n(181),o=n(260),s=Object.prototype,u=s.hasOwnProperty;t.exports=r},function(t,e){function n(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}t.exports=n},function(t,e,n){var r=n(262),a=n(319),i=r(a);t.exports=i},function(t,e,n){function r(t){return function(e,n,r){var s=Object(e);if(!i(e)){var u=a(n,3);e=o(e),n=function(t){return u(s[t],t,s)}}var l=t(e,n,r);return l>-1?s[u?e[l]:l]:void 0}}var a=n(15),i=n(13),o=n(21);t.exports=r},function(t,e,n){function r(t){var e=i(t);return 1==e.length&&e[0][2]?o(e[0][0],e[0][1]):function(n){return n===t||a(n,t,e)}}var a=n(264),i=n(305),o=n(193);t.exports=r},function(t,e,n){function r(t,e,n,r){var u=n.length,l=u,c=!r;if(null==t)return!l;for(t=Object(t);u--;){var d=n[u];if(c&&d[2]?d[1]!==t[d[0]]:!(d[0]in t))return!1}for(;++u-1}var a=n(25);t.exports=r},function(t,e,n){function r(t,e){var n=this.__data__,r=a(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}var a=n(25);t.exports=r},function(t,e,n){function r(){this.__data__=new a,this.size=0}var a=n(24);t.exports=r},function(t,e){function n(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}t.exports=n},function(t,e){function n(t){return this.__data__.get(t)}t.exports=n},function(t,e){function n(t){return this.__data__.has(t)}t.exports=n},function(t,e,n){function r(t,e){var n=this.__data__;if(n instanceof a){var r=n.__data__;if(!i||r.length=u)return l;return l*("desc"==n[r]?-1:1)}}return t.index-e.index}var a=n(328);t.exports=r},function(t,e,n){function r(t,e){if(t!==e){var n=void 0!==t,r=null===t,i=t===t,o=a(t),s=void 0!==e,u=null===e,l=e===e,c=a(e);if(!u&&!c&&!o&&t>e||o&&s&&l&&!u&&!c||r&&s&&l||!n&&l||!i)return 1;if(!r&&!o&&!c&&t=c){var m=e?null:u(t);if(m)return l(m);h=!1,d=s,p=new a}else p=e?[]:_;t:for(;++r-1}var a=n(333);t.exports=r},function(t,e,n){function r(t,e,n){return e===e?o(t,e,n):a(t,i,n)}var a=n(196),i=n(334),o=n(335);t.exports=r},function(t,e){function n(t){return t!==t}t.exports=n},function(t,e){function n(t,e,n){for(var r=n-1,a=t.length;++re}t.exports=n},function(t,e,n){var r=n(343);t.exports="string"==typeof r?r:r.toString()},function(t,e,n){e=t.exports=n(29)(void 0),e.push([t.i,'.mermaid .label{color:#323d47}.node circle,.node ellipse,.node polygon,.node rect{fill:#bdd5ea;stroke:#81b1db;stroke-width:1px}.arrowheadPath{fill:#d3d3d3}.edgePath .path{stroke:#d3d3d3}.edgeLabel{background-color:#e8e8e8}.cluster rect{fill:#6d6d65!important;rx:4!important;stroke:hsla(0,0%,100%,.25)!important;stroke-width:1px!important}.cluster text{fill:#f9fffe}.actor{stroke:#81b1db;fill:#bdd5ea}text.actor{fill:#000;stroke:none}.actor-line{stroke:#d3d3d3}.messageLine0{marker-end:"url(#arrowhead)"}.messageLine0,.messageLine1{stroke-width:1.5;stroke-dasharray:"2 2";stroke:#d3d3d3}#arrowhead,#crosshead path{fill:#d3d3d3!important}#crosshead path{stroke:#d3d3d3!important}.messageText{fill:#d3d3d3;stroke:none}.labelBox{stroke:#81b1db;fill:#bdd5ea}.labelText{fill:#323d47;stroke:none}.loopText{fill:#d3d3d3;stroke:none}.loopLine{stroke-width:2;stroke-dasharray:"2 2";marker-end:"url(#arrowhead)";stroke:#81b1db}.note{stroke:hsla(0,0%,100%,.25);fill:#fff5ad}.noteText{fill:#000;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:14px}.section{stroke:none;opacity:.2}.section0{fill:hsla(0,0%,100%,.3)}.section2{fill:#eae8b9}.section1,.section3{fill:#fff;opacity:.2}.sectionTitle0,.sectionTitle1,.sectionTitle2,.sectionTitle3{fill:#f9fffe}.sectionTitle{text-anchor:start;font-size:11px;text-height:14px}.grid .tick{stroke:hsla(0,0%,100%,.3);opacity:.3;shape-rendering:crispEdges}.grid .tick text{fill:#d3d3d3;opacity:.5}.grid path{stroke-width:0}.today{fill:none;stroke:#db5757;stroke-width:2px}.task{stroke-width:1}.taskText{text-anchor:middle;font-size:11px}.taskTextOutsideRight{fill:#323d47;text-anchor:start;font-size:11px}.taskTextOutsideLeft{fill:#323d47;text-anchor:end;font-size:11px}.taskText0,.taskText1,.taskText2,.taskText3{fill:#323d47}.task0,.task1,.task2,.task3{fill:#bdd5ea;stroke:hsla(0,0%,100%,.5)}.taskTextOutside0,.taskTextOutside1,.taskTextOutside2,.taskTextOutside3{fill:#d3d3d3}.active0,.active1,.active2,.active3{fill:#81b1db;stroke:hsla(0,0%,100%,.5)}.activeText0,.activeText1,.activeText2,.activeText3{fill:#323d47!important}.done0,.done1,.done2,.done3{fill:#d3d3d3}.doneText0,.doneText1,.doneText2,.doneText3{fill:#323d47!important}.crit0,.crit1,.crit2,.crit3{stroke:#e83737;fill:#e83737;stroke-width:2}.activeCrit0,.activeCrit1,.activeCrit2,.activeCrit3{stroke:#e83737;fill:#81b1db;stroke-width:2}.doneCrit0,.doneCrit1,.doneCrit2,.doneCrit3{stroke:#e83737;fill:#d3d3d3;stroke-width:1;cursor:pointer;shape-rendering:crispEdges}.doneCritText0,.doneCritText1,.doneCritText2,.doneCritText3{fill:#d3d3d3!important}.activeCritText0,.activeCritText1,.activeCritText2,.activeCritText3{fill:#323d47!important}.titleText{text-anchor:middle;font-size:18px;fill:#d3d3d3}g.classGroup text{fill:purple;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:10px}g.classGroup rect{fill:#bdd5ea;stroke:purple}g.classGroup line{stroke:purple;stroke-width:1}svg .classLabel .box{stroke:none;stroke-width:0;fill:#bdd5ea;opacity:.5}svg .classLabel .label{fill:purple;font-size:10px}.relation{stroke:purple;stroke-width:1;fill:none}#compositionEnd,#compositionStart,.composition{fill:purple;stroke:purple;stroke-width:1}#aggregationEnd,#aggregationStart,.aggregation{fill:#bdd5ea;stroke:purple;stroke-width:1}#dependencyEnd,#dependencyStart,#extensionEnd,#extensionStart{fill:purple;stroke:purple;stroke-width:1}.branch-label,.commit-id,.commit-msg{fill:#d3d3d3;color:#d3d3d3}.node text{font-size:14px}.node text,div.mermaidTooltip{font-family:trebuchet ms,verdana,arial}div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-size:12px;background:#6d6d65;border:1px solid hsla(0,0%,100%,.25);border-radius:2px;pointer-events:none;z-index:100}',""])},function(t,e,n){var r=n(345);t.exports="string"==typeof r?r:r.toString()},function(t,e,n){e=t.exports=n(29)(void 0),e.push([t.i,'.mermaid .label{color:#333}.node circle,.node ellipse,.node polygon,.node rect{fill:#ececff;stroke:#ccf;stroke-width:1px}.arrowheadPath{fill:#333}.edgePath .path{stroke:#333}.edgeLabel{background-color:#e8e8e8}.cluster rect{fill:#ffffde!important;rx:4!important;stroke:#aa3!important;stroke-width:1px!important}.cluster text{fill:#333}.actor{stroke:#ccf;fill:#ececff}text.actor{fill:#000;stroke:none}.actor-line{stroke:grey}.messageLine0{marker-end:"url(#arrowhead)"}.messageLine0,.messageLine1{stroke-width:1.5;stroke-dasharray:"2 2";stroke:#333}#arrowhead{fill:#333}#crosshead path{fill:#333!important;stroke:#333!important}.messageText{fill:#333;stroke:none}.labelBox{stroke:#ccf;fill:#ececff}.labelText,.loopText{fill:#000;stroke:none}.loopLine{stroke-width:2;stroke-dasharray:"2 2";marker-end:"url(#arrowhead)";stroke:#ccf}.note{stroke:#aa3;fill:#fff5ad}.noteText{fill:#000;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:14px}.section{stroke:none;opacity:.2}.section0{fill:rgba(102,102,255,.49)}.section2{fill:#fff400}.section1,.section3{fill:#fff;opacity:.2}.sectionTitle0,.sectionTitle1,.sectionTitle2,.sectionTitle3{fill:#333}.sectionTitle{text-anchor:start;font-size:11px;text-height:14px}.grid .tick{stroke:#d3d3d3;opacity:.3;shape-rendering:crispEdges}.grid path{stroke-width:0}.today{fill:none;stroke:red;stroke-width:2px}.task{stroke-width:2}.taskText{text-anchor:middle;font-size:11px}.taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px}.taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}.taskText0,.taskText1,.taskText2,.taskText3{fill:#fff}.task0,.task1,.task2,.task3{fill:#8a90dd;stroke:#534fbc}.taskTextOutside0,.taskTextOutside1,.taskTextOutside2,.taskTextOutside3{fill:#000}.active0,.active1,.active2,.active3{fill:#bfc7ff;stroke:#534fbc}.activeText0,.activeText1,.activeText2,.activeText3{fill:#000!important}.done0,.done1,.done2,.done3{stroke:grey;fill:#d3d3d3;stroke-width:2}.doneText0,.doneText1,.doneText2,.doneText3{fill:#000!important}.crit0,.crit1,.crit2,.crit3{stroke:#f88;fill:red;stroke-width:2}.activeCrit0,.activeCrit1,.activeCrit2,.activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}.doneCrit0,.doneCrit1,.doneCrit2,.doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}.activeCritText0,.activeCritText1,.activeCritText2,.activeCritText3,.doneCritText0,.doneCritText1,.doneCritText2,.doneCritText3{fill:#000!important}.titleText{text-anchor:middle;font-size:18px;fill:#000}g.classGroup text{fill:#9370db;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:10px}g.classGroup rect{fill:#ececff;stroke:#9370db}g.classGroup line{stroke:#9370db;stroke-width:1}svg .classLabel .box{stroke:none;stroke-width:0;fill:#ececff;opacity:.5}svg .classLabel .label{fill:#9370db;font-size:10px}.relation{stroke:#9370db;stroke-width:1;fill:none}#compositionEnd,#compositionStart,.composition{fill:#9370db;stroke:#9370db;stroke-width:1}#aggregationEnd,#aggregationStart,.aggregation{fill:#ececff;stroke:#9370db;stroke-width:1}#dependencyEnd,#dependencyStart,#extensionEnd,#extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}.node text{font-size:14px}.node text,div.mermaidTooltip{font-family:trebuchet ms,verdana,arial}div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}',""])},function(t,e,n){var r=n(347);t.exports="string"==typeof r?r:r.toString()},function(t,e,n){e=t.exports=n(29)(void 0),e.push([t.i,'.mermaid .label{font-family:trebuchet ms,verdana,arial;color:#333}.node circle,.node ellipse,.node polygon,.node rect{fill:#cde498;stroke:#13540c;stroke-width:1px}.arrowheadPath{fill:green}.edgePath .path{stroke:green;stroke-width:1.5px}.edgeLabel{background-color:#e8e8e8}.cluster rect{fill:#cdffb2!important;rx:4!important;stroke:#6eaa49!important;stroke-width:1px!important}.cluster text{fill:#333}.actor{stroke:#13540c;fill:#cde498}text.actor{fill:#000;stroke:none}.actor-line{stroke:grey}.messageLine0{marker-end:"url(#arrowhead)"}.messageLine0,.messageLine1{stroke-width:1.5;stroke-dasharray:"2 2";stroke:#333}#arrowhead{fill:#333}#crosshead path{fill:#333!important;stroke:#333!important}.messageText{fill:#333;stroke:none}.labelBox{stroke:#326932;fill:#cde498}.labelText,.loopText{fill:#000;stroke:none}.loopLine{stroke-width:2;stroke-dasharray:"2 2";marker-end:"url(#arrowhead)";stroke:#326932}.note{stroke:#6eaa49;fill:#fff5ad}.noteText{fill:#000;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:14px}.section{stroke:none;opacity:.2}.section0,.section2{fill:#6eaa49}.section1,.section3{fill:#fff;opacity:.2}.sectionTitle0,.sectionTitle1,.sectionTitle2,.sectionTitle3{fill:#333}.sectionTitle{text-anchor:start;font-size:11px;text-height:14px}.grid .tick{stroke:#d3d3d3;opacity:.3;shape-rendering:crispEdges}.grid path{stroke-width:0}.today{fill:none;stroke:red;stroke-width:2px}.task{stroke-width:2}.taskText{text-anchor:middle;font-size:11px}.taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px}.taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}.taskText0,.taskText1,.taskText2,.taskText3{fill:#fff}.task0,.task1,.task2,.task3{fill:#487e3a;stroke:#13540c}.taskTextOutside0,.taskTextOutside1,.taskTextOutside2,.taskTextOutside3{fill:#000}.active0,.active1,.active2,.active3{fill:#cde498;stroke:#13540c}.activeText0,.activeText1,.activeText2,.activeText3{fill:#000!important}.done0,.done1,.done2,.done3{stroke:grey;fill:#d3d3d3;stroke-width:2}.doneText0,.doneText1,.doneText2,.doneText3{fill:#000!important}.crit0,.crit1,.crit2,.crit3{stroke:#f88;fill:red;stroke-width:2}.activeCrit0,.activeCrit1,.activeCrit2,.activeCrit3{stroke:#f88;fill:#cde498;stroke-width:2}.doneCrit0,.doneCrit1,.doneCrit2,.doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}.activeCritText0,.activeCritText1,.activeCritText2,.activeCritText3,.doneCritText0,.doneCritText1,.doneCritText2,.doneCritText3{fill:#000!important}.titleText{text-anchor:middle;font-size:18px;fill:#000}g.classGroup text{fill:#13540c;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:10px}g.classGroup rect{fill:#cde498;stroke:#13540c}g.classGroup line{stroke:#13540c;stroke-width:1}svg .classLabel .box{stroke:none;stroke-width:0;fill:#cde498;opacity:.5}svg .classLabel .label{fill:#13540c;font-size:10px}.relation{stroke:#13540c;stroke-width:1;fill:none}#compositionEnd,#compositionStart,.composition{fill:#13540c;stroke:#13540c;stroke-width:1}#aggregationEnd,#aggregationStart,.aggregation{fill:#cde498;stroke:#13540c;stroke-width:1}#dependencyEnd,#dependencyStart,#extensionEnd,#extensionStart{fill:#13540c;stroke:#13540c;stroke-width:1}.node text{font-size:14px}.node text,div.mermaidTooltip{font-family:trebuchet ms,verdana,arial}div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-size:12px;background:#cdffb2;border:1px solid #6eaa49;border-radius:2px;pointer-events:none;z-index:100}',""])},function(t,e,n){var r=n(349);t.exports="string"==typeof r?r:r.toString()},function(t,e,n){e=t.exports=n(29)(void 0),e.push([t.i,'.mermaid .label{color:#333}.node circle,.node ellipse,.node polygon,.node rect{fill:#eee;stroke:#999;stroke-width:1px}.edgePath .path{stroke:#666;stroke-width:1.5px}.edgeLabel{background-color:#fff}.cluster rect{fill:#eaf2fb!important;rx:4!important;stroke:#26a!important;stroke-width:1px!important}.cluster text{fill:#333}.actor{stroke:#999;fill:#eee}text.actor{fill:#333;stroke:none}.actor-line{stroke:#666}.messageLine0{marker-end:"url(#arrowhead)"}.messageLine0,.messageLine1{stroke-width:1.5;stroke-dasharray:"2 2";stroke:#333}#arrowhead{fill:#333}#crosshead path{fill:#333!important;stroke:#333!important}.messageText{fill:#333;stroke:none}.labelBox{stroke:#999;fill:#eee}.labelText,.loopText{fill:#fff;stroke:none}.loopLine{stroke-width:2;stroke-dasharray:"2 2";marker-end:"url(#arrowhead)";stroke:#999}.note{stroke:#770;fill:#ffa}.noteText{fill:#000;stroke:none;font-family:Arial,Helvetica,sans-serif;font-size:14px}.section{stroke:none;opacity:.2}.section0,.section2{fill:#7fb2e6}.section1,.section3{fill:#fff;opacity:.2}.sectionTitle0,.sectionTitle1,.sectionTitle2,.sectionTitle3{fill:#333}.sectionTitle{text-anchor:start;font-size:11px;text-height:14px}.grid .tick{stroke:#e5e5e5;opacity:.3;shape-rendering:crispEdges}.grid path{stroke-width:0}.today{fill:none;stroke:#d42;stroke-width:2px}.task{stroke-width:2}.taskText{text-anchor:middle;font-size:11px}.taskTextOutsideRight{fill:#333;text-anchor:start;font-size:11px}.taskTextOutsideLeft{fill:#333;text-anchor:end;font-size:11px}.taskText0,.taskText1,.taskText2,.taskText3{fill:#fff}.task0,.task1,.task2,.task3{fill:#26a;stroke:#194c7f}.taskTextOutside0,.taskTextOutside1,.taskTextOutside2,.taskTextOutside3{fill:#333}.active0,.active1,.active2,.active3{fill:#eee;stroke:#194c7f}.activeText0,.activeText1,.activeText2,.activeText3{fill:#333!important}.done0,.done1,.done2,.done3{stroke:#666;fill:#bbb;stroke-width:2}.doneText0,.doneText1,.doneText2,.doneText3{fill:#333!important}.crit0,.crit1,.crit2,.crit3{stroke:#b1361b;fill:#d42;stroke-width:2}.activeCrit0,.activeCrit1,.activeCrit2,.activeCrit3{stroke:#b1361b;fill:#eee;stroke-width:2}.doneCrit0,.doneCrit1,.doneCrit2,.doneCrit3{stroke:#b1361b;fill:#bbb;stroke-width:2;cursor:pointer}.activeCritText0,.activeCritText1,.activeCritText2,.activeCritText3,.doneCritText0,.doneCritText1,.doneCritText2,.doneCritText3{fill:#333!important}.titleText{text-anchor:middle;font-size:18px;fill:#333}g.classGroup text{fill:#999;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:10px}g.classGroup rect{fill:#eee;stroke:#999}g.classGroup line{stroke:#999;stroke-width:1}svg .classLabel .box{stroke:none;stroke-width:0;fill:#eee;opacity:.5}svg .classLabel .label{fill:#999;font-size:10px}.relation{stroke:#999;stroke-width:1;fill:none}#compositionEnd,#compositionStart,.composition{fill:#999;stroke:#999;stroke-width:1}#aggregationEnd,#aggregationStart,.aggregation{fill:#eee;stroke:#999;stroke-width:1}#dependencyEnd,#dependencyStart,#extensionEnd,#extensionStart{fill:#999;stroke:#999;stroke-width:1}.node text{font-size:14px}.node text,div.mermaidTooltip{font-family:Arial,Helvetica,sans-serif}div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-size:12px;background:#eaf2fb;border:1px solid #26a;border-radius:2px;pointer-events:none;z-index:100}',""])}]).default}); diff --git a/web/src/index.html b/web/src/index.html index b2b1c25..6b36843 100755 --- a/web/src/index.html +++ b/web/src/index.html @@ -56,7 +56,6 @@ - @@ -66,24 +65,12 @@ - - - - - - - - - - - - - + @@ -100,6 +87,7 @@ + @@ -109,7 +97,7 @@ {{ alert_text }}
    - +
    From 2adcd6eefb5279bf18b867f7165b10c5a4bf3826 Mon Sep 17 00:00:00 2001 From: Paul Aschmann Date: Sun, 25 Aug 2019 08:29:11 -0400 Subject: [PATCH 03/12] - Add server/data/models directory - Add DB file to .gitignore --- .gitignore | 2 +- server/data/models/.gitignore | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 server/data/models/.gitignore diff --git a/.gitignore b/.gitignore index 3a575e2..43ce0fb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ .DS_Store npm-debug.log node_modules -server/data/models +server/data/db.sqlite3 # editors .idea diff --git a/server/data/models/.gitignore b/server/data/models/.gitignore new file mode 100644 index 0000000..e7a210e --- /dev/null +++ b/server/data/models/.gitignore @@ -0,0 +1,3 @@ +* +*/ +!.gitignore \ No newline at end of file From f2ed30e2977effe6c4996c8e1286ed4c03e3b65c Mon Sep 17 00:00:00 2001 From: Paul Aschmann Date: Sun, 25 Aug 2019 08:31:22 -0400 Subject: [PATCH 04/12] - DB --- server/data/db.sqlite3 | Bin 86016 -> 86016 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/server/data/db.sqlite3 b/server/data/db.sqlite3 index a615022f403a125fe1bf97f5d81fc1888d219536..b853ab73e975bef2debf5ec84c746e0f131a6e9a 100644 GIT binary patch delta 89 zcmV-f0H*(dpap=S1&|v7$B`UE0mrdmcP{}vgV-;(*e?Mr5E2IoE&vZI4pa?53@i&6 v3Iqu*vk?#&2?K#sJeR=&0m%(DATTpJGBP?bHi8j5w=YZq5COLrO9ANwV=)&H delta 68 zcmV-K0K5Nypap=S1&|v7#*rLD0miXlcP{}ugV-;(*e?Mr5D*3m1ON{z4pa?53@i&6 a3Iwwe5by~Df)P8nFH8Xt0k;=R0qF$2d=g3k From d55d9b7af35ca2eeffa79868a290008391843054 Mon Sep 17 00:00:00 2001 From: Paul Aschmann Date: Sun, 25 Aug 2019 08:36:57 -0400 Subject: [PATCH 05/12] - Remove SQLite DB --- server/data/db.sqlite3 | Bin 86016 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 server/data/db.sqlite3 diff --git a/server/data/db.sqlite3 b/server/data/db.sqlite3 deleted file mode 100644 index b853ab73e975bef2debf5ec84c746e0f131a6e9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86016 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 From 3e68edce5bb4dee55e559f9e3172268b6bdf6687 Mon Sep 17 00:00:00 2001 From: Paul Aschmann Date: Sun, 25 Aug 2019 08:38:19 -0400 Subject: [PATCH 06/12] - Add .gitignore file to server/data folder to maintain structure --- server/data/.gitignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 server/data/.gitignore diff --git a/server/data/.gitignore b/server/data/.gitignore new file mode 100644 index 0000000..e7a210e --- /dev/null +++ b/server/data/.gitignore @@ -0,0 +1,3 @@ +* +*/ +!.gitignore \ No newline at end of file From fc2ee74a9dd3a0a091923aa519a97777c153a83e Mon Sep 17 00:00:00 2001 From: Paul Aschmann Date: Mon, 26 Aug 2019 11:30:13 -0400 Subject: [PATCH 07/12] no message --- package-lock.json | 86 ----------- package.json | 6 +- server/db/entities.js | 6 +- server/db/synonyms.js | 5 +- server/routes/rasa_router.js | 22 +-- web/src/app/app.js | 2 +- web/src/app/components/agents/add_agent.html | 5 +- web/src/app/components/agents/agents.html | 38 +---- web/src/app/components/agents/agents.js | 7 - web/src/app/components/agents/edit_agent.html | 36 +++++ web/src/app/components/agents/edit_agent.js | 8 +- .../app/components/entities/add_entity.html | 75 ++++----- .../app/components/entities/edit_entity.html | 67 ++++---- web/src/app/components/entities/entities.html | 20 --- web/src/app/components/entities/entities.js | 19 --- .../app/components/intents/add_intent.html | 2 +- web/src/app/components/intents/add_intent.js | 2 +- .../app/components/intents/edit_intent.html | 13 +- web/src/app/components/regex/add_regex.html | 2 +- .../app/components/synonyms/add_synonym.html | 2 +- web/src/app/components/training/training.html | 19 ++- web/src/app/components/training/training.js | 143 +++++++++++++++++- web/src/app/utils.js | 94 ------------ web/src/index.html | 8 +- 24 files changed, 311 insertions(+), 376 deletions(-) delete mode 100755 web/src/app/components/entities/entities.html delete mode 100755 web/src/app/components/entities/entities.js diff --git a/package-lock.json b/package-lock.json index ab265fe..9a29c8e 100755 --- a/package-lock.json +++ b/package-lock.json @@ -127,14 +127,6 @@ } } }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -407,19 +399,6 @@ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, - "codemirror": { - "version": "5.35.0", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.35.0.tgz", - "integrity": "sha512-8HQICjZlDfe1ai7bvU6m2uHxuZuFgsUCdDRU9OHVB+2RTRd+FftN1ezVCqbquG0Fyq+wETqyadKhUX46DswSUQ==" - }, - "codemirror-spell-checker": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/codemirror-spell-checker/-/codemirror-spell-checker-1.1.2.tgz", - "integrity": "sha1-HGYPkIlIPMtRE7m6nKGcP0mTNx4=", - "requires": { - "typo-js": "*" - } - }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -698,11 +677,6 @@ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" - }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -1341,15 +1315,6 @@ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.1.1.tgz", "integrity": "sha1-NHwcIcfgBBFeCk2jLOzgQfrTyKM=" }, - "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", @@ -1514,11 +1479,6 @@ "object-visit": "^1.0.0" } }, - "marked": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.17.tgz", - "integrity": "sha512-+AKbNsjZl6jFfLPwHhWmGTqE009wTKn3RTmn9K8oUKHrX/abPJjtcRtXpYB/FFrwPJRUA86LX/de3T0knkPCmQ==" - }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -1644,11 +1604,6 @@ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" }, - "nanoid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.0.3.tgz", - "integrity": "sha512-NbaoqdhIYmY6FXDRB4eYtDVC9Z9eCbn8TyaiC16LNKtpPv/aqa0tOPD8y6gNE4yUNnaZ7LLhYtXOev/6+cBtfw==" - }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -1702,14 +1657,6 @@ "resolved": "https://registry.npmjs.org/ng-file-upload/-/ng-file-upload-12.2.13.tgz", "integrity": "sha1-AYAPOHLlJvlTEPhHfpnk8S0NjRQ=" }, - "ng-jsyaml": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/ng-jsyaml/-/ng-jsyaml-0.0.2.tgz", - "integrity": "sha512-6ZYI+imKGLQYHW8EFoHw3O6J+wg2Tnbt5apCQRSEyonV5qAPId2b3zd27ZHEQqrqx/20PmrqYCt4otRuMg+xow==", - "requires": { - "js-yaml": "3.10.0" - } - }, "ng-tags-input": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ng-tags-input/-/ng-tags-input-3.2.0.tgz", @@ -2159,14 +2106,6 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, - "shortid": { - "version": "2.2.14", - "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.14.tgz", - "integrity": "sha512-4UnZgr9gDdA1kaKj/38IiudfC3KHKhDc1zi/HSxd9FQDR0VLwH3/y79tZJLsVYPsJgIjeHjqIWaWVRJUj9qZOQ==", - "requires": { - "nanoid": "^2.0.0" - } - }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -2185,16 +2124,6 @@ "is-arrayish": "^0.3.1" } }, - "simplemde": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/simplemde/-/simplemde-1.11.2.tgz", - "integrity": "sha1-ojo12XjSxA7wfewAjJLwcNjggOM=", - "requires": { - "codemirror": "*", - "codemirror-spell-checker": "*", - "marked": "*" - } - }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -2322,11 +2251,6 @@ "extend-shallow": "^3.0.0" } }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, "sqlite3": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.1.0.tgz", @@ -2513,11 +2437,6 @@ "mime-types": "~2.1.18" } }, - "typo-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typo-js/-/typo-js-1.0.3.tgz", - "integrity": "sha1-VNjrx5SfGngQkItgAsaEFSbJnVo=" - }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -2690,11 +2609,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "xdate": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/xdate/-/xdate-0.8.2.tgz", - "integrity": "sha1-17AzwASF0CaVuvAET06s2j/JYaM=" - }, "yallist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", diff --git a/package.json b/package.json index 46c4700..a6e6422 100755 --- a/package.json +++ b/package.json @@ -21,17 +21,13 @@ "jsonformatter": "^0.6.0", "jsonwebtoken": "^8.4.0", "ng-file-upload": "^12.2.13", - "ng-jsyaml": "0.0.2", "ng-tags-input": "^3.2.0", "ngstorage": "^0.3.11", "popper.js": "^1.15.0", "request": "^2.88.0", - "shortid": "^2.2.14", "simple-line-icons": "^2.4.1", - "simplemde": "^1.11.2", "sqlite3": "^4.1.0", - "winston": "^3.2.1", - "xdate": "latest" + "winston": "^3.2.1" }, "config": { "rasa_endpoint": "http://10.211.55.8:5005", diff --git a/server/db/entities.js b/server/db/entities.js index 968b8be..6dadad6 100755 --- a/server/db/entities.js +++ b/server/db/entities.js @@ -59,7 +59,8 @@ function updateEntity(req, res, next) { } function removeEntity(req, res, next) { - db.run('delete from entities where agent_id = ?', req.params.entity_id, function(err) { + logger.winston.info('entities.updateEntity'); + db.run('delete from entities where entity_id = ?', req.params.entity_id, function(err) { if (err) { logger.winston.info("Error removing the record"); } else { @@ -74,4 +75,5 @@ module.exports = { getSingleEntity, createEntity, updateEntity, - removeEntity}; + removeEntity +}; diff --git a/server/db/synonyms.js b/server/db/synonyms.js index b52f614..76ce62a 100755 --- a/server/db/synonyms.js +++ b/server/db/synonyms.js @@ -43,11 +43,12 @@ function createAgentSynonym(req, res, next) { function removeSynonym(req, res, next) { logger.winston.info('synonym.removeExpression'); - db.run('delete from synonyms where agent_id = ?', req.params.synonym_id, function(err) { + db.run("delete from synonym_variants where synonym_id = ?", req.params.synonym_id); + db.run('delete from synonyms where synonym_id = ?', req.params.synonym_id, function(err) { if (err) { logger.winston.info("Error removing the record"); } else { - res.status(200).json({ status: 'success', message: 'Removed', synonym_id: data }); + res.status(200).json({ status: 'success', message: 'Removed' }); } }); } diff --git a/server/routes/rasa_router.js b/server/routes/rasa_router.js index 5564754..c7b6157 100755 --- a/server/routes/rasa_router.js +++ b/server/routes/rasa_router.js @@ -65,11 +65,14 @@ function trainRasaNlu(req, res, next) { if (response.statusCode != 200) { logger.winston.info("Error occured while training. Rasa Server Response Code : " + response.statusCode); sendOutput(response.statusCode, res, JSON.stringify({ errorBody: body })); + return; } else { model.server_file_name = response.headers["filename"]; model.response = response; logger.winston.info("Training Completed, Rasa Server Response Code : " + response.statusCode); + sendOutput(200, res, ""); + logs.logRequest(req, 'train', { server_response: response.headers["filename"], training_data: JSON.stringify(req.body) @@ -82,14 +85,15 @@ function trainRasaNlu(req, res, next) { }).pipe(fs.createWriteStream(model.file_path + model.file_name)); stream.on('finish', function () { - db.run('insert into models(model_name, comment, agent_id, local_path, server_path, server_response)' + 'values (?,?,?,?,?,?)', [model.file_name, req.query.comment, req.query.agent_id, model.file_path + model.file_name, model.server_file_name, "response"], function (err) { - if (err) { - logger.winston.info("Error inserting a new record: " + err); - } else { - logger.winston.info("Model saved to models table"); - } - }); - sendOutput(200, res, ""); + if (model.server_file_name) { + db.run('insert into models(model_name, comment, agent_id, local_path, server_path, server_response)' + 'values (?,?,?,?,?,?)', [model.file_name, req.query.comment, req.query.agent_id, model.file_path + model.file_name, model.server_file_name, "response"], function (err) { + if (err) { + logger.winston.info("Error inserting a new record: " + err); + } else { + logger.winston.info("Model saved to models table"); + } + }); + } }); } catch (err) { logger.winston.info("Exception When sending Training Data to Rasa:" + err); @@ -139,7 +143,7 @@ function parseRequest(req, res, next) { request({ method: 'POST', uri: global.rasa_endpoint + '/model/parse', body: JSON.stringify(req.body) }, function (error, response, body) { try { - logger.winston.info('rasa_response:+++ ' + body); + logger.winston.info('Rasa Response: ' + body); logs.logRequest(req, 'parse', { server_response: body, diff --git a/web/src/app/app.js b/web/src/app/app.js index 6f095a1..f855109 100755 --- a/web/src/app/app.js +++ b/web/src/app/app.js @@ -1,5 +1,5 @@ var app = angular - .module("app", ["ngCookies", "ng-jsyaml", "ngSanitize", "ngFileUpload", "angularUtils.directives.dirPagination", "ngRoute", "chart.js", "ngResource", "ngTagsInput", "jsonFormatter", "angularModalService", "ngStorage"]) + .module("app", ["ngCookies", "ngSanitize", "ngFileUpload", "angularUtils.directives.dirPagination", "ngRoute", "chart.js", "ngResource", "ngTagsInput", "jsonFormatter", "angularModalService", "ngStorage"]) .run(function ($rootScope, $http, $sessionStorage, appConfig) { // keep user logged in after page refresh diff --git a/web/src/app/components/agents/add_agent.html b/web/src/app/components/agents/add_agent.html index 1d9ae17..d6c385b 100755 --- a/web/src/app/components/agents/add_agent.html +++ b/web/src/app/components/agents/add_agent.html @@ -18,12 +18,11 @@
    + class="form-control" id="name" placeholder="Enter the agent name" required>
    - +
    diff --git a/web/src/app/components/agents/agents.html b/web/src/app/components/agents/agents.html index 041dd26..5b9d93a 100755 --- a/web/src/app/components/agents/agents.html +++ b/web/src/app/components/agents/agents.html @@ -13,45 +13,15 @@
    -
    -
    +
    -
    -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - -
    -
    -
    +
    +
    -


    diff --git a/web/src/app/components/agents/agents.js b/web/src/app/components/agents/agents.js index 4b2175b..8f35f5d 100755 --- a/web/src/app/components/agents/agents.js +++ b/web/src/app/components/agents/agents.js @@ -6,11 +6,4 @@ function AgentsController($scope, $rootScope, Agent,$http,appConfig,$window) { Agent.query(function(data) { $scope.agentList = data; }); - - $scope.editAgentInfo = function(agent) { - Agent.update({ agent_id: agent.agent_id }, agent).$promise.then(function() { - $('#' + agent.agent_id).collapse('hide'); - $rootScope.$broadcast('setAlertText', "Agent information updated Sucessfully!!"); - }); - }; } diff --git a/web/src/app/components/agents/edit_agent.html b/web/src/app/components/agents/edit_agent.html index 392fa18..529867d 100755 --- a/web/src/app/components/agents/edit_agent.html +++ b/web/src/app/components/agents/edit_agent.html @@ -13,6 +13,42 @@
    +
    +
    +
    + Settings + + + +
    +
    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +
    +
    +
    +
    diff --git a/web/src/app/components/agents/edit_agent.js b/web/src/app/components/agents/edit_agent.js index 8773c50..ad10a2b 100755 --- a/web/src/app/components/agents/edit_agent.js +++ b/web/src/app/components/agents/edit_agent.js @@ -1,6 +1,6 @@ angular.module('app').controller('EditAgentController', EditAgentController); -function EditAgentController($scope, Agent, Intents, AgentEntities, Actions, AgentActions, AgentSynonyms, AgentRegex) { +function EditAgentController($scope, Agent, Intents, AgentEntities, Actions, AgentActions, AgentSynonyms, AgentRegex, $rootScope) { Agent.get({ agent_id: $scope.$routeParams.agent_id }, function(data) { $scope.agent = data; /* Core feature @@ -25,6 +25,12 @@ function EditAgentController($scope, Agent, Intents, AgentEntities, Actions, Age $scope.entitiesList = data; }); + $scope.editAgentInfo = function(agent) { + Agent.update({ agent_id: agent.agent_id }, agent).$promise.then(function() { + $rootScope.$broadcast('setAlertText', "Agent information updated Sucessfully!!"); + }); + }; + /* Core feature AgentActions.query({ agent_id: $scope.$routeParams.agent_id }, function(data) { $scope.actionsList = data; diff --git a/web/src/app/components/entities/add_entity.html b/web/src/app/components/entities/add_entity.html index beb1ff4..110c3a8 100755 --- a/web/src/app/components/entities/add_entity.html +++ b/web/src/app/components/entities/add_entity.html @@ -4,43 +4,48 @@
    -
    -
    -
    -
    -
    -
    - New Entity +
    +
    +
    + +
    +
    + Entity +
    +
    +
    +
    +
    + + +
    +
    + + + + + + + + + + + +
    -
    -
    -
    -
    - - -
    -
    - - - - - - - - - - - -
    -
    -
    -
    -
    - -
    + +
    +
    -
    +
    \ No newline at end of file diff --git a/web/src/app/components/entities/edit_entity.html b/web/src/app/components/entities/edit_entity.html index 07ca4d5..19befba 100755 --- a/web/src/app/components/entities/edit_entity.html +++ b/web/src/app/components/entities/edit_entity.html @@ -10,33 +10,44 @@
    +
    -
    -
    - -
    - - -
    -
    - - - - - - - - - - - +
    +
    +
    + +
    +
    + Entity +
    +
    +
    +
    +
    + + +
    +
    + + + + + + + + + + + +
    +
    +
    +
    + +
    +
    - - - - - -
    -
    \ No newline at end of file +
    +
    \ No newline at end of file diff --git a/web/src/app/components/entities/entities.html b/web/src/app/components/entities/entities.html deleted file mode 100755 index c8c2d48..0000000 --- a/web/src/app/components/entities/entities.html +++ /dev/null @@ -1,20 +0,0 @@ - -
    -
    - -
    -
    diff --git a/web/src/app/components/entities/entities.js b/web/src/app/components/entities/entities.js deleted file mode 100755 index aa8b1fc..0000000 --- a/web/src/app/components/entities/entities.js +++ /dev/null @@ -1,19 +0,0 @@ -angular -.module('app') -.controller('EntitiesController', EntitiesController); - -function EntitiesController($scope, Entities, Entity) { - loadEntities(); - - function loadEntities() { - Entities.query(function(data) { - $scope.entitiesList = data; - }); - } - - $scope.deleteEntity = function(entity_id) { - Entity.remove({entity_id: entity_id}).$promise.then(function(resp) { - loadEntities(); - }); - } -} diff --git a/web/src/app/components/intents/add_intent.html b/web/src/app/components/intents/add_intent.html index 36db268..a9e42ec 100755 --- a/web/src/app/components/intents/add_intent.html +++ b/web/src/app/components/intents/add_intent.html @@ -10,7 +10,7 @@
    - New Intent + Intent
    diff --git a/web/src/app/components/intents/add_intent.js b/web/src/app/components/intents/add_intent.js index 5e85730..c587ee5 100755 --- a/web/src/app/components/intents/add_intent.js +++ b/web/src/app/components/intents/add_intent.js @@ -11,7 +11,7 @@ function AddIntentController($scope, Agent, Intent) { this.formData.agent_id = $scope.$routeParams.agent_id; Intent.save(this.formData).$promise.then(function(resp) { $scope.formData.intent_name = ''; - $scope.go('/agent/' + resp.agent_id) + $scope.go('/agent/' + $scope.agent.agent_id) }); }; } diff --git a/web/src/app/components/intents/edit_intent.html b/web/src/app/components/intents/edit_intent.html index 412d828..0cfa192 100755 --- a/web/src/app/components/intents/edit_intent.html +++ b/web/src/app/components/intents/edit_intent.html @@ -26,20 +26,17 @@
    -
    +
    -
    -
    - -
    -
    +
    @@ -55,7 +52,7 @@
    - + diff --git a/web/src/app/components/regex/add_regex.html b/web/src/app/components/regex/add_regex.html index 2a2c568..d4e09d8 100755 --- a/web/src/app/components/regex/add_regex.html +++ b/web/src/app/components/regex/add_regex.html @@ -11,7 +11,7 @@
    -
    New Regex
    +
    Regex
    diff --git a/web/src/app/components/synonyms/add_synonym.html b/web/src/app/components/synonyms/add_synonym.html index f931c97..5d57e70 100755 --- a/web/src/app/components/synonyms/add_synonym.html +++ b/web/src/app/components/synonyms/add_synonym.html @@ -15,7 +15,7 @@
    - New Synonym + Synonym
    diff --git a/web/src/app/components/training/training.html b/web/src/app/components/training/training.html index 0f386c6..3608d4f 100755 --- a/web/src/app/components/training/training.html +++ b/web/src/app/components/training/training.html @@ -12,9 +12,6 @@ Training is currently running.
    -
    - Agent -
    @@ -38,15 +35,25 @@
    - +
    - -
    + +
    +
    + +
    + +
    +
    - + +
    +
    +
    +
    \ No newline at end of file diff --git a/web/src/app/components/models/add_model.js b/web/src/app/components/models/add_model.js new file mode 100755 index 0000000..a305112 --- /dev/null +++ b/web/src/app/components/models/add_model.js @@ -0,0 +1,12 @@ +angular +.module('app') +.controller('AddModelController', AddModelController) + +function AddModelController($scope, Model) { + $scope.addModel = function(params) { + this.formData.agent_id = $scope.$routeParams.agent_id; + Model.save(this.formData).$promise.then(function() { + $scope.go('/models/' + $scope.$routeParams.agent_id) + }); + }; +} diff --git a/web/src/app/components/models/models.html b/web/src/app/components/models/models.html index 3e3c134..aa41d97 100755 --- a/web/src/app/components/models/models.html +++ b/web/src/app/components/models/models.html @@ -8,9 +8,9 @@ - +
    Agents @@ -19,8 +19,7 @@
    - @@ -52,14 +51,18 @@ -
    +
    Models + + +
    - +
    @@ -69,7 +72,8 @@ - + @@ -87,10 +91,9 @@
    Create Date/Time
    {{ model.timestamp }} File: {{ model.model_name }}
    Local Path: {{ model.local_path }}
    Rasa Server Path: {{ selectedAgent.output_folder + "/" + model.server_path }}
    -
    -
    diff --git a/web/src/app/components/models/models.js b/web/src/app/components/models/models.js index e974962..28c6b05 100755 --- a/web/src/app/components/models/models.js +++ b/web/src/app/components/models/models.js @@ -1,13 +1,21 @@ angular.module('app').controller('ModelController', ModelController); function ModelController($scope, $rootScope, appConfig, Model, Agent, Rasa_Status, $http) { - $scope.message = ''; - $scope.loading_model = 0; - + $scope.message = ""; + $scope.loading_model = ""; + $scope.agentList = {}; + $scope.agent = {}; + checkRasaStatus(); Agent.query(function (data) { $scope.agentList = data; + + if ($scope.$routeParams.agent_id) { + $scope.selectedAgent = $scope.objectFindByKey($scope.agentList, 'agent_id', Number($scope.$routeParams.agent_id)); + $scope.agent.agent_id = $scope.selectedAgent.agent_id; + loadAgentModels(Number($scope.$routeParams.agent_id)); + } }); function checkRasaStatus() { @@ -17,8 +25,10 @@ function ModelController($scope, $rootScope, appConfig, Model, Agent, Rasa_Statu } $scope.getData = function (agent_id) { - $scope.selectedAgent = window.objectFindByKey($scope.agentList, 'agent_id', agent_id); - loadAgentModels(agent_id); + if (agent_id) { + $scope.selectedAgent = $scope.objectFindByKey($scope.agentList, 'agent_id', agent_id); + loadAgentModels(agent_id); + } } function loadAgentModels(agent_id) { @@ -28,39 +38,34 @@ function ModelController($scope, $rootScope, appConfig, Model, Agent, Rasa_Statu checkRasaStatus(); } - $scope.saveManuallyCreatedModel = function () { - //TODO - this should accept details about a model from user about a model which was already created, or they created directly on the server - //Name, Server Path, Comment - } - $scope.deleteModel = function (model_id) { - let model = objectFindByKey($scope.modelList, 'model_id', model_id); + let model = $scope.objectFindByKey($scope.modelList, 'model_id', model_id); Model.remove({ model_id: model_id, local_path: model.local_path }).$promise.then(function () { loadAgentModels($scope.selectedAgent.agent_id); }); } $scope.loadRasaModel = function (server_model) { - let agentToTrain = objectFindByKey($scope.agentList, 'agent_id', $scope.agent.agent_id); - $scope.loading_model = 1; + let agentToTrain = $scope.objectFindByKey($scope.agentList, 'agent_id', $scope.agent.agent_id); + $scope.loading_model = "Loading model: " + server_model; /* TODO: Replace with factory methods */ $http.put(appConfig.api_endpoint_v2 + "/rasa/model", { "model_file": agentToTrain.output_folder + "/" + server_model }).then( function (response) { $scope.message = "Loaded model " + server_model; loadAgentModels(agentToTrain.agent_id); - $scope.loading_model = 0; + $scope.loading_model = ""; }, function (err) { $scope.message = "Loading for " + agentToTrain.agent_name + " failed"; $scope.generateError = JSON.stringify(err); $rootScope.trainings_under_this_process = 0; - $scope.loading_model = 0; + $scope.loading_model = ""; } ); } $scope.unloadRasaModel = function (server_model) { - let agentToTrain = objectFindByKey($scope.agentList, 'agent_id', $scope.agent.agent_id); + let agentToTrain = $scope.objectFindByKey($scope.agentList, 'agent_id', $scope.agent.agent_id); /* TODO: Replace with factory methods */ $http.delete(appConfig.api_endpoint_v2 + "/rasa/model").then( function (response) { diff --git a/web/src/app/components/training/training.html b/web/src/app/components/training/training.html index fb1bedb..4e37bd6 100755 --- a/web/src/app/components/training/training.html +++ b/web/src/app/components/training/training.html @@ -8,6 +8,9 @@ + diff --git a/web/src/app/components/training/training.js b/web/src/app/components/training/training.js index 3571f07..9ae6b85 100755 --- a/web/src/app/components/training/training.js +++ b/web/src/app/components/training/training.js @@ -26,7 +26,7 @@ function TrainingController($scope, $rootScope, $interval, $http, Rasa_Status, A } $scope.trainUsingRawData = function () { - let agentToTrain = objectFindByKey($scope.agentList, 'agent_id', $scope.agent.agent_id); + let agentToTrain = $scope.objectFindByKey($scope.agentList, 'agent_id', $scope.agent.agent_id); $rootScope.trainings_under_this_process = 1; $http.post(appConfig.api_endpoint_v2 + "/rasa/model/train?agent_name=" + agentToTrain.agent_name + "&agent_id=" + agentToTrain.agent_id + "&comment=" + $scope.comment, $scope.raw_data_stringified).then( function (response) { @@ -34,7 +34,7 @@ function TrainingController($scope, $rootScope, $interval, $http, Rasa_Status, A $rootScope.trainings_under_this_process = 0; }, function (err) { - $scope.message = "Training for " + agentToTrain.agent_name + " failed"; + //$scope.message = "Training for " + agentToTrain.agent_name + " failed"; $scope.generateError = JSON.stringify(err); $rootScope.trainings_under_this_process = 0; } @@ -52,7 +52,7 @@ function TrainingController($scope, $rootScope, $interval, $http, Rasa_Status, A }; $scope.getData = function (agent_id) { - $scope.selectedAgent = window.objectFindByKey($scope.agentList, 'agent_id', agent_id); + $scope.selectedAgent = $scope.objectFindByKey($scope.agentList, 'agent_id', agent_id); reset(); @@ -65,6 +65,7 @@ function TrainingController($scope, $rootScope, $interval, $http, Rasa_Status, A AgentRegex.query({ agent_id: agent_id }, function (regex) { AgentSynonyms.query({ agent_id: agent_id }, function (synonyms) { + synonyms = $scope.cleanResponse(synonyms); let intentIds = intents .map(function (item) { return item['intent_id']; @@ -72,6 +73,7 @@ function TrainingController($scope, $rootScope, $interval, $http, Rasa_Status, A .toString(); if (intentIds.length > 0) { IntentExpressions.query({ intent_ids: intentIds }, function (expressions) { + expressions = $scope.cleanResponse(expressions); let expressionIds = expressions .map(function (item) { return item['expression_id']; @@ -84,6 +86,7 @@ function TrainingController($scope, $rootScope, $interval, $http, Rasa_Status, A if (synonymsIds.length > 0) { SynonymsVariants.query({ synonyms_id: synonymsIds }, function (variants) { + variants = $scope.cleanResponse(variants); generateData(regex, intents, expressions, params, synonyms, variants); }, function (error) { @@ -127,28 +130,48 @@ function TrainingController($scope, $rootScope, $interval, $http, Rasa_Status, A function generateData(regex, intents, expressions, params, synonyms, variants) { let tmpData = ""; - for (let intent_i = 0; intent_i <= intents.length - 1; intent_i++) { + //Loop through Intents --> Examples (expressions) --> Entities --> Parameters + for (let intent_i = 0; intent_i < intents.length; intent_i++) { let expressionList = expressions.filter( expression => expression.intent_id === intents[intent_i].intent_id ); tmpData += "## intent:" + intents[intent_i].intent_name + "\n"; if (expressionList.length > 0) { - for (let expression_i = 0; expression_i <= expressionList.length - 1; expression_i++) { + for (let expression_i = 0; expression_i < expressionList.length; expression_i++) { //Add parameters to expression var expression = expressionList[expression_i].expression_text; let parameterList = params.filter( param => param.expression_id === expressionList[expression_i].expression_id ); if (parameterList.length > 0) { - for (let parameter_i = 0; parameter_i <= parameterList.length - 1; parameter_i++) { - expression = expression.splice(parameterList[parameter_i].parameter_end, 0, "(" + parameterList[parameter_i].entity_name + ")"); + for (let parameter_i = 0; parameter_i < parameterList.length; parameter_i++) { + expression = expression.splice(parameterList[parameter_i].parameter_end, 0, "](" + parameterList[parameter_i].entity_name + ")").splice(parameterList[parameter_i].parameter_start, 0, "["); } } - tmpData += "- " + expression + "\n"; + tmpData += "- " + expression + "\n\n"; } } } + if (synonyms) { + for (let synonym_i = 0; synonym_i < synonyms.length; synonym_i++) { + tmpData += "## synonym:" + synonyms[synonym_i].synonym_reference + "\n"; + for (let synonym_variant_i = 0; synonym_variant_i < variants.length; synonym_variant_i++) { + //The additional properties of the factory method is causing problems + if (variants[synonym_variant_i].synonym_id == synonyms[synonym_i].synonym_id) { + tmpData += "- " + variants[synonym_variant_i].synonym_value + "\n"; + } + } + } + tmpData += "\n"; + } + + if (regex) { + for (let regex_i = 0; regex_i < regex.length; regex_i++) { + tmpData += "## regex:" + regex[regex_i].regex_name; + tmpData += "- " + regex[regex_i].regex_pattern + "\n\n"; + } + } /* //Check data formats of examples and match output to MD format. @@ -328,7 +351,7 @@ function TrainingController($scope, $rootScope, $interval, $http, Rasa_Status, A delete tmpData.rasa_nlu_data.common_examples[i].expression_id; } - let agentToTrain = objectFindByKey($scope.agentList, 'agent_id', $scope.agent.agent_id); + let agentToTrain = $scope.objectFindByKey($scope.agentList, 'agent_id', $scope.agent.agent_id); let dataToPost = {}; dataToPost.config = agentToTrain.agent_config; diff --git a/web/src/app/router.js b/web/src/app/router.js index c515a9f..7953f62 100755 --- a/web/src/app/router.js +++ b/web/src/app/router.js @@ -138,10 +138,20 @@ angular templateUrl: '/app/components/settings/settings.html', activePage: 'settings' }) + .when('/models/:agent_id', { + controller: 'ModelController', + templateUrl: '/app/components/models/models.html', + activePage: 'models' + }) .when('/models', { controller: 'ModelController', templateUrl: '/app/components/models/models.html', activePage: 'models' }) + .when('/models/:agent_id/add', { + controller: 'AddModelController', + templateUrl: '/app/components/models/add_model.html', + activePage: 'models' + }) .otherwise({ redirectTo: '/' }); }); diff --git a/web/src/app/shared/aside/aside.js b/web/src/app/shared/aside/aside.js index f4f6cc0..12d4018 100755 --- a/web/src/app/shared/aside/aside.js +++ b/web/src/app/shared/aside/aside.js @@ -41,7 +41,7 @@ function AsideController($scope, $rootScope, $interval, $http, Rasa_Version, Set function getRasaStatus() { Rasa_Status.get(function (statusdata) { - $rootScope.config = JSON.parse(angular.toJson(statusdata));; + $rootScope.config = statusdata.toJSON(); $rootScope.config.isonline = 1; }, function (error) { $rootScope.config.isonline = 0; diff --git a/web/src/app/utils.js b/web/src/app/utils.js index 7bb1787..3680e96 100755 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -1,45 +1,5 @@ -function objectFindByKey(array, key, value) { - for (let i = 0; i < array.length; i++) { - if (array[i][key] === value) { - return array[i]; - } - } - return null; -} +angular.module('app').controller('Utils', UtilsController); - -function timeConverter(UNIX_timestamp) { - var a = new Date(UNIX_timestamp * 1000); - var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; - var year = a.getFullYear(); - var month = months[a.getMonth()]; - var date = a.getDate(); - var hour = a.getHours(); - var min = a.getMinutes(); - var sec = a.getSeconds(); - var time = date + ' ' + month + ' ' + year + ' ' + hour + ':' + min + ':' + sec; - return time; -} - -function pastelColors() { - const hue = Math.floor(Math.random() * 360); - return 'hsl(' + hue + ', 100%, 87.5%)'; -} - -if (!String.prototype.splice) { - /** - * {JSDoc} - * - * The splice() method changes the content of a string by removing a range of - * characters and/or adding new characters. - * - * @this {String} - * @param {number} start Index at which to start changing the string. - * @param {number} delCount An integer indicating the number of old chars to remove. - * @param {string} newSubStr The String that is spliced in. - * @return {string} A new string with the spliced substring. - */ - String.prototype.splice = function(start, delCount, newSubStr) { - return this.slice(0, start) + newSubStr + this.slice(start + Math.abs(delCount)); - }; -} +function UtilsController ($scope) { + +} \ No newline at end of file diff --git a/web/src/index.html b/web/src/index.html index 5ce9f70..24937f9 100755 --- a/web/src/index.html +++ b/web/src/index.html @@ -65,6 +65,7 @@ + From b1b1bf088ea0606ec5244b5ed0f2159c27d5019d Mon Sep 17 00:00:00 2001 From: Paul Aschmann Date: Tue, 27 Aug 2019 19:18:04 -0400 Subject: [PATCH 11/12] - Rename Agent to Bot --- README.md | 17 +- server/db/{agents.js => bots.js} | 82 ++-- server/db/db.js | 12 +- server/db/entities.js | 10 +- server/db/expressions.js | 3 +- server/db/intents.js | 16 +- server/db/logs.js | 24 +- server/db/models.js | 12 +- server/db/regex.js | 10 +- server/db/settings.js | 2 +- server/db/synonyms.js | 16 +- server/db/variants.js | 3 +- server/routes/auth.js | 6 +- server/routes/index.js | 40 +- server/routes/rasa_router.js | 4 +- web/src/app/components/agents/add_agent.js | 12 - web/src/app/components/agents/agents.html | 29 -- web/src/app/components/agents/agents.js | 9 - web/src/app/components/agents/edit_agent.js | 70 ---- web/src/app/components/agents/import_agent.js | 52 --- .../add_agent.html => bots/add_bot.html} | 14 +- web/src/app/components/bots/add_bot.js | 12 + web/src/app/components/bots/bots.html | 29 ++ web/src/app/components/bots/bots.js | 9 + .../edit_agent.html => bots/edit_bot.html} | 60 +-- web/src/app/components/bots/edit_bot.js | 70 ++++ .../import_bot.html} | 18 +- web/src/app/components/bots/import_bot.js | 52 +++ .../app/components/entities/add_entity.html | 4 +- web/src/app/components/entities/add_entity.js | 12 +- .../app/components/entities/edit_entity.html | 4 +- .../app/components/entities/edit_entity.js | 12 +- web/src/app/components/insights/insights.html | 6 +- web/src/app/components/insights/insights.js | 26 +- .../app/components/intents/add_intent.html | 4 +- web/src/app/components/intents/add_intent.js | 10 +- .../app/components/intents/edit_intent.html | 4 +- web/src/app/components/intents/edit_intent.js | 10 +- web/src/app/components/models/add_model.js | 4 +- web/src/app/components/models/models.html | 12 +- web/src/app/components/models/models.js | 44 +-- web/src/app/components/regex/add_regex.html | 4 +- web/src/app/components/regex/add_regex.js | 10 +- web/src/app/components/regex/edit_regex.html | 4 +- web/src/app/components/regex/edit_regex.js | 12 +- .../app/components/synonyms/add_synonym.html | 4 +- .../app/components/synonyms/add_synonym.js | 10 +- .../app/components/synonyms/edit_synonym.html | 4 +- .../app/components/synonyms/edit_synonym.js | 8 +- web/src/app/components/training/training.html | 16 +- web/src/app/components/training/training.js | 365 +++++++----------- web/src/app/router.js | 82 ++-- web/src/app/services/api.js | 42 +- web/src/app/shared/sidebar/sidebar.html | 4 +- web/src/index.html | 12 +- 55 files changed, 677 insertions(+), 745 deletions(-) rename server/db/{agents.js => bots.js} (78%) delete mode 100755 web/src/app/components/agents/add_agent.js delete mode 100755 web/src/app/components/agents/agents.html delete mode 100755 web/src/app/components/agents/agents.js delete mode 100755 web/src/app/components/agents/edit_agent.js delete mode 100755 web/src/app/components/agents/import_agent.js rename web/src/app/components/{agents/add_agent.html => bots/add_bot.html} (82%) create mode 100755 web/src/app/components/bots/add_bot.js create mode 100755 web/src/app/components/bots/bots.html create mode 100755 web/src/app/components/bots/bots.js rename web/src/app/components/{agents/edit_agent.html => bots/edit_bot.html} (77%) create mode 100755 web/src/app/components/bots/edit_bot.js rename web/src/app/components/{agents/import_agent.html => bots/import_bot.html} (70%) create mode 100755 web/src/app/components/bots/import_bot.js diff --git a/README.md b/README.md index bea8c5a..7297f61 100755 --- a/README.md +++ b/README.md @@ -1,13 +1,19 @@ # Rasa UI -Rasa UI is a web application built on top of, and for [Rasa] (https://github.com/RasaHQ/rasa). Rasa UI provides a web application to quickly and easily be able to create agents, define intents and entities. It also provides some convenience features for Rasa, like training and loading your models, monitoring usage or viewing logs. +Rasa UI is a web application built on top of, and for [Rasa] (https://github.com/RasaHQ/rasa). Rasa UI provides a web application to quickly and easily be able to create and manage bots, intents, entities, synonyms and regex statements through a web interface. It also provides some convenience features for Rasa, like training and loading your models, monitoring usage or viewing logs. + +Currently Rasa UI can be used to manage the NLU features of Rasa, with Rasa Core features currently under development. ## Features - UI for creating and managing training data - Examples, Intents, Entities, Synonyms, Regex -- Log requests for usage tracking, history, improvements +- Manage multiple bots from a single UI/instance of Rasa UI +- Create, manage and load different versions of your models for testing and optimizing +- Log requests for usage tracking, history, improvements to your models. - Easily execute intent parsing using different models -- Manage Multiple Agents in one place +- Manage Multiple Bots in one place +- Data is stored in a SQLite DB +- Can be used with or without a Rasa backend to manage your training data ## Getting Started @@ -33,6 +39,7 @@ cd rasaui && npm install Please see the [wiki](https://github.com/paschmann/rasa-ui/wiki/Rasa-UI-Install-Guide) for more detailed instructions. ## Running + Run npm start from the server folder (rasa-ui) ``` @@ -40,6 +47,10 @@ npm start ``` Your web application should be available on http://localhost:5001 +## Upgrading + +Because Rasa UI uses a Database to store training data, and other content, in the event the database schema changes, you will need to modify your database when upgrading to newer versions of Rasa UI. Please review the server/db migration folder for upgrade scripts from and to newer versions if you have existing data and want to maintain it. If you are upgrading from Rasa UI prior to v.3.0.0 there is no data migration path as previously postgres was used, and now sqlite is being used. + ## Logging Since Rasa UI can be used to log events/intent parsing/training etc. we would suggest changing your endpoints for your API calls to "pass through" Rasa UI. All API requests are simply logged, forwarded to Rasa and then returned. diff --git a/server/db/agents.js b/server/db/bots.js similarity index 78% rename from server/db/agents.js rename to server/db/bots.js index 9070eef..692c364 100755 --- a/server/db/agents.js +++ b/server/db/bots.js @@ -1,9 +1,9 @@ const db = require('./db'); const logger = require('../util/logger'); -function getAllAgents(req, res, next) { - logger.winston.info('Agent.getAllAgents'); - db.all('select * from agents order by agent_id desc', function(err, data) { +function getAllBots(req, res, next) { + logger.winston.info('Bot.getAllBots'); + db.all('select * from bots order by bot_id desc', function(err, data) { if (err) { logger.winston.info(err); } else { @@ -12,9 +12,9 @@ function getAllAgents(req, res, next) { }); } -function getSingleAgent(req, res, next) { - logger.winston.info('Agent.getSingleAgent'); - db.get('select * from agents where agent_id = ?', req.params.agent_id, function(err, data) { +function getSingleBot(req, res, next) { + logger.winston.info('Bot.getSingleBot'); + db.get('select * from bots where bot_id = ?', req.params.bot_id, function(err, data) { if (err) { logger.winston.info(err); } else { @@ -23,9 +23,9 @@ function getSingleAgent(req, res, next) { }); } -function createAgent(req, res, next) { - logger.winston.info('Agent.createAgent'); - db.run('insert into agents(agent_name, agent_config, output_folder)' + 'values (?,?,?)', [req.body.agent_name, req.body.agent_config, req.body.output_folder], function(err) { +function createBot(req, res, next) { + logger.winston.info('Bot.createBot'); + db.run('insert into bots(bot_name, bot_config, output_folder)' + 'values (?,?,?)', [req.body.bot_name, req.body.bot_config, req.body.output_folder], function(err) { if (err) { logger.winston.info("Error inserting a new record"); } else { @@ -34,9 +34,9 @@ function createAgent(req, res, next) { }); } -function updateAgent(req, res, next) { - logger.winston.info('Agent.updateAgent'); - db.run('update agents set agent_name = ?, output_folder = ?, agent_config = ? where agent_id = ?', [req.body.agent_name, req.body.output_folder, req.body.agent_config, req.body.agent_id], function(err) { +function updateBot(req, res, next) { + logger.winston.info('Bot.updateBot'); + db.run('update bots set bot_name = ?, output_folder = ?, bot_config = ? where bot_id = ?', [req.body.bot_name, req.body.output_folder, req.body.bot_config, req.body.bot_id], function(err) { if (err) { logger.winston.info("Error updating the record"); } else { @@ -45,9 +45,9 @@ function updateAgent(req, res, next) { }); } -function removeAgent(req, res) { - logger.winston.info('Agent.updateAgent'); - db.run('delete from agents where agent_id = ?', req.params.agent_id, function(err) { +function removeBot(req, res) { + logger.winston.info('Bot.updateBot'); + db.run('delete from bots where bot_id = ?', req.params.bot_id, function(err) { if (err) { logger.winston.info("Error removing the record"); } else { @@ -57,26 +57,26 @@ function removeAgent(req, res) { } module.exports = { - getSingleAgent, - getAllAgents, - createAgent, - updateAgent, - removeAgent, - uploadAgentFromFile, - updateAgentStory + getSingleBot, + getAllBots, + createBot, + updateBot, + removeBot, + uploadBotFromFile, + updateBotStory }; -function updateAgentStory(req, res, next) { - logger.winston.info('Agent.updateAgentStory -- Not done'); +function updateBotStory(req, res, next) { + logger.winston.info('Bot.updateBotStory -- Not done'); /* - db.none('update agents set story_details=$2 where agent_id=$1', [ - Number(req.body.agent_id), + db.none('update bots set story_details=$2 where bot_id=$1', [ + Number(req.body.bot_id), req.body.story_details]) .then(function() { res.status(200).json({ status: 'success', - message: 'Updated Story For Agent'}); + message: 'Updated Story For Bot'}); }) .catch(function(err) { return next(err); @@ -85,11 +85,11 @@ function updateAgentStory(req, res, next) { } -function uploadAgentFromFile(req, res, next) { +function uploadBotFromFile(req, res, next) { /* logger.winston.info('On server request' + JSON.stringify(req.body)); - //agent, intent,expressions, entities, , parameters(expression id, entity id) + //bot, intent,expressions, entities, , parameters(expression id, entity id) const intents_map = new Map(); const entities_map = new Map(); const entities_set = new Set(); @@ -140,17 +140,17 @@ function uploadAgentFromFile(req, res, next) { db.tx(function(t) { // t.ctx = transaction context object return t - .one('insert into agents(agent_name) values($1) RETURNING agent_id', [ - req.body.agent_name]) - .then(agent => { + .one('insert into bots(bot_name) values($1) RETURNING bot_id', [ + req.body.bot_name]) + .then(bot => { logger.winston.info( - 'Agent Inserted. Inserting Entites First. These ids are needed for Intents.' + 'Bot Inserted. Inserting Entites First. These ids are needed for Intents.' ); const entity_queries_arr = []; entities_set.forEach(function(entity) { const entity_query = t.one( - 'insert into entities(entity_name, agent_id, slot_data_type) values($1,$2,$3) RETURNING entity_id', - [entity, agent.agent_id, 'NOT_USED'] + 'insert into entities(entity_name, bot_id, slot_data_type) values($1,$2,$3) RETURNING entity_id', + [entity, bot.bot_id, 'NOT_USED'] ) .then(function(return_entity) { logger.winston.info( @@ -172,8 +172,8 @@ function uploadAgentFromFile(req, res, next) { intents_map.forEach(function(expressionsArray, key) { logger.winston.info('Inserting Intent ' + key); const intent_query = t.one( - 'insert into intents(agent_id, intent_name) VALUES($1, $2) RETURNING intent_id', - [agent.agent_id, key] + 'insert into intents(bot_id, intent_name) VALUES($1, $2) RETURNING intent_id', + [bot.bot_id, key] ) .then(intent => { const expressions_query_arr = []; @@ -231,8 +231,8 @@ function uploadAgentFromFile(req, res, next) { for (let i = 0; i < regex_set.length; i++) { const regex = regex_set[i]; const regex_query = t.none( - 'insert into regex(regex_name, regex_pattern, agent_id) values($1,$2,$3)', - [regex.name, regex.pattern, agent.agent_id] + 'insert into regex(regex_name, regex_pattern, bot_id) values($1,$2,$3)', + [regex.name, regex.pattern, bot.bot_id] ); regex_query_arr.push(regex_query); } @@ -246,9 +246,9 @@ function uploadAgentFromFile(req, res, next) { for (let i = 0; i < synonyms_set.length; i++) { const synonym = synonyms_set[i]; const synonym_query = t.one( - 'insert into synonyms(agent_id, synonym_reference) values($1, $2) ' + + 'insert into synonyms(bot_id, synonym_reference) values($1, $2) ' + 'RETURNING synonym_id', - [agent.agent_id, synonym.value] + [bot.bot_id, synonym.value] ) .then(synonym_inserted => { const variant_query_arr = []; diff --git a/server/db/db.js b/server/db/db.js index 6919770..5f9e538 100755 --- a/server/db/db.js +++ b/server/db/db.js @@ -31,17 +31,17 @@ function createDBSchema() { try { logger.winston.info("------------------------- Starting to create DB schema -------------------------"); db.run("CREATE TABLE IF NOT EXISTS version(version)", setDBSchemaVersion); - db.run("CREATE TABLE IF NOT EXISTS agents (agent_id INTEGER PRIMARY KEY AUTOINCREMENT, agent_name TEXT, agent_config TEXT, output_folder TEXT)"); - db.run("CREATE TABLE IF NOT EXISTS intents (intent_id INTEGER PRIMARY KEY AUTOINCREMENT, intent_name TEXT, agent_id INTEGER)"); - db.run("CREATE TABLE IF NOT EXISTS synonyms (synonym_id INTEGER PRIMARY KEY AUTOINCREMENT, synonym_reference TEXT, regex_pattern TEXT, agent_id INTEGER)"); - db.run("CREATE TABLE IF NOT EXISTS entities (entity_id INTEGER PRIMARY KEY AUTOINCREMENT, entity_name TEXT, slot_data_type TEXT, agent_id INTEGER)"); + db.run("CREATE TABLE IF NOT EXISTS bots (bot_id INTEGER PRIMARY KEY AUTOINCREMENT, bot_name TEXT, bot_config TEXT, output_folder TEXT)"); + db.run("CREATE TABLE IF NOT EXISTS intents (intent_id INTEGER PRIMARY KEY AUTOINCREMENT, intent_name TEXT, bot_id INTEGER)"); + db.run("CREATE TABLE IF NOT EXISTS synonyms (synonym_id INTEGER PRIMARY KEY AUTOINCREMENT, synonym_reference TEXT, regex_pattern TEXT, bot_id INTEGER)"); + db.run("CREATE TABLE IF NOT EXISTS entities (entity_id INTEGER PRIMARY KEY AUTOINCREMENT, entity_name TEXT, slot_data_type TEXT, bot_id INTEGER)"); db.run("CREATE TABLE IF NOT EXISTS expressions (expression_id INTEGER PRIMARY KEY AUTOINCREMENT, expression_text TEXT, intent_id INTEGER)"); db.run("CREATE TABLE IF NOT EXISTS expression_parameters (parameter_id INTEGER PRIMARY KEY AUTOINCREMENT, parameter_start INTEGER, parameter_end INTEGER, parameter_value TEXT, expression_id INTEGER, intent_id INTEGER, entity_id INTEGER)"); - db.run("CREATE TABLE IF NOT EXISTS regex (regex_id INTEGER PRIMARY KEY AUTOINCREMENT, regex_name TEXT, regex_pattern TEXT, agent_id INTEGER)"); + db.run("CREATE TABLE IF NOT EXISTS regex (regex_id INTEGER PRIMARY KEY AUTOINCREMENT, regex_name TEXT, regex_pattern TEXT, bot_id INTEGER)"); db.run("CREATE TABLE IF NOT EXISTS responses (response_id INTEGER PRIMARY KEY AUTOINCREMENT, response_text TEXT, response_type TEXT, intent_id INTEGER)"); db.run("CREATE TABLE IF NOT EXISTS synonym_variants (synonym_variant_id INTEGER PRIMARY KEY AUTOINCREMENT, synonym_value TEXT, synonym_id INTEGER)"); db.run("CREATE TABLE IF NOT EXISTS nlu_log (log_id INTEGER PRIMARY KEY AUTOINCREMENT, ip_address TEXT, query TEXT, event_type TEXT, event_data TEXT, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP)"); - db.run("CREATE TABLE IF NOT EXISTS models (model_id INTEGER PRIMARY KEY AUTOINCREMENT, model_name TEXT, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, comment TEXT, agent_id INTEGER, local_path TEXT, server_path TEXT, server_response TEXT)"); + db.run("CREATE TABLE IF NOT EXISTS models (model_id INTEGER PRIMARY KEY AUTOINCREMENT, model_name TEXT, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, comment TEXT, bot_id INTEGER, local_path TEXT, server_path TEXT, server_response TEXT)"); db.run("CREATE TABLE IF NOT EXISTS settings (setting_name TEXT, setting_value TEXT)", function() { db.run("INSERT into settings (setting_name, setting_value) values ('refresh_time', '60000')"); diff --git a/server/db/entities.js b/server/db/entities.js index 6dadad6..6d6b656 100755 --- a/server/db/entities.js +++ b/server/db/entities.js @@ -12,9 +12,9 @@ function getAllEntities(req, res, next) { }); } -function getAllEntitiesForAgent(req, res, next) { - logger.winston.info('Entities.getAllEntitiesForAgent'); - db.all('select * from entities where agent_id = ?', req.params.agent_id, function(err, data) { +function getAllEntitiesForBot(req, res, next) { + logger.winston.info('Entities.getAllEntitiesForBot'); + db.all('select * from entities where bot_id = ?', req.params.bot_id, function(err, data) { if (err) { logger.winston.info(err); } else { @@ -37,7 +37,7 @@ function getSingleEntity(req, res, next) { function createEntity(req, res, next) { logger.winston.info('Entities.createEntity'); - db.run('insert into entities(agent_id, entity_name, slot_data_type)' + 'values (?,?,?)', [req.body.agent_id, req.body.entity_name, req.body.slot_data_type], function(err) { + db.run('insert into entities(bot_id, entity_name, slot_data_type)' + 'values (?,?,?)', [req.body.bot_id, req.body.entity_name, req.body.slot_data_type], function(err) { if (err) { logger.winston.info("Error inserting a new record"); } else { @@ -71,7 +71,7 @@ function removeEntity(req, res, next) { module.exports = { getAllEntities, - getAllEntitiesForAgent, + getAllEntitiesForBot, getSingleEntity, createEntity, updateEntity, diff --git a/server/db/expressions.js b/server/db/expressions.js index e45ce2e..1646005 100755 --- a/server/db/expressions.js +++ b/server/db/expressions.js @@ -26,7 +26,8 @@ function getIntentExpressions(req, res, next) { function getIntentExpressionQuery(req, res, next) { logger.winston.info('expression.getIntentExpressionQuery'); - db.all('select * from expressions where intent_id in (?)', req.query.intent_ids, function(err, data) { + var array_intentIds = req.query.intent_ids.split(","); //Very hacky due to the node-sqlite not supporting IN from an array + db.all('select * from expressions where intent_id in (' + array_intentIds + ')', function(err, data) { if (err) { logger.winston.info(err); } else { diff --git a/server/db/intents.js b/server/db/intents.js index f4b0a0f..254f7e7 100755 --- a/server/db/intents.js +++ b/server/db/intents.js @@ -12,9 +12,9 @@ function getSingleIntent(req, res, next) { }); } -function getAgentIntents(req, res, next) { - logger.winston.info('intents.getAgentIntents'); - db.all('select * from intents where agent_id = ?', req.params.agent_id, function(err, data) { +function getBotIntents(req, res, next) { + logger.winston.info('intents.getBotIntents'); + db.all('select * from intents where bot_id = ?', req.params.bot_id, function(err, data) { if (err) { logger.winston.info(err); } else { @@ -23,9 +23,9 @@ function getAgentIntents(req, res, next) { }); } -function createAgentIntent(req, res, next) { - logger.winston.info('intents.createAgentIntent'); - db.run('insert into intents (agent_id, intent_name)' + 'values (?,?)', [req.body.agent_id, req.body.intent_name], function(err) { +function createBotIntent(req, res, next) { + logger.winston.info('intents.createBotIntent'); + db.run('insert into intents (bot_id, intent_name)' + 'values (?,?)', [req.body.bot_id, req.body.intent_name], function(err) { if (err) { logger.winston.info("Error inserting a new record"); } else { @@ -60,8 +60,8 @@ function removeIntent(req, res, next) { } module.exports = { - getAgentIntents, - createAgentIntent, + getBotIntents, + createBotIntent, getSingleIntent, updateIntent, removeIntent diff --git a/server/db/logs.js b/server/db/logs.js index 345b11a..362a089 100755 --- a/server/db/logs.js +++ b/server/db/logs.js @@ -7,8 +7,8 @@ module.exports = { getIntentUsageTotal, getIntentUsageByDay, getAvgIntentUsageByDay, - getNluParseLogByAgent, - getAgentsByIntentConfidencePct, + getNluParseLogByBot, + getBotsByIntentConfidencePct, getIntentsMostUsed, getAvgNluResponseTimesLast30Days, getAvgUserResponseTimesLast30Days, @@ -132,8 +132,8 @@ function getAvgNluResponseTimesLast30Days(req, res, next) { } function getIntentsMostUsed(req, res, next) { - const agent_id = req.params.agent_id; - db.any('select * from intents_most_used where agent_id=$1', agent_id) + const bot_id = req.params.bot_id; + db.any('select * from intents_most_used where bot_id=$1', bot_id) .then(function (data) { res.status(200) .json(data); @@ -143,11 +143,11 @@ function getIntentsMostUsed(req, res, next) { }); } -function getAgentsByIntentConfidencePct(req, res, next) { - const agent_id = req.params.agent_id; - db.any('select count(*),intent_confidence_pct, agents.agent_id, agents.agent_name from nlu_parse_log, agents, messages ' - + ' where messages.agent_id = agents.agent_id and messages.messages_id=nlu_parse_log.messages_id ' - + ' and agents.agent_id=$1 group by intent_confidence_pct, agents.agent_id, agents.agent_name ', agent_id) +function getBotsByIntentConfidencePct(req, res, next) { + const bot_id = req.params.bot_id; + db.any('select count(*),intent_confidence_pct, bots.bot_id, bots.bot_name from nlu_parse_log, bots, messages ' + + ' where messages.bot_id = bots.bot_id and messages.messages_id=nlu_parse_log.messages_id ' + + ' and bots.bot_id=$1 group by intent_confidence_pct, bots.bot_id, bots.bot_name ', bot_id) .then(function (data) { res.status(200) .json(data); @@ -157,9 +157,9 @@ function getAgentsByIntentConfidencePct(req, res, next) { }); } -function getNluParseLogByAgent(req, res, next) { - const agent_id = req.params.agent_id; - db.any('select * from nlu_parse_log where agent_id = $1 order by timestamp desc', agent_id) +function getNluParseLogByBot(req, res, next) { + const bot_id = req.params.bot_id; + db.any('select * from nlu_parse_log where bot_id = $1 order by timestamp desc', bot_id) .then(function (data) { res.status(200) .json(data); diff --git a/server/db/models.js b/server/db/models.js index 7acb288..4414b9f 100644 --- a/server/db/models.js +++ b/server/db/models.js @@ -2,9 +2,9 @@ const db = require('./db'); const logger = require('../util/logger'); const fs = require('fs'); -function getAgentModels(req, res, next) { - logger.winston.info('Model.getAgentModels'); - db.all('select * from models where agent_id = ?', req.params.agent_id, function(err, data) { +function getBotModels(req, res, next) { + logger.winston.info('Model.getBotModels'); + db.all('select * from models where bot_id = ?', req.params.bot_id, function(err, data) { if (err) { logger.winston.info(err); } else { @@ -14,9 +14,9 @@ function getAgentModels(req, res, next) { } function createModel(req, res, next) { - logger.winston.info('Agent.createAgent'); + logger.winston.info('Bot.createBot'); console.log(req.body); - db.run('insert into models(model_name, comment, agent_id, server_path, local_path)' + 'values (?,?,?,?,?)', [req.body.file_name, req.body.comment, req.body.agent_id, req.body.server_path, 'Manually added'], function (err) { + db.run('insert into models(model_name, comment, bot_id, server_path, local_path)' + 'values (?,?,?,?,?)', [req.body.file_name, req.body.comment, req.body.bot_id, req.body.server_path, 'Manually added'], function (err) { if (err) { logger.winston.info("Error inserting a new record: " + err); } else { @@ -47,7 +47,7 @@ function removeModel(req, res, next) { } module.exports = { - getAgentModels, + getBotModels, removeModel, createModel }; \ No newline at end of file diff --git a/server/db/regex.js b/server/db/regex.js index 68de60b..da49eee 100755 --- a/server/db/regex.js +++ b/server/db/regex.js @@ -1,9 +1,9 @@ const db = require('./db'); const logger = require('../util/logger'); -function getAgentRegex(req, res, next) { - logger.winston.info('regex.getAgentRegex'); - db.all('select * from regex where agent_id = ?', req.params.agent_id, function(err, data) { +function getBotRegex(req, res, next) { + logger.winston.info('regex.getBotRegex'); + db.all('select * from regex where bot_id = ?', req.params.bot_id, function(err, data) { if (err) { logger.winston.info(err); } else { @@ -25,7 +25,7 @@ function getSingleRegex(req, res, next) { function createRegex(req, res, next) { logger.winston.info('regex.createRegex'); - db.run('insert into regex(agent_id, regex_name, regex_pattern)' + 'values (?,?,?)', [req.body.agent_id, req.body.regex_name, req.body.regex_pattern], function(err) { + db.run('insert into regex(bot_id, regex_name, regex_pattern)' + 'values (?,?,?)', [req.body.bot_id, req.body.regex_name, req.body.regex_pattern], function(err) { if (err) { logger.winston.info("Error inserting a new record"); } else { @@ -57,7 +57,7 @@ function removeRegex(req, res, next) { } module.exports = { - getAgentRegex, + getBotRegex, getSingleRegex, createRegex, updateRegex, diff --git a/server/db/settings.js b/server/db/settings.js index d1b6782..461fd3d 100755 --- a/server/db/settings.js +++ b/server/db/settings.js @@ -5,7 +5,7 @@ function getSingleSetting(req, res, next) { logger.winston.info('settings.getSingleSetting'); const settingName = req.params.setting_name; - db.get('select * from settings where setting_name = ?', req.params.agent_id, function(err, data) { + db.get('select * from settings where setting_name = ?', req.params.bot_id, function(err, data) { if (err) { logger.winston.info(err); } else { diff --git a/server/db/synonyms.js b/server/db/synonyms.js index 76ce62a..0c444c4 100755 --- a/server/db/synonyms.js +++ b/server/db/synonyms.js @@ -12,10 +12,10 @@ function getSingleSynonym(req, res, next) { }); } -function getAgentSynonyms(req, res, next) { - logger.winston.info('synonym.getAgentSynonyms'); +function getBotSynonyms(req, res, next) { + logger.winston.info('synonym.getBotSynonyms'); - db.all('select * from synonyms where agent_id = ?', req.params.agent_id, function(err, data) { + db.all('select * from synonyms where bot_id = ?', req.params.bot_id, function(err, data) { if (err) { logger.winston.info(err); } else { @@ -24,9 +24,9 @@ function getAgentSynonyms(req, res, next) { }); } -function createAgentSynonym(req, res, next) { - logger.winston.info('synonym.createAgentSynonym'); - db.run('insert into synonyms(agent_id, synonym_reference, regex_pattern)' + 'values (?,?,?)', [req.body.agent_id, req.body.synonym_reference, req.body.regex_pattern], function(err) { +function createBotSynonym(req, res, next) { + logger.winston.info('synonym.createBotSynonym'); + db.run('insert into synonyms(bot_id, synonym_reference, regex_pattern)' + 'values (?,?,?)', [req.body.bot_id, req.body.synonym_reference, req.body.regex_pattern], function(err) { if (err) { logger.winston.info("Error inserting a new record"); } else { @@ -55,6 +55,6 @@ function removeSynonym(req, res, next) { module.exports = { getSingleSynonym, - getAgentSynonyms, - createAgentSynonym, + getBotSynonyms, + createBotSynonym, removeSynonym}; diff --git a/server/db/variants.js b/server/db/variants.js index 97b66b8..1188f6c 100755 --- a/server/db/variants.js +++ b/server/db/variants.js @@ -26,7 +26,8 @@ function getSynonymVariants(req, res, next) { function getSynonymsVariants(req, res, next) { logger.winston.info('variants.getSynonymVariants'); const synonymsId = req.params.synonyms_id; - db.all('select * from synonym_variants where synonym_id in (?)', synonymsId, function(err, data) { + var array_synonymIds = synonymsId.split(","); //Very hacky due to the node-sqlite not supporting IN from an array + db.all('select * from synonym_variants where synonym_id in (' + array_synonymIds + ')', function(err, data) { if (err) { logger.winston.info(err); } else { diff --git a/server/routes/auth.js b/server/routes/auth.js index 3d0ce86..f27adcd 100755 --- a/server/routes/auth.js +++ b/server/routes/auth.js @@ -28,11 +28,11 @@ function authenticateUser(req, res, next) { function authenticateClient(req, res, next) { //authenticate client based on client secret key - //username,user_fullname,agent_name,client_secret_key should all be present in the body + //username,user_fullname,bot_name,client_secret_key should all be present in the body logger.winston.info('Authenticate Client'); db.one( - 'select * from agents where agent_name = $1 and client_secret_key=$2', - [req.body.agent_name, req.body.client_secret_key] + 'select * from bots where bot_name = $1 and client_secret_key=$2', + [req.body.bot_name, req.body.client_secret_key] ) .then(function(data) { const tokenData = { diff --git a/server/routes/index.js b/server/routes/index.js index 8da4b31..bf0c650 100755 --- a/server/routes/index.js +++ b/server/routes/index.js @@ -1,7 +1,7 @@ const express = require('express'); const router = express.Router(); -const agents = require('../db/agents'); +const bots = require('../db/bots'); const intents = require('../db/intents'); const expressions = require('../db/expressions'); const parameters = require('../db/parameters'); @@ -18,24 +18,24 @@ const auth = require('./auth'); const logs = require('../db/logs'); //routes model -router.get('/models/:agent_id', models.getAgentModels); +router.get('/models/:bot_id', models.getBotModels); router.delete('/models', models.removeModel); router.post('/models', models.createModel); -//routes agent -router.get('/agents', agents.getAllAgents); -router.get('/agents/:agent_id', agents.getSingleAgent); -router.post('/agents', agents.createAgent); -router.put('/agents/:agent_id', agents.updateAgent); -router.post('/agentStory', agents.updateAgentStory); -router.delete('/agents/:agent_id', agents.removeAgent); -router.post('/agents/upload', agents.uploadAgentFromFile); +//routes bot +router.get('/bots', bots.getAllBots); +router.get('/bots/:bot_id', bots.getSingleBot); +router.post('/bots', bots.createBot); +router.put('/bots/:bot_id', bots.updateBot); +router.post('/botStory', bots.updateBotStory); +router.delete('/bots/:bot_id', bots.removeBot); +router.post('/bots/upload', bots.uploadBotFromFile); //routes intents -router.get('/agents/:agent_id/intents', intents.getAgentIntents); +router.get('/bots/:bot_id/intents', intents.getBotIntents); router.get('/intents/:intent_id', intents.getSingleIntent); router.put('/intents/:intent_id', intents.updateIntent); -router.post('/agents/:agent_id/intents', intents.createAgentIntent); -router.post('/intents', intents.createAgentIntent); +router.post('/bots/:bot_id/intents', intents.createBotIntent); +router.post('/intents', intents.createBotIntent); router.delete('/intents/:intent_id', intents.removeIntent); //routes expression router.get('/intent_expressions', expressions.getIntentExpressionQuery); //Used for training @@ -54,21 +54,21 @@ router.put('/parameters/:parameter_id', parameters.updateParameter); router.delete('/parameters/:parameter_id', parameters.removeExpressionParameter); //routes entities router.get('/entities', entities.getAllEntities); -router.get('/entities/agent/:agent_id', entities.getAllEntitiesForAgent); +router.get('/entities/bot/:bot_id', entities.getAllEntitiesForBot); router.get('/entities/:entity_id', entities.getSingleEntity); router.post('/entities', entities.createEntity); router.put('/entities/:entity_id', entities.updateEntity); router.delete('/entities/:entity_id', entities.removeEntity); //routes regex -router.get('/agent/:agent_id/regex', regex.getAgentRegex); +router.get('/bot/:bot_id/regex', regex.getBotRegex); router.get('/regex/:regex_id', regex.getSingleRegex); router.post('/regex', regex.createRegex); router.put('/regex/:regex_id', regex.updateRegex); router.delete('/regex/:regex_id', regex.removeRegex); //routes synonymes -router.get('/agent/:agent_id/synonyms', synonyms.getAgentSynonyms); +router.get('/bot/:bot_id/synonyms', synonyms.getBotSynonyms); router.get('/synonyms/:synonym_id', synonyms.getSingleSynonym); -router.post('/synonyms', synonyms.createAgentSynonym); +router.post('/synonyms', synonyms.createBotSynonym); router.delete('/synonyms/:synonym_id', synonyms.removeSynonym); //routes variants router.get('/synonyms_variants/:synonyms_id', variants.getSynonymsVariants); //Used for training @@ -95,9 +95,9 @@ router.get('/intent_usage_total', logs.getIntentUsageTotal); router.get('/request_usage_total', logs.getRequestUsageTotal); router.get('/total_log_entries', logs.getTotalLogEntries); router.get('/avg_intent_usage_by_day', logs.getAvgIntentUsageByDay); -router.get('/nlu_parse_log/:agent_id', logs.getNluParseLogByAgent); -router.get('/agentsByIntentConfidencePct/:agent_id', logs.getAgentsByIntentConfidencePct); -router.get('/intentsMostUsed/:agent_id', logs.getIntentsMostUsed); +router.get('/nlu_parse_log/:bot_id', logs.getNluParseLogByBot); +router.get('/botsByIntentConfidencePct/:bot_id', logs.getBotsByIntentConfidencePct); +router.get('/intentsMostUsed/:bot_id', logs.getIntentsMostUsed); router.get('/avgNluResponseTimesLast30Days', logs.getAvgNluResponseTimesLast30Days); router.get('/avgUserResponseTimesLast30Days', logs.getAvgUserResponseTimesLast30Days); router.get('/activeUserCountLast12Months', logs.getActiveUserCountLast12Months); diff --git a/server/routes/rasa_router.js b/server/routes/rasa_router.js index 3c8795c..0a589cd 100755 --- a/server/routes/rasa_router.js +++ b/server/routes/rasa_router.js @@ -49,7 +49,7 @@ function checkDirectoryExists(filePath) { function trainRasaNlu(req, res, next) { var model = {}; - model.file_path = "server/data/models/" + req.query.agent_name + "/"; + model.file_path = "server/data/models/" + req.query.bot_name + "/"; model.file_name = Math.floor(Date.now()) + ".tar.gz"; logger.winston.info("Rasa NLU Train Request -> " + global.rasa_endpoint + "/model/train"); @@ -86,7 +86,7 @@ function trainRasaNlu(req, res, next) { stream.on('finish', function () { if (model.server_file_name) { - db.run('insert into models(model_name, comment, agent_id, local_path, server_path, server_response)' + 'values (?,?,?,?,?,?)', [model.file_name, req.query.comment, req.query.agent_id, model.file_path + model.file_name, model.server_file_name, "response"], function (err) { + db.run('insert into models(model_name, comment, bot_id, local_path, server_path, server_response)' + 'values (?,?,?,?,?,?)', [model.file_name, req.query.comment, req.query.bot_id, model.file_path + model.file_name, model.server_file_name, "response"], function (err) { if (err) { logger.winston.info("Error inserting a new record: " + err); } else { diff --git a/web/src/app/components/agents/add_agent.js b/web/src/app/components/agents/add_agent.js deleted file mode 100755 index 7f13c6f..0000000 --- a/web/src/app/components/agents/add_agent.js +++ /dev/null @@ -1,12 +0,0 @@ -angular -.module('app') -.controller('AddAgentController', AddAgentController) - -function AddAgentController($scope, Agent) { - $scope.addAgent = function(params) { - Agent.save(this.formData).$promise.then(function() { - $scope.formData.agent_name = ""; - $scope.go('/agents') - }); - }; -} diff --git a/web/src/app/components/agents/agents.html b/web/src/app/components/agents/agents.html deleted file mode 100755 index 5b9d93a..0000000 --- a/web/src/app/components/agents/agents.html +++ /dev/null @@ -1,29 +0,0 @@ - -
    -
    -
    -
    - -
    - -
    -
    -
    -

    -
    -
    \ No newline at end of file diff --git a/web/src/app/components/agents/agents.js b/web/src/app/components/agents/agents.js deleted file mode 100755 index 8f35f5d..0000000 --- a/web/src/app/components/agents/agents.js +++ /dev/null @@ -1,9 +0,0 @@ -angular -.module('app') -.controller('AgentsController', AgentsController); - -function AgentsController($scope, $rootScope, Agent,$http,appConfig,$window) { - Agent.query(function(data) { - $scope.agentList = data; - }); -} diff --git a/web/src/app/components/agents/edit_agent.js b/web/src/app/components/agents/edit_agent.js deleted file mode 100755 index ad10a2b..0000000 --- a/web/src/app/components/agents/edit_agent.js +++ /dev/null @@ -1,70 +0,0 @@ -angular.module('app').controller('EditAgentController', EditAgentController); - -function EditAgentController($scope, Agent, Intents, AgentEntities, Actions, AgentActions, AgentSynonyms, AgentRegex, $rootScope) { - Agent.get({ agent_id: $scope.$routeParams.agent_id }, function(data) { - $scope.agent = data; - /* Core feature - $scope.storiesList = []; - parseStories(data.story_details); - */ - }); - - Intents.query({ agent_id: $scope.$routeParams.agent_id }, function(data) { - $scope.intentList = data; - }); - - AgentSynonyms.query({ agent_id: $scope.$routeParams.agent_id }, function(data) { - $scope.synonymsList = data; - }); - - AgentRegex.query({ agent_id: $scope.$routeParams.agent_id }, function(data) { - $scope.regexList = data; - }); - - AgentEntities.query({ agent_id: $scope.$routeParams.agent_id }, function(data) { - $scope.entitiesList = data; - }); - - $scope.editAgentInfo = function(agent) { - Agent.update({ agent_id: agent.agent_id }, agent).$promise.then(function() { - $rootScope.$broadcast('setAlertText', "Agent information updated Sucessfully!!"); - }); - }; - - /* Core feature - AgentActions.query({ agent_id: $scope.$routeParams.agent_id }, function(data) { - $scope.actionsList = data; - }); - */ - - function parseStories(story_details) { - if (angular.isUndefined(story_details) || story_details === null) return; - const lines = story_details.split('\n'); - - for (let i = 0; i < lines.length; i++) { - const currentLine = lines[i]; - if (currentLine.startsWith('##')) { - $scope.storiesList.push(currentLine.substring(2, currentLine.length)); - } - } - } - - $scope.deleteAgent = function() { - Agent.remove({ agent_id: $scope.$routeParams.agent_id }).$promise.then( - function() { - $scope.go('/agents'); - } - ); - }; - - $scope.addAction = function(form, agent) { - form.agent_id = agent.agent_id; - Actions.save(form).$promise.then(function() { - $('#modal-add-actions').modal('hide'); - $scope.form = {}; - AgentActions.query({ agent_id: agent.agent_id }, function(data) { - $scope.actionsList = data; - }); - }); - }; -} diff --git a/web/src/app/components/agents/import_agent.js b/web/src/app/components/agents/import_agent.js deleted file mode 100755 index 3bb5e7b..0000000 --- a/web/src/app/components/agents/import_agent.js +++ /dev/null @@ -1,52 +0,0 @@ -/* TODO: Import feature */ - -angular - .module('app') - .controller('ImportAgentController', ImportAgentController); - -function ImportAgentController($scope, $rootScope, Agent, $route, $location) { - $scope.show_preview = false; - $scope.fileInvalid = true; - $scope.show_progress = false; - - $scope.importAgent = function() { - let postRequest = { - agent_name: $scope.formData.agent_name, - data: $scope.agentImportData - }; - Agent.save({ agent_id: 'upload' }, postRequest).$promise.then(function() { - $rootScope.$broadcast('setAlertText', 'Agent uploaded successfully'); - if ($location.path().endsWith('agents')) { - $route.reload(); - } - }); - $rootScope.$broadcast( - 'setAlertText', - 'Agent upload in progress.. Notification will be sent when done!!' - ); - $scope.formData.agent_name = ''; - $scope.go('/agents'); - }; - - $scope.validateAndPreviewAgent = function(file) { - $scope.filesize = file.size + ' bytes'; - $scope.show_preview = true; - $scope.show_progress = true; - $scope.agentImportData = 'Loading ...'; - let reader = new FileReader(); - reader.onload = function() { - $scope.show_progress = false; - try { - $scope.agentImportData = JSON.parse(reader.result); - $scope.fileInvalid = false; - } catch (e) { - $scope.agentImportData = 'Invalid JSON'; - return false; - } - }; - reader.onerror = function() { - $scope.agentImportData = 'Error Occurred while uploading the file'; - }; - reader.readAsText(file); - }; -} diff --git a/web/src/app/components/agents/add_agent.html b/web/src/app/components/bots/add_bot.html similarity index 82% rename from web/src/app/components/agents/add_agent.html rename to web/src/app/components/bots/add_bot.html index 5cbd2a9..10863e5 100755 --- a/web/src/app/components/agents/add_agent.html +++ b/web/src/app/components/bots/add_bot.html @@ -1,28 +1,28 @@
    -
    +
    - Agent + Bot
    - +
    - +
    diff --git a/web/src/app/components/bots/add_bot.js b/web/src/app/components/bots/add_bot.js new file mode 100755 index 0000000..ac14446 --- /dev/null +++ b/web/src/app/components/bots/add_bot.js @@ -0,0 +1,12 @@ +angular +.module('app') +.controller('AddBotController', AddBotController) + +function AddBotController($scope, Bot) { + $scope.addBot = function(params) { + Bot.save(this.formData).$promise.then(function() { + $scope.formData.bot_name = ""; + $scope.go('/bots') + }); + }; +} diff --git a/web/src/app/components/bots/bots.html b/web/src/app/components/bots/bots.html new file mode 100755 index 0000000..9052b75 --- /dev/null +++ b/web/src/app/components/bots/bots.html @@ -0,0 +1,29 @@ + +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    +
    +
    \ No newline at end of file diff --git a/web/src/app/components/bots/bots.js b/web/src/app/components/bots/bots.js new file mode 100755 index 0000000..bb6ba86 --- /dev/null +++ b/web/src/app/components/bots/bots.js @@ -0,0 +1,9 @@ +angular +.module('app') +.controller('BotsController', BotsController); + +function BotsController($scope, $rootScope, Bot,$http,appConfig,$window) { + Bot.query(function(data) { + $scope.botList = data; + }); +} diff --git a/web/src/app/components/agents/edit_agent.html b/web/src/app/components/bots/edit_bot.html similarity index 77% rename from web/src/app/components/agents/edit_agent.html rename to web/src/app/components/bots/edit_bot.html index 529867d..01c5d53 100755 --- a/web/src/app/components/agents/edit_agent.html +++ b/web/src/app/components/bots/edit_bot.html @@ -1,11 +1,11 @@ @@ -18,32 +18,32 @@
    Settings -
    -
    - - + +
    - - + +
    - - + +
    @@ -53,10 +53,10 @@
    Intents - -
    @@ -66,7 +66,7 @@
    @@ -85,7 +85,7 @@
    Entities -
    @@ -95,7 +95,7 @@
    @@ -116,7 +116,7 @@
    Synonyms -
    @@ -126,7 +126,7 @@
    @@ -145,7 +145,7 @@
    Regex -
    @@ -154,7 +154,7 @@
    @@ -182,7 +182,7 @@ tooltip > Actions - +
    diff --git a/web/src/app/components/bots/edit_bot.js b/web/src/app/components/bots/edit_bot.js new file mode 100755 index 0000000..3001a6d --- /dev/null +++ b/web/src/app/components/bots/edit_bot.js @@ -0,0 +1,70 @@ +angular.module('app').controller('EditBotController', EditBotController); + +function EditBotController($scope, Bot, Intents, BotEntities, Actions, BotActions, BotSynonyms, BotRegex, $rootScope) { + Bot.get({ bot_id: $scope.$routeParams.bot_id }, function(data) { + $scope.bot = data; + /* Core feature + $scope.storiesList = []; + parseStories(data.story_details); + */ + }); + + Intents.query({ bot_id: $scope.$routeParams.bot_id }, function(data) { + $scope.intentList = data; + }); + + BotSynonyms.query({ bot_id: $scope.$routeParams.bot_id }, function(data) { + $scope.synonymsList = data; + }); + + BotRegex.query({ bot_id: $scope.$routeParams.bot_id }, function(data) { + $scope.regexList = data; + }); + + BotEntities.query({ bot_id: $scope.$routeParams.bot_id }, function(data) { + $scope.entitiesList = data; + }); + + $scope.editBotInfo = function(bot) { + Bot.update({ bot_id: bot.bot_id }, bot).$promise.then(function() { + $rootScope.$broadcast('setAlertText', "Bot information updated Sucessfully!!"); + }); + }; + + /* Core feature + BotActions.query({ bot_id: $scope.$routeParams.bot_id }, function(data) { + $scope.actionsList = data; + }); + */ + + function parseStories(story_details) { + if (angular.isUndefined(story_details) || story_details === null) return; + const lines = story_details.split('\n'); + + for (let i = 0; i < lines.length; i++) { + const currentLine = lines[i]; + if (currentLine.startsWith('##')) { + $scope.storiesList.push(currentLine.substring(2, currentLine.length)); + } + } + } + + $scope.deleteBot = function() { + Bot.remove({ bot_id: $scope.$routeParams.bot_id }).$promise.then( + function() { + $scope.go('/bots'); + } + ); + }; + + $scope.addAction = function(form, bot) { + form.bot_id = bot.bot_id; + Actions.save(form).$promise.then(function() { + $('#modal-add-actions').modal('hide'); + $scope.form = {}; + BotActions.query({ bot_id: bot.bot_id }, function(data) { + $scope.actionsList = data; + }); + }); + }; +} diff --git a/web/src/app/components/agents/import_agent.html b/web/src/app/components/bots/import_bot.html similarity index 70% rename from web/src/app/components/agents/import_agent.html rename to web/src/app/components/bots/import_bot.html index e390941..82e14be 100755 --- a/web/src/app/components/agents/import_agent.html +++ b/web/src/app/components/bots/import_bot.html @@ -1,27 +1,27 @@
    - +
    - Import New Agent (Rasa NLU only) + Import New Bot (Rasa NLU only)
    - +
    - - + +
    @@ -33,7 +33,7 @@
    - Agent Preview + Bot Preview
    @@ -42,7 +42,7 @@

    - +
    diff --git a/web/src/app/components/bots/import_bot.js b/web/src/app/components/bots/import_bot.js new file mode 100755 index 0000000..097b3df --- /dev/null +++ b/web/src/app/components/bots/import_bot.js @@ -0,0 +1,52 @@ +/* TODO: Import feature */ + +angular + .module('app') + .controller('ImportBotController', ImportBotController); + +function ImportBotController($scope, $rootScope, Bot, $route, $location) { + $scope.show_preview = false; + $scope.fileInvalid = true; + $scope.show_progress = false; + + $scope.importBot = function() { + let postRequest = { + bot_name: $scope.formData.bot_name, + data: $scope.botImportData + }; + Bot.save({ bot_id: 'upload' }, postRequest).$promise.then(function() { + $rootScope.$broadcast('setAlertText', 'Bot uploaded successfully'); + if ($location.path().endsWith('bots')) { + $route.reload(); + } + }); + $rootScope.$broadcast( + 'setAlertText', + 'Bot upload in progress.. Notification will be sent when done!!' + ); + $scope.formData.bot_name = ''; + $scope.go('/bots'); + }; + + $scope.validateAndPreviewBot = function(file) { + $scope.filesize = file.size + ' bytes'; + $scope.show_preview = true; + $scope.show_progress = true; + $scope.botImportData = 'Loading ...'; + let reader = new FileReader(); + reader.onload = function() { + $scope.show_progress = false; + try { + $scope.botImportData = JSON.parse(reader.result); + $scope.fileInvalid = false; + } catch (e) { + $scope.botImportData = 'Invalid JSON'; + return false; + } + }; + reader.onerror = function() { + $scope.botImportData = 'Error Occurred while uploading the file'; + }; + reader.readAsText(file); + }; +} diff --git a/web/src/app/components/entities/add_entity.html b/web/src/app/components/entities/add_entity.html index 110c3a8..5a270a9 100755 --- a/web/src/app/components/entities/add_entity.html +++ b/web/src/app/components/entities/add_entity.html @@ -1,6 +1,6 @@
    diff --git a/web/src/app/components/entities/add_entity.js b/web/src/app/components/entities/add_entity.js index 64f8fce..bf27888 100755 --- a/web/src/app/components/entities/add_entity.js +++ b/web/src/app/components/entities/add_entity.js @@ -2,18 +2,18 @@ angular .module('app') .controller('AddEntityController', AddEntityController); -function AddEntityController($scope, Entity,Agent, $rootScope) { +function AddEntityController($scope, Entity,Bot, $rootScope) { - Agent.get({agent_id: $scope.$routeParams.agent_id}, function(data) { - $scope.agent = data; + Bot.get({bot_id: $scope.$routeParams.bot_id}, function(data) { + $scope.bot = data; }); $scope.addEntity = function(params) { - this.formData.agent_id = $scope.$routeParams.agent_id; + this.formData.bot_id = $scope.$routeParams.bot_id; Entity.save(this.formData).$promise.then(function() { $scope.formData.entity_name = ""; - $rootScope.$broadcast('setAlertText', "Entity Added for " + $scope.agent.agent_name + " Sucessfully !!"); - $scope.go('/agent/' + $scope.$routeParams.agent_id) + $rootScope.$broadcast('setAlertText', "Entity Added for " + $scope.bot.bot_name + " Sucessfully !!"); + $scope.go('/bot/' + $scope.$routeParams.bot_id) }); }; } diff --git a/web/src/app/components/entities/edit_entity.html b/web/src/app/components/entities/edit_entity.html index 19befba..bdf0ac8 100755 --- a/web/src/app/components/entities/edit_entity.html +++ b/web/src/app/components/entities/edit_entity.html @@ -1,6 +1,6 @@
    {{ model.timestamp }} File: {{ model.model_name }}
    Local Path: {{ model.local_path }}
    Rasa Server Path: - {{ selectedAgent.output_folder + "/" + model.server_path }}
    {{ model.comment }} + diff --git a/web/src/app/components/training/training.js b/web/src/app/components/training/training.js index 9ae6b85..e695f60 100755 --- a/web/src/app/components/training/training.js +++ b/web/src/app/components/training/training.js @@ -1,40 +1,34 @@ angular.module('app').controller('TrainingController', TrainingController); -function TrainingController($scope, $rootScope, $interval, $http, Rasa_Status, Agent, AgentRegex, ExpressionParameters, IntentExpressions, AgentEntities, AgentActions, AgentSynonyms, SynonymsVariants, appConfig) { - let exportData; +function TrainingController($scope, $rootScope, $interval, $http, Rasa_Status, Bot, BotRegex, ExpressionParameters, IntentExpressions, BotEntities, BotActions, BotSynonyms, SynonymsVariants, appConfig) { $scope.generateError = ''; - $scope.toLowercase = false; $scope.message = ''; $scope.comment = ''; - //TODO: Tmp set raw data to working contents + $scope.raw_data = {}; $scope.bool_force_model_update = false; - //'{"config":"language: en\\npipeline: supervised_embeddings", "nlu": "## intent:greet \\n- hey \\n- hello \\n ## intent:goodbye \\n- cu \\n- goodbye", "out": "models", "force": false }'; - + //TODO: All http functions need to be replaced with factory methods - Agent.query(function (data) { - $scope.agentList = data; + Bot.query(function (data) { + $scope.botList = data; }); $scope.updateData = function() { - $scope.raw_data.config = $scope.selectedAgent.agent_config; - $scope.raw_data.out = $scope.selectedAgent.output_folder; - //$scope.raw_data.nlu = "## intent:greet \n- hey \n- hello \n ## intent:goodbye \n- cu \n- goodbye"; + $scope.raw_data.config = $scope.selectedBot.bot_config; + $scope.raw_data.out = $scope.selectedBot.output_folder; $scope.raw_data.force = $scope.bool_force_model_update ? "true" : "false"; - $scope.raw_data_stringified = JSON.stringify($scope.raw_data); } $scope.trainUsingRawData = function () { - let agentToTrain = $scope.objectFindByKey($scope.agentList, 'agent_id', $scope.agent.agent_id); + let botToTrain = $scope.objectFindByKey($scope.botList, 'bot_id', $scope.bot.bot_id); $rootScope.trainings_under_this_process = 1; - $http.post(appConfig.api_endpoint_v2 + "/rasa/model/train?agent_name=" + agentToTrain.agent_name + "&agent_id=" + agentToTrain.agent_id + "&comment=" + $scope.comment, $scope.raw_data_stringified).then( + $http.post(appConfig.api_endpoint_v2 + "/rasa/model/train?bot_name=" + botToTrain.bot_name + "&bot_id=" + botToTrain.bot_id + "&comment=" + $scope.comment, $scope.raw_data_stringified).then( function (response) { - $scope.message = "Training for " + agentToTrain.agent_name + " completed successfully, open models to view and load the agents models"; + $scope.message = "Training for " + botToTrain.bot_name + " completed successfully, open models to view and load the bots models"; $rootScope.trainings_under_this_process = 0; }, function (err) { - //$scope.message = "Training for " + agentToTrain.agent_name + " failed"; $scope.generateError = JSON.stringify(err); $rootScope.trainings_under_this_process = 0; } @@ -51,20 +45,20 @@ function TrainingController($scope, $rootScope, $interval, $http, Rasa_Status, A a.click(); }; - $scope.getData = function (agent_id) { - $scope.selectedAgent = $scope.objectFindByKey($scope.agentList, 'agent_id', agent_id); + $scope.getData = function (bot_id) { + $scope.selectedBot = $scope.objectFindByKey($scope.botList, 'bot_id', bot_id); reset(); - Agent.query({ agent_id: agent_id, path: 'intents' }, function (intents) { + Bot.query({ bot_id: bot_id, path: 'intents' }, function (intents) { //Fetch rasa core data only if its enabled - //if ($scope.selectedAgent.rasa_core_enabled === true) - // populateCoreDomainYaml(agent_id, intents); + //if ($scope.selectedBot.rasa_core_enabled === true) + // populateCoreDomainYaml(bot_id, intents); $scope.updateData(); - AgentRegex.query({ agent_id: agent_id }, function (regex) { - AgentSynonyms.query({ agent_id: agent_id }, function (synonyms) { + BotRegex.query({ bot_id: bot_id }, function (regex) { + BotSynonyms.query({ bot_id: bot_id }, function (synonyms) { synonyms = $scope.cleanResponse(synonyms); let intentIds = intents .map(function (item) { @@ -173,198 +167,10 @@ function TrainingController($scope, $rootScope, $interval, $http, Rasa_Status, A } } - /* - //Check data formats of examples and match output to MD format. - let tmpData = {}; - let tmpIntent = {}; - let tmpExpression = {}; - let tmpParam = {}; - tmpData.rasa_nlu_data = {}; - tmpData.rasa_nlu_data.common_examples = []; - if (typeof synonyms !== 'undefined') { - tmpData.rasa_nlu_data.entity_synonyms = []; - for (let synonym_i = 0; synonym_i < synonyms.length; synonym_i++) { - let variants_synonyme = variants - .filter(function (obj) { - return obj.synonym_id === synonyms[synonym_i].synonym_id; - }) - .map(function (obj) { - return obj.synonym_value; - }); - if (variants_synonyme.length !== 0) { - tmpData.rasa_nlu_data.entity_synonyms.push({ - value: synonyms[synonym_i].synonym_reference, - synonyms: variants_synonyme - }); - } - } - } - if (regex.length > 0) { - tmpData.rasa_nlu_data.regex_features = []; - } - - for (let regex_i = 0; regex_i < regex.length; regex_i++) { - tmpData.rasa_nlu_data.regex_features.push({ - name: regex[regex_i].regex_name, - pattern: regex[regex_i].regex_pattern - }); - } - - - - for (let i = 0; i <= tmpData.rasa_nlu_data.common_examples.length - 1; i++) { - let parameterList = params.filter( - param => - param.expression_id === - tmpData.rasa_nlu_data.common_examples[i].expression_id - ); - if (tmpData.rasa_nlu_data.common_examples[i].entities.length !== parameterList.length - ) { - let missingEntities = parameterList.filter( - param => - param.entity_id !== - tmpData.rasa_nlu_data.common_examples[i].entities[0].entity_id - ); - for (let parameter_i = 0; parameter_i <= missingEntities.length - 1; parameter_i++) { - tmpParam = {}; - let start = tmpData.rasa_nlu_data.common_examples[i].text.indexOf( - missingEntities[parameter_i].parameter_value - ); - let end = missingEntities[parameter_i].parameter_value.length + start; - tmpParam.start = start; - tmpParam.end = end; - tmpParam.value = missingEntities[parameter_i].parameter_value; - tmpParam.entity = missingEntities[parameter_i].entity_name; - tmpData.rasa_nlu_data.common_examples[i].entities.push(tmpParam); - } - } - delete tmpData.rasa_nlu_data.common_examples[i].expression_id; - } - */ - $scope.raw_data.nlu = tmpData; $scope.updateData(); } - - function generateDataToJSON(regex, intents, expressions, params, synonyms, variants) { - let tmpData = {}; - let tmpIntent = {}; - let tmpExpression = {}; - let tmpParam = {}; - tmpData.rasa_nlu_data = {}; - tmpData.rasa_nlu_data.common_examples = []; - if (typeof synonyms !== 'undefined') { - tmpData.rasa_nlu_data.entity_synonyms = []; - for (let synonym_i = 0; synonym_i < synonyms.length; synonym_i++) { - let variants_synonyme = variants - .filter(function (obj) { - return obj.synonym_id === synonyms[synonym_i].synonym_id; - }) - .map(function (obj) { - return obj.synonym_value; - }); - if (variants_synonyme.length !== 0) { - tmpData.rasa_nlu_data.entity_synonyms.push({ - value: synonyms[synonym_i].synonym_reference, - synonyms: variants_synonyme - }); - } - } - } - if (regex.length > 0) { - tmpData.rasa_nlu_data.regex_features = []; - } - - for (let regex_i = 0; regex_i < regex.length; regex_i++) { - tmpData.rasa_nlu_data.regex_features.push({ - name: regex[regex_i].regex_name, - pattern: regex[regex_i].regex_pattern - }); - } - - for (let intent_i = 0; intent_i <= intents.length - 1; intent_i++) { - let expressionList = expressions.filter( - expression => expression.intent_id === intents[intent_i].intent_id - ); - if (expressionList !== undefined) { - for (let expression_i = 0; expression_i <= expressionList.length - 1; expression_i++) { - tmpIntent = {}; - tmpExpression = {}; - - tmpIntent.text = expressionList[expression_i].expression_text; - tmpIntent.intent = intents[intent_i].intent_name; - - tmpIntent.entities = []; - tmpIntent.expression_id = expressionList[expression_i].expression_id; - - let parameterList = params.filter( - param => - param.expression_id === expressionList[expression_i].expression_id - ); - if (parameterList !== undefined) { - for (let parameter_i = 0; parameter_i <= parameterList.length - 1; parameter_i++) { - tmpParam = {}; - tmpParam.start = parameterList[parameter_i].parameter_start; - tmpParam.end = parameterList[parameter_i].parameter_end; - tmpParam.value = parameterList[parameter_i].parameter_value; - tmpParam.entity = parameterList[parameter_i].entity_name; - tmpIntent.entities.push(tmpParam); - - //Check for common errors - if (tmpParam.entity === null) { - $scope.generateError = 'Entity is null'; - } - } - tmpData.rasa_nlu_data.common_examples.push(tmpIntent); - } - } - } - } - - for (let i = 0; i <= tmpData.rasa_nlu_data.common_examples.length - 1; i++) { - let parameterList = params.filter( - param => - param.expression_id === - tmpData.rasa_nlu_data.common_examples[i].expression_id - ); - if (tmpData.rasa_nlu_data.common_examples[i].entities.length !== parameterList.length - ) { - let missingEntities = parameterList.filter( - param => - param.entity_id !== - tmpData.rasa_nlu_data.common_examples[i].entities[0].entity_id - ); - for (let parameter_i = 0; parameter_i <= missingEntities.length - 1; parameter_i++) { - tmpParam = {}; - let start = tmpData.rasa_nlu_data.common_examples[i].text.indexOf( - missingEntities[parameter_i].parameter_value - ); - let end = missingEntities[parameter_i].parameter_value.length + start; - tmpParam.start = start; - tmpParam.end = end; - tmpParam.value = missingEntities[parameter_i].parameter_value; - tmpParam.entity = missingEntities[parameter_i].entity_name; - tmpData.rasa_nlu_data.common_examples[i].entities.push(tmpParam); - } - } - delete tmpData.rasa_nlu_data.common_examples[i].expression_id; - } - - let agentToTrain = $scope.objectFindByKey($scope.agentList, 'agent_id', $scope.agent.agent_id); - - let dataToPost = {}; - dataToPost.config = agentToTrain.agent_config; - dataToPost.out = agentToTrain.output_folder; - dataToPost.nlu = tmpData; - - exportData = tmpData; - $scope.exportdata = tmpData; - $scope.generateError = ''; - } - - - $scope.savecoretofiles = function () { let data = new Blob([$scope.domain_yml], { type: 'text/plain' }); let core_domain = document.getElementById('core_domain'); @@ -391,27 +197,20 @@ function TrainingController($scope, $rootScope, $interval, $http, Rasa_Status, A endpoints.click(); }; - $scope.convertToLowerCase = function () { - $scope.exportdata = JSON.parse( - JSON.stringify($scope.exportdata).toLowerCase() - ); - }; - function reset() { - $scope.toLowercase = false; $scope.generateError = ''; $scope.message = ''; } - function populateCoreDomainYaml(agent_id, intents) { - //get entities by agentid + function populateCoreDomainYaml(bot_id, intents) { + //get entities by botid let domain_yml_obj = {}; var endpoints_yml_obj = {}; var credentials_yml_obj = { rest: "" }; var endpoints_yml_obj = {}; var credentials_yml_obj = { rest: "" }; $scope.stories_md = ''; - Agent.get({ agent_id: agent_id }, function (data) { + Bot.get({ bot_id: bot_id }, function (data) { $scope.stories_md = data.story_details; if (data.endpoint_enabled) { endpoints_yml_obj.action_endpoint = { "url": data.endpoint_url }; @@ -427,7 +226,7 @@ function TrainingController($scope, $rootScope, $interval, $http, Rasa_Status, A }); }); - AgentEntities.query({ agent_id: agent_id }, function (allEntities) { + BotEntities.query({ bot_id: bot_id }, function (allEntities) { let requiredSlots = allEntities.filter( entity => entity.slot_data_type !== 'NOT_USED' && entity.slot_data_type !== '' ); @@ -462,7 +261,7 @@ function TrainingController($scope, $rootScope, $interval, $http, Rasa_Status, A } domain_yml_obj.action_factory = 'remote'; - AgentActions.query({ agent_id: agent_id }, function (actionsList) { + BotActions.query({ bot_id: bot_id }, function (actionsList) { if (actionsList != null && actionsList.length > 0) { //build actions domain_yml_obj.actions = actionsList.map(function (action) { @@ -518,4 +317,124 @@ function TrainingController($scope, $rootScope, $interval, $http, Rasa_Status, A }); }); } + + + + function generateDataToJSON(regex, intents, expressions, params, synonyms, variants) { + /* + let tmpData = {}; + let tmpIntent = {}; + let tmpExpression = {}; + let tmpParam = {}; + tmpData.rasa_nlu_data = {}; + tmpData.rasa_nlu_data.common_examples = []; + if (typeof synonyms !== 'undefined') { + tmpData.rasa_nlu_data.entity_synonyms = []; + for (let synonym_i = 0; synonym_i < synonyms.length; synonym_i++) { + let variants_synonyme = variants + .filter(function (obj) { + return obj.synonym_id === synonyms[synonym_i].synonym_id; + }) + .map(function (obj) { + return obj.synonym_value; + }); + if (variants_synonyme.length !== 0) { + tmpData.rasa_nlu_data.entity_synonyms.push({ + value: synonyms[synonym_i].synonym_reference, + synonyms: variants_synonyme + }); + } + } + } + if (regex.length > 0) { + tmpData.rasa_nlu_data.regex_features = []; + } + + for (let regex_i = 0; regex_i < regex.length; regex_i++) { + tmpData.rasa_nlu_data.regex_features.push({ + name: regex[regex_i].regex_name, + pattern: regex[regex_i].regex_pattern + }); + } + + for (let intent_i = 0; intent_i <= intents.length - 1; intent_i++) { + let expressionList = expressions.filter( + expression => expression.intent_id === intents[intent_i].intent_id + ); + if (expressionList !== undefined) { + for (let expression_i = 0; expression_i <= expressionList.length - 1; expression_i++) { + tmpIntent = {}; + tmpExpression = {}; + + tmpIntent.text = expressionList[expression_i].expression_text; + tmpIntent.intent = intents[intent_i].intent_name; + + tmpIntent.entities = []; + tmpIntent.expression_id = expressionList[expression_i].expression_id; + + let parameterList = params.filter( + param => + param.expression_id === expressionList[expression_i].expression_id + ); + if (parameterList !== undefined) { + for (let parameter_i = 0; parameter_i <= parameterList.length - 1; parameter_i++) { + tmpParam = {}; + tmpParam.start = parameterList[parameter_i].parameter_start; + tmpParam.end = parameterList[parameter_i].parameter_end; + tmpParam.value = parameterList[parameter_i].parameter_value; + tmpParam.entity = parameterList[parameter_i].entity_name; + tmpIntent.entities.push(tmpParam); + + //Check for common errors + if (tmpParam.entity === null) { + $scope.generateError = 'Entity is null'; + } + } + tmpData.rasa_nlu_data.common_examples.push(tmpIntent); + } + } + } + } + + for (let i = 0; i <= tmpData.rasa_nlu_data.common_examples.length - 1; i++) { + let parameterList = params.filter( + param => + param.expression_id === + tmpData.rasa_nlu_data.common_examples[i].expression_id + ); + if (tmpData.rasa_nlu_data.common_examples[i].entities.length !== parameterList.length + ) { + let missingEntities = parameterList.filter( + param => + param.entity_id !== + tmpData.rasa_nlu_data.common_examples[i].entities[0].entity_id + ); + for (let parameter_i = 0; parameter_i <= missingEntities.length - 1; parameter_i++) { + tmpParam = {}; + let start = tmpData.rasa_nlu_data.common_examples[i].text.indexOf( + missingEntities[parameter_i].parameter_value + ); + let end = missingEntities[parameter_i].parameter_value.length + start; + tmpParam.start = start; + tmpParam.end = end; + tmpParam.value = missingEntities[parameter_i].parameter_value; + tmpParam.entity = missingEntities[parameter_i].entity_name; + tmpData.rasa_nlu_data.common_examples[i].entities.push(tmpParam); + } + } + delete tmpData.rasa_nlu_data.common_examples[i].expression_id; + } + + let botToTrain = $scope.objectFindByKey($scope.botList, 'bot_id', $scope.bot.bot_id); + + let dataToPost = {}; + dataToPost.config = botToTrain.bot_config; + dataToPost.out = botToTrain.output_folder; + dataToPost.nlu = tmpData; + + $scope.exportdata = tmpData; + $scope.generateError = ''; + */ + } + } diff --git a/web/src/app/router.js b/web/src/app/router.js index 7953f62..edac409 100755 --- a/web/src/app/router.js +++ b/web/src/app/router.js @@ -27,42 +27,42 @@ angular templateUrl: '/app/components/dashboard/dashboard.html', activePage: 'dashboard' }) - .when('/agents', { - controller: 'AgentsController as agent', - templateUrl: '/app/components/agents/agents.html', - activePage: 'agents' - }) - .when('/agent/add', { - controller: 'AddAgentController as addagent', - templateUrl: '/app/components/agents/add_agent.html', - activePage: 'agents' - }) - .when('/agent/import', { - controller: 'ImportAgentController as importagent', - templateUrl: '/app/components/agents/import_agent.html', - activePage: 'agents' - }) - .when('/agent/:agent_id', { - controller: 'EditAgentController as editagent', - templateUrl: '/app/components/agents/edit_agent.html', - activePage: 'agent' - }) - .when('/agent/:agent_id/action/edit/:action_id', { + .when('/bots', { + controller: 'BotsController as bot', + templateUrl: '/app/components/bots/bots.html', + activePage: 'bots' + }) + .when('/bot/add', { + controller: 'AddBotController as addbot', + templateUrl: '/app/components/bots/add_bot.html', + activePage: 'bots' + }) + .when('/bot/import', { + controller: 'ImportBotController as importbot', + templateUrl: '/app/components/bots/import_bot.html', + activePage: 'bots' + }) + .when('/bot/:bot_id', { + controller: 'EditBotController as editbot', + templateUrl: '/app/components/bots/edit_bot.html', + activePage: 'bot' + }) + .when('/bot/:bot_id/action/edit/:action_id', { controller: 'ActionsController as actionsController', templateUrl: '/app/components/actions/actions.html', - activePage: 'agent' + activePage: 'bot' }) - .when('/agent/:agent_id/intent/add', { + .when('/bot/:bot_id/intent/add', { controller: 'AddIntentController as addintent', templateUrl: '/app/components/intents/add_intent.html', - activePage: 'agent' + activePage: 'bot' }) - .when('/agent/:agent_id/intent/:intent_id', { + .when('/bot/:bot_id/intent/:intent_id', { controller: 'EditIntentController as editintent', templateUrl: '/app/components/intents/edit_intent.html', - activePage: 'agent' + activePage: 'bot' }) - .when('/agent/:agent_id/stories/', { + .when('/bot/:bot_id/stories/', { controller: 'StoriesController as stories', templateUrl: '/app/components/stories/stories.html', activePage: 'stories' @@ -72,35 +72,35 @@ angular templateUrl: '/app/components/entities/entities.html', activePage: 'entities' }) - .when('/agent/:agent_id/entity/add', { + .when('/bot/:bot_id/entity/add', { controller: 'AddEntityController as addentity', templateUrl: '/app/components/entities/add_entity.html', activePage: 'entities' }) - .when('/agent/:agent_id/entity/:entity_id', { + .when('/bot/:bot_id/entity/:entity_id', { controller: 'EntityController as entity', templateUrl: '/app/components/entities/edit_entity.html', - activePage: 'agent' + activePage: 'bot' }) - .when('/agent/:agent_id/regex/add', { + .when('/bot/:bot_id/regex/add', { controller: 'AddRegexController as addentity', templateUrl: '/app/components/regex/add_regex.html', - activePage: 'agent' + activePage: 'bot' }) - .when('/agent/:agent_id/regex/:regex_id', { + .when('/bot/:bot_id/regex/:regex_id', { controller: 'EditRegexController as editregex', templateUrl: '/app/components/regex/edit_regex.html', - activePage: 'agent' + activePage: 'bot' }) - .when('/agent/:agent_id/synonym/:synonym_id', { + .when('/bot/:bot_id/synonym/:synonym_id', { controller: 'SynonymController', templateUrl: '/app/components/synonyms/edit_synonym.html', - activePage: 'agent' + activePage: 'bot' }) - .when('/agent/:agent_id/synonyms/add', { + .when('/bot/:bot_id/synonyms/add', { controller: 'AddSynonymController', templateUrl: '/app/components/synonyms/add_synonym.html', - activePage: 'agent' + activePage: 'bot' }) .when('/rasaconfig', { controller: 'RasaConfigController', @@ -117,7 +117,7 @@ angular templateUrl: '/app/components/history/history.html', activePage: 'history' }) - .when('/conversation/:agent_id/:user_id', { + .when('/conversation/:bot_id/:user_id', { //name: 'conversation', controller: 'ConversationController', templateUrl: '/app/components/conversation/conversation.html', @@ -138,7 +138,7 @@ angular templateUrl: '/app/components/settings/settings.html', activePage: 'settings' }) - .when('/models/:agent_id', { + .when('/models/:bot_id', { controller: 'ModelController', templateUrl: '/app/components/models/models.html', activePage: 'models' @@ -148,7 +148,7 @@ angular templateUrl: '/app/components/models/models.html', activePage: 'models' }) - .when('/models/:agent_id/add', { + .when('/models/:bot_id/add', { controller: 'AddModelController', templateUrl: '/app/components/models/add_model.html', activePage: 'models' diff --git a/web/src/app/services/api.js b/web/src/app/services/api.js index d00be60..ddcbe4e 100755 --- a/web/src/app/services/api.js +++ b/web/src/app/services/api.js @@ -1,9 +1,9 @@ var app = angular.module('app'); -app.factory('Agent', function ($resource, appConfig) { +app.factory('Bot', function ($resource, appConfig) { return $resource( - appConfig.api_endpoint_v2 + '/agents/:agent_id/:path', - { agent_id: '@id', path: '@path' }, + appConfig.api_endpoint_v2 + '/bots/:bot_id/:path', + { bot_id: '@id', path: '@path' }, { update: { method: 'PUT' } } @@ -20,9 +20,9 @@ app.factory('Actions', function ($resource, appConfig) { ); }); -app.factory('AgentActions', function ($resource, appConfig) { - return $resource(appConfig.api_endpoint_v2 + '/agents/:agent_id/actions', { - agent_id: '@id' +app.factory('BotActions', function ($resource, appConfig) { + return $resource(appConfig.api_endpoint_v2 + '/bots/:bot_id/actions', { + bot_id: '@id' }); }); @@ -30,8 +30,8 @@ app.factory('Auth', function ($resource, appConfig) { return $resource(appConfig.api_endpoint_v2 + '/auth'); }); -app.factory('AgentStories', function ($resource, appConfig) { - return $resource(appConfig.api_endpoint_v2 + '/agentStory'); +app.factory('BotStories', function ($resource, appConfig) { + return $resource(appConfig.api_endpoint_v2 + '/botStory'); }); app.factory('Intent', function ($resource, appConfig) { @@ -45,8 +45,8 @@ app.factory('Intent', function ($resource, appConfig) { }); app.factory('Intents', function ($resource, appConfig) { - return $resource(appConfig.api_endpoint_v2 + '/agents/:agent_id/intents', { - agent_id: '@id' + return $resource(appConfig.api_endpoint_v2 + '/bots/:bot_id/intents', { + bot_id: '@id' }); }); @@ -131,25 +131,25 @@ app.factory('Regex', [ } ]); -app.factory('AgentRegex', [ +app.factory('BotRegex', [ '$resource', 'appConfig', function ($resource, appConfig) { - return $resource(appConfig.api_endpoint_v2 + '/agent/:agent_id/regex', { - agent_id: '@id' + return $resource(appConfig.api_endpoint_v2 + '/bot/:bot_id/regex', { + bot_id: '@id' }); } ]); -app.factory('AgentSynonyms', function ($resource, appConfig) { - return $resource(appConfig.api_endpoint_v2 + '/agent/:agent_id/synonyms', { - agent_id: '@id' +app.factory('BotSynonyms', function ($resource, appConfig) { + return $resource(appConfig.api_endpoint_v2 + '/bot/:bot_id/synonyms', { + bot_id: '@id' }); }); -app.factory('AgentEntities', function ($resource, appConfig) { - return $resource(appConfig.api_endpoint_v2 + '/entities/agent/:agent_id', { - agent_id: '@id' +app.factory('BotEntities', function ($resource, appConfig) { + return $resource(appConfig.api_endpoint_v2 + '/entities/bot/:bot_id', { + bot_id: '@id' }); }); @@ -233,7 +233,7 @@ app.factory('IntentResponse', function ($resource, appConfig) { app.factory('Model', function ($resource, appConfig) { return $resource( - appConfig.api_endpoint_v2 + '/models/:agent_id', - { agent_id: '@id', path: '@path' } + appConfig.api_endpoint_v2 + '/models/:bot_id', + { bot_id: '@id', path: '@path' } ); }); diff --git a/web/src/app/shared/sidebar/sidebar.html b/web/src/app/shared/sidebar/sidebar.html index 6d8e297..1dfff8f 100755 --- a/web/src/app/shared/sidebar/sidebar.html +++ b/web/src/app/shared/sidebar/sidebar.html @@ -10,8 +10,8 @@ +