Ver código fonte

Merge remote-tracking branch 'upstream/master'

Sam X. Chen 5 anos atrás
pai
commit
58155288fb
100 arquivos alterados com 6452 adições e 539 exclusões
  1. 160 0
      .devcontainer/Dockerfile
  2. 12 0
      .devcontainer/build.sh
  3. 17 0
      .devcontainer/devcontainer.json
  4. 53 0
      .devcontainer/docker-compose.yml
  5. 3 0
      .gitattributes
  6. 1 0
      .github/ISSUE_TEMPLATE.md
  7. 0 1
      .gitignore
  8. 4 4
      .travis.yml
  9. 28 0
      .vscode/launch.json
  10. 171 0
      CHANGELOG.md
  11. 3 3
      Dockerfile
  12. 1 1
      Stackerfile.yml
  13. 1 1
      client/components/activities/activities.js
  14. 1 0
      client/components/boards/boardBody.js
  15. 78 0
      client/components/boards/boardBody.styl
  16. 1 0
      client/components/boards/boardColors.styl
  17. 3 1
      client/components/cards/cardDetails.styl
  18. 3 0
      client/components/cards/checklists.styl
  19. 2 1
      client/components/cards/labels.styl
  20. 9 3
      client/components/cards/minicard.styl
  21. 10 12
      client/components/import/import.js
  22. 25 6
      client/components/lists/listBody.js
  23. 2 0
      client/components/main/layouts.styl
  24. 2 0
      client/components/sidebar/sidebarArchives.js
  25. 16 0
      client/components/sidebar/sidebarFilters.jade
  26. 19 0
      client/components/sidebar/sidebarFilters.js
  27. 2 1
      client/components/swimlanes/swimlanes.jade
  28. 18 0
      client/components/swimlanes/swimlanes.js
  29. 3 1
      client/lib/filter.js
  30. 1 1
      client/lib/popup.js
  31. 4 4
      docker-compose.yml
  32. 2 0
      i18n/ar.i18n.json
  33. 2 0
      i18n/bg.i18n.json
  34. 2 0
      i18n/br.i18n.json
  35. 2 0
      i18n/ca.i18n.json
  36. 2 0
      i18n/cs.i18n.json
  37. 2 0
      i18n/da.i18n.json
  38. 2 0
      i18n/de.i18n.json
  39. 110 108
      i18n/el.i18n.json
  40. 2 0
      i18n/en-GB.i18n.json
  41. 2 0
      i18n/en.i18n.json
  42. 2 0
      i18n/eo.i18n.json
  43. 2 0
      i18n/es-AR.i18n.json
  44. 32 30
      i18n/es.i18n.json
  45. 2 0
      i18n/eu.i18n.json
  46. 2 0
      i18n/fa.i18n.json
  47. 2 0
      i18n/fi.i18n.json
  48. 4 2
      i18n/fr.i18n.json
  49. 2 0
      i18n/gl.i18n.json
  50. 2 0
      i18n/he.i18n.json
  51. 2 0
      i18n/hi.i18n.json
  52. 2 0
      i18n/hu.i18n.json
  53. 2 0
      i18n/hy.i18n.json
  54. 2 0
      i18n/id.i18n.json
  55. 2 0
      i18n/ig.i18n.json
  56. 15 13
      i18n/it.i18n.json
  57. 7 5
      i18n/ja.i18n.json
  58. 2 0
      i18n/ka.i18n.json
  59. 2 0
      i18n/km.i18n.json
  60. 2 0
      i18n/ko.i18n.json
  61. 2 0
      i18n/lv.i18n.json
  62. 2 0
      i18n/mk.i18n.json
  63. 2 0
      i18n/mn.i18n.json
  64. 2 0
      i18n/nb.i18n.json
  65. 130 128
      i18n/nl.i18n.json
  66. 2 0
      i18n/oc.i18n.json
  67. 6 4
      i18n/pl.i18n.json
  68. 3 1
      i18n/pt-BR.i18n.json
  69. 42 40
      i18n/pt.i18n.json
  70. 2 0
      i18n/ro.i18n.json
  71. 11 9
      i18n/ru.i18n.json
  72. 2 0
      i18n/sr.i18n.json
  73. 2 0
      i18n/sv.i18n.json
  74. 2 0
      i18n/sw.i18n.json
  75. 2 0
      i18n/ta.i18n.json
  76. 2 0
      i18n/th.i18n.json
  77. 2 0
      i18n/tr.i18n.json
  78. 2 0
      i18n/uk.i18n.json
  79. 2 0
      i18n/vi.i18n.json
  80. 2 0
      i18n/zh-CN.i18n.json
  81. 2 0
      i18n/zh-HK.i18n.json
  82. 2 0
      i18n/zh-TW.i18n.json
  83. 1 4
      models/boards.js
  84. 8 3
      models/users.js
  85. 5207 0
      package-lock.json
  86. 3 3
      package.json
  87. 2 2
      public/api/wekan.html
  88. 1 1
      public/api/wekan.yml
  89. 3 3
      rebuild-wekan.bat
  90. 1 1
      rebuild-wekan.sh
  91. 0 111
      releases/virtualbox/rebuild-wekan.sh
  92. 3 3
      releases/virtualbox/start-wekan.sh
  93. 3 2
      sandstorm-pkgdef.capnp
  94. 15 9
      server/publications/boards.js
  95. 2 2
      snap-src/bin/config
  96. 26 2
      snap-src/bin/mongodb-control
  97. 16 7
      snapcraft.yaml
  98. 3 3
      start-wekan.bat
  99. 3 3
      start-wekan.sh
  100. 60 0
      torodb-postgresql/docker-compose.yml

+ 160 - 0
.devcontainer/Dockerfile

@@ -0,0 +1,160 @@
+FROM ubuntu:disco
+LABEL maintainer="sgr"
+
+ENV BUILD_DEPS="gnupg gosu bsdtar wget curl bzip2 g++ build-essential python git ca-certificates iproute2"
+ENV DEBIAN_FRONTEND=noninteractive
+
+ENV \
+    DEBUG=false \
+    NODE_VERSION=8.16.0 \
+    METEOR_RELEASE=1.8.1 \
+    USE_EDGE=false \
+    METEOR_EDGE=1.5-beta.17 \
+    NPM_VERSION=latest \
+    FIBERS_VERSION=4.0.1 \
+    ARCHITECTURE=linux-x64 \
+    SRC_PATH=./ \
+    WITH_API=true \
+    ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE=3 \
+    ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD=60 \
+    ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW=15 \
+    ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE=3 \
+    ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60 \
+    ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15 \
+    RICHER_CARD_COMMENT_EDITOR=true \
+    MAX_IMAGE_PIXEL="" \
+    IMAGE_COMPRESS_RATIO="" \
+    BIGEVENTS_PATTERN="" \
+    NOTIFY_DUE_DAYS_BEFORE_AND_AFTER="" \
+    NOTIFY_DUE_AT_HOUR_OF_DAY="" \
+    EMAIL_NOTIFICATION_TIMEOUT=30000 \
+    MATOMO_ADDRESS="" \
+    MATOMO_SITE_ID="" \
+    MATOMO_DO_NOT_TRACK=true \
+    MATOMO_WITH_USERNAME=false \
+    BROWSER_POLICY_ENABLED=true \
+    TRUSTED_URL="" \
+    WEBHOOKS_ATTRIBUTES="" \
+    OAUTH2_ENABLED=false \
+    OAUTH2_LOGIN_STYLE=redirect \
+    OAUTH2_CLIENT_ID="" \
+    OAUTH2_SECRET="" \
+    OAUTH2_SERVER_URL="" \
+    OAUTH2_AUTH_ENDPOINT="" \
+    OAUTH2_USERINFO_ENDPOINT="" \
+    OAUTH2_TOKEN_ENDPOINT="" \
+    OAUTH2_ID_MAP="" \
+    OAUTH2_USERNAME_MAP="" \
+    OAUTH2_FULLNAME_MAP="" \
+    OAUTH2_ID_TOKEN_WHITELIST_FIELDS="" \
+    OAUTH2_REQUEST_PERMISSIONS='openid profile email' \
+    OAUTH2_EMAIL_MAP="" \
+    LDAP_ENABLE=false \
+    LDAP_PORT=389 \
+    LDAP_HOST="" \
+    LDAP_BASEDN="" \
+    LDAP_LOGIN_FALLBACK=false \
+    LDAP_RECONNECT=true \
+    LDAP_TIMEOUT=10000 \
+    LDAP_IDLE_TIMEOUT=10000 \
+    LDAP_CONNECT_TIMEOUT=10000 \
+    LDAP_AUTHENTIFICATION=false \
+    LDAP_AUTHENTIFICATION_USERDN="" \
+    LDAP_AUTHENTIFICATION_PASSWORD="" \
+    LDAP_LOG_ENABLED=false \
+    LDAP_BACKGROUND_SYNC=false \
+    LDAP_BACKGROUND_SYNC_INTERVAL="" \
+    LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false \
+    LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=false \
+    LDAP_ENCRYPTION=false \
+    LDAP_CA_CERT="" \
+    LDAP_REJECT_UNAUTHORIZED=false \
+    LDAP_USER_AUTHENTICATION=false \
+    LDAP_USER_AUTHENTICATION_FIELD=uid \
+    LDAP_USER_SEARCH_FILTER="" \
+    LDAP_USER_SEARCH_SCOPE="" \
+    LDAP_USER_SEARCH_FIELD="" \
+    LDAP_SEARCH_PAGE_SIZE=0 \
+    LDAP_SEARCH_SIZE_LIMIT=0 \
+    LDAP_GROUP_FILTER_ENABLE=false \
+    LDAP_GROUP_FILTER_OBJECTCLASS="" \
+    LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE="" \
+    LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE="" \
+    LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT="" \
+    LDAP_GROUP_FILTER_GROUP_NAME="" \
+    LDAP_UNIQUE_IDENTIFIER_FIELD="" \
+    LDAP_UTF8_NAMES_SLUGIFY=true \
+    LDAP_USERNAME_FIELD="" \
+    LDAP_FULLNAME_FIELD="" \
+    LDAP_MERGE_EXISTING_USERS=false \
+    LDAP_EMAIL_FIELD="" \
+    LDAP_EMAIL_MATCH_ENABLE=false \
+    LDAP_EMAIL_MATCH_REQUIRE=false \
+    LDAP_EMAIL_MATCH_VERIFIED=false \
+    LDAP_SYNC_USER_DATA=false \
+    LDAP_SYNC_USER_DATA_FIELDMAP="" \
+    LDAP_SYNC_GROUP_ROLES="" \
+    LDAP_DEFAULT_DOMAIN="" \
+    LDAP_SYNC_ADMIN_STATUS="" \
+    LDAP_SYNC_ADMIN_GROUPS="" \
+    HEADER_LOGIN_ID="" \
+    HEADER_LOGIN_FIRSTNAME="" \
+    HEADER_LOGIN_LASTNAME="" \
+    HEADER_LOGIN_EMAIL="" \
+    LOGOUT_WITH_TIMER=false \
+    LOGOUT_IN="" \
+    LOGOUT_ON_HOURS="" \
+    LOGOUT_ON_MINUTES="" \
+    CORS="" \
+    CORS_ALLOW_HEADERS="" \
+    CORS_EXPOSE_HEADERS="" \
+    DEFAULT_AUTHENTICATION_METHOD=""
+
+# Install OS
+RUN set -o xtrace \
+  && useradd --user-group -m --system --home-dir /home/wekan wekan \
+  && apt-get update \
+	&& apt-get install --assume-yes --no-install-recommends apt-utils apt-transport-https ca-certificates 2>&1 \
+	&& apt-get install --assume-yes --no-install-recommends ${BUILD_DEPS}
+
+# Install NodeJS
+RUN set -o xtrace \
+  && cd /tmp \
+  && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-$ARCHITECTURE.tar.xz" \
+  && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
+  && grep " node-v$NODE_VERSION-$ARCHITECTURE.tar.xz\$" SHASUMS256.txt.asc | sha256sum -c - \
+  && tar -xJf "node-v$NODE_VERSION-$ARCHITECTURE.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
+  && rm "node-v$NODE_VERSION-$ARCHITECTURE.tar.xz" SHASUMS256.txt.asc \
+  && ln -s /usr/local/bin/node /usr/local/bin/nodejs \
+  && mkdir -p /usr/local/lib/node_modules/fibers/.node-gyp /root/.node-gyp/${NODE_VERSION} /home/wekan/.config \
+  && npm install -g npm@${NPM_VERSION} \
+  && chown wekan:wekan --recursive /home/wekan/.config
+
+ENV DEBIAN_FRONTEND=dialog
+
+USER wekan
+
+# Install Meteor
+RUN set -o xtrace \
+  && cd /home/wekan \
+  && curl https://install.meteor.com/?release=$METEOR_VERSION --output /home/wekan/install-meteor.sh \
+  # Replace tar with bsdtar in the install script; https://github.com/jshimko/meteor-launchpad/issues/39
+  && sed --in-place "s/tar -xzf.*/bsdtar -xf \"\$TARBALL_FILE\" -C \"\$INSTALL_TMPDIR\"/g" /home/wekan/install-meteor.sh \
+  && sed --in-place 's/VERBOSITY="--silent"/VERBOSITY="--progress-bar"/' /home/wekan/install-meteor.sh \
+  && printf "\n[-] Installing Meteor $METEOR_VERSION...\n\n" \
+  && sh /home/wekan/install-meteor.sh
+
+ENV PATH=$PATH:$HOME/.meteor/
+
+# Copy source dir
+USER root
+
+RUN set -o xtrace \
+  && mkdir /home/wekan/app
+
+COPY ${SRC_PATH} /home/wekan/app/
+
+RUN set -o xtrace \
+  && chown -R wekan:wekan /home/wekan/app /home/wekan/.meteor
+
+USER wekan

+ 12 - 0
.devcontainer/build.sh

@@ -0,0 +1,12 @@
+#!/bin/bash
+
+cd /home/wekan/app
+rm -rf node_modules
+/home/wekan/.meteor/meteor npm install
+rm -rf .build
+/home/wekan/.meteor/meteor build .build --directory
+cp -f fix-download-unicode/cfs_access-point.txt .build/bundle/programs/server/packages/cfs_access-point.js
+cd .build/bundle/programs/server
+rm -rf node_modules
+/home/wekan/.meteor/meteor npm install
+cd /home/wekan/app

+ 17 - 0
.devcontainer/devcontainer.json

@@ -0,0 +1,17 @@
+// See https://aka.ms/vscode-remote/devcontainer.json for format details.
+{
+  "dockerComposeFile": "docker-compose.yml",
+  "service": "wekan-dev",
+  "workspaceFolder": "/home/wekan/app",
+  "extensions": [
+    "mutantdino.resourcemonitor",
+    "editorconfig.editorconfig",
+    "dbaeumer.vscode-eslint",
+    "codezombiech.gitignore",
+    "eamodio.gitlens",
+    "gruntfuggly.todo-tree",
+    "dotjoshjohnson.xml",
+    "redhat.vscode-yaml",
+    "vuhrmeister.vscode-meteor"
+  ]
+}

+ 53 - 0
.devcontainer/docker-compose.yml

@@ -0,0 +1,53 @@
+version: '3.7'
+
+services:
+
+  wekandb-dev:
+    image: mongo:4.0.11
+    container_name: wekan-dev-db
+    restart: unless-stopped
+    command: mongod --smallfiles --oplogSize 128
+    networks:
+      - wekan-dev-tier
+    expose:
+      - 27017
+    volumes:
+      - wekan-dev-db:/data/db
+      - wekan-dev-db-dump:/dump
+
+  wekan-dev:
+    container_name: wekan-dev-app
+    restart: always
+    networks:
+      - wekan-dev-tier
+    build:
+      context: ..
+      dockerfile: .devcontainer/Dockerfile
+    ports:
+      - 3000:3000
+      - 9229:9229
+    environment:
+      - MONGO_URL=mongodb://wekandb-dev:27017/wekan
+      - ROOT_URL=http://localhost:3000
+      #- MAIL_URL=smtp://user:pass@mailserver.example.com:25/
+      - MAIL_URL=smtp://<mail_url>:25/?ignoreTLS=true&tls={rejectUnauthorized:false}
+      - MAIL_FROM=Wekan Notifications <noreply.wekan@mydomain.com>
+      - WITH_API=true
+      - RICHER_CARD_COMMENT_EDITOR=true
+      - BROWSER_POLICY_ENABLED=true
+    depends_on:
+      - wekandb-dev
+    volumes:
+      - ..:/app:delegated
+    command:
+      sleep infinity
+
+volumes:
+  wekan-dev-db:
+    driver: local
+  wekan-dev-db-dump:
+    driver: local
+
+networks:
+  wekan-dev-tier:
+    driver: bridge

+ 3 - 0
.gitattributes

@@ -0,0 +1,3 @@
+* text=auto eol=lf
+*.{cmd,[cC][mM][dD]} text eol=crlf
+*.{bat,[bB][aA][tT]} text eol=crlf

+ 1 - 0
.github/ISSUE_TEMPLATE.md

@@ -17,6 +17,7 @@ Other Wekan issues can be added here.
 * Node Version:
 * Node Version:
 * MongoDB Version:
 * MongoDB Version:
 * ROOT_URL environment variable http(s)://(subdomain).example.com(/suburl):
 * ROOT_URL environment variable http(s)://(subdomain).example.com(/suburl):
+* Wekan only works on newest desktop Firefox/Chromium/Chrome/Edge/Chromium Edge and mobile Chrome. What webbrowser version are you using?
 
 
 **Problem description**:
 **Problem description**:
 - *REQUIRED: Add recorded animated gif about how it works currently, and screenshot mockups how it should work. Use peek to record animgif in Linux https://github.com/phw/peek*
 - *REQUIRED: Add recorded animated gif about how it works currently, and screenshot mockups how it should work. Use peek to record animgif in Linux https://github.com/phw/peek*

+ 0 - 1
.gitignore

@@ -29,6 +29,5 @@ versions.json
 Thumbs.db
 Thumbs.db
 ehthumbs.db
 ehthumbs.db
 .eslintcache
 .eslintcache
-package-lock.json
 .meteor/local
 .meteor/local
 .meteor-1.6-snap/.meteor/local
 .meteor-1.6-snap/.meteor/local

+ 4 - 4
.travis.yml

@@ -1,10 +1,10 @@
-dist: trusty
+dist: disco
 sudo: required
 sudo: required
 
 
 env:
 env:
-  TRAVIS_DOCKER_COMPOSE_VERSION: 1.17.0
-  TRAVIS_NODE_VERSION: 8.9.3
-  TRAVIS_NPM_VERSION: 5.5.1
+  TRAVIS_DOCKER_COMPOSE_VERSION: 1.24.0
+  TRAVIS_NODE_VERSION: 8.16.1
+  TRAVIS_NPM_VERSION: 6.4.1
 
 
 before_install:
 before_install:
   - sudo apt-get update -y
   - sudo apt-get update -y

+ 28 - 0
.vscode/launch.json

@@ -0,0 +1,28 @@
+{
+  "version": "0.2.0",
+  "configurations": [
+      {
+          "type": "chrome",
+          "request": "launch",
+          "name": "Meteor: Chrome",
+          "url": "http://localhost:3000",
+          "webRoot": "${workspaceFolder}"
+      },
+      {
+          "type": "node",
+          "request": "launch",
+          "name": "Meteor: Node",
+          "runtimeExecutable": "/home/wekan/.meteor/meteor",
+          "runtimeArgs": ["run", "--inspect-brk=9229"],
+          "outputCapture": "std",
+          "port": 9229,
+          "timeout": 60000
+      }
+  ],
+  "compounds": [
+      {
+          "name": "Meteor: All",
+          "configurations": ["Meteor: Node", "Meteor: Chrome"]
+      }
+  ]
+}

+ 171 - 0
CHANGELOG.md

@@ -1,3 +1,174 @@
+# v3.35 2019-08-29 Wekan release
+
+This release fixes the following bugs:
+
+- [Try to fix Snap](https://github.com/wekan/wekan/commit/71d32c6bc8e6affd345026797ff31e94a0a10d77).
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.34 2019-08-29 Wekan release
+
+This release fixes the following bugs:
+
+- [Snap: Delete all .swp files](https://github.com/wekan/wekan/commit/d5403bbfc53390aeaaf68eb452bc24d88f1e0942).
+  Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.33 2019-08-29 Wekan release
+
+This release adds the following new features:
+
+- [Add card color to calendar event. The color of the calendar event will match the card
+  color](https://github.com/wekan/wekan/pull/2664).
+  Thanks to grmpfhmbl.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.32 2019-08-29 Wekan release
+
+This release fixes the following bugs:
+
+- [Fix Snap adopt-info](https://github.com/wekan/wekan/commit/79d4cd83b1fa83bb814230683b7449ed7f3e1ede).
+  Thanks to [popey at Snapcraft forum](https://forum.snapcraft.io/t/dirty-snap-release/12975/12).
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.31 2019-08-29 Wekan release
+
+This release fixes the following bugs:
+
+- [Try](https://github.com/wekan/wekan/commit/be5f435bc5f500b24bc838ac1dc8bf3bb9a33a22) to
+  [fix adopt-info](https://forum.snapcraft.io/t/dirty-snap-release/12975/8).
+  Thanks to ogra at Snapcraft forum.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.30 2019-08-29 Wekan release
+
+This release fixes the following bugs:
+
+- Snap: [Change version-script to adopt-info](https://github.com/wekan/wekan/commit/0ff5ce8fde6cc9a05a3c8b93e18ebce7282d3a67)
+  to [fix dirty](https://forum.snapcraft.io/t/dirty-snap-release/12975/4).
+  Thanks to popey and daniel at Snapcraft forum.
+- [Delete another phantomjs binary from Snap](https://github.com/wekan/wekan/commit/5084102e6e17fa2cb3bc8c1180745e15379fab5f).
+  Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.29 2019-08-29 Wekan release
+
+This release fixes the following bugs:
+
+- [Fix Snap](https://github.com/wekan/wekan/commit/7761a22bb4e88ad9a5a39ed84e1ff244015c3a58).
+  Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.28 2019-08-29 Wekan release
+
+This release fixes the following bugs:
+
+- Fix broken Sandstorm release by reverting upgrading MongoDB.
+  Thanks to xet7
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.27 2019-08-29 Wekan release
+
+This release adds the following upgrades:
+
+- [Upgrade Node, Mongo, fibers and qs](https://github.com/wekan/wekan/commit/e21c47d3cfe0f228ce5ab394142c6ec6ee090d65).
+  Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.26 2019-08-28 Wekan release
+
+This release adds the following new features:
+
+- [Add devcontainer](https://github.com/wekan/wekan/pull/2659) and some [related fixes](https://github.com/wekan/wekan/pull/2660).
+  Thanks to road42.
+
+and fixes the following bugs:
+
+- [Add missing modules](https://github.com/wekan/wekan/pull/2653).
+  Thanks to GhassenRjab.
+- [Add package-lock.json](https://github.com/wekan/wekan/commit/ad01526124216abcc8b3c8230599c4eda331a86d).
+  Thanks to GhassenRjab and xet7.
+- [Fix last label undefined](https://github.com/wekan/wekan/pull/2657).
+  Thanks to justinr1234.
+- [Default to BIGEVENTS_PATTERN=NONE so that Wekan sends less email notifications](https://github.com/wekan/wekan/commit/0083215ea3955a950d345d44a8663e5b05e8f00f).
+  Thanks to rinnaz and xet7.
+- [Fix app hang when Meteor.user() is null and list spinner is loaded bug](https://github.com/wekan/wekan/pull/2654).
+  Thanks to urakagi.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.25 2019-08-23 Wekan release
+
+This release adds the following new features:
+
+- [Limit card width to fixed size](https://github.com/wekan/wekan/commit/0dd3ff29f2b558bc912b330f178347035dcc46c7).
+  Thanks to xet7.
+
+and fixes the following bugs:
+
+- [Fix](https://github.com/wekan/wekan/pull/2645) [selecting user accounts when importing from Trello](https://github.com/wekan/wekan/issues/2638).
+  Thanks to justrinr1234.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.24 2019-08-22 Wekan release
+
+This release fixes the following bugs:
+
+- [Snap: Delete old MongoDB log, and log to syslog instead, because syslog usually already has
+  log rotation](https://github.com/wekan/wekan/commit/cc792ddd57691bb54972c73b9c861c768fce8c34).
+  Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.23 2019-08-20 Wekan release
+
+This release fixes the following bugs:
+
+- [Fix login did not work](https://github.com/wekan/wekan/commit/b2deab544bfeea49017bec27f92f1269b0b7ec43).
+  Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.22 2019-08-20 Wekan release
+
+This release adds the following new features:
+
+- [Wrap minicard text labels to multiple rows](https://github.com/wekan/wekan/commit/af830812dbbf7d766a754d937308b11373c66e5a).
+  Thanks to xet7.
+
+and fixes the following bugs:
+
+- [Fix: Some users cannot switch views or languages](https://github.com/wekan/wekan/issues/2630).
+  Thanks to xet7 and justinr1234.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.21 2019-08-16 Wekan release
+
+This release adds the following new features:
+
+- [In the filter menu, 1) Turning on "show archive" will request archived lists and show them on the ListView.
+  2) Turning on "hide empty lists" will hide empty lists on the ListView](https://github.com/wekan/wekan/pull/2632).
+  Thanks to urakagi.
+
+and fixes the following bugs:
+
+- [Fix mismatched queries](https://github.com/wekan/wekan/pull/2628).
+  Thanks to justinr1234.
+- [Fix Summernote too wide when in mobile screen](https://github.com/wekan/wekan/issues/2621).
+  Thanks to whowillcare.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
 # v3.20 2019-08-15 Wekan release
 # v3.20 2019-08-15 Wekan release
 
 
 This release fixes the following security issues:
 This release fixes the following security issues:

+ 3 - 3
Dockerfile

@@ -6,7 +6,7 @@ LABEL maintainer="wekan"
 # ENV BUILD_DEPS="paxctl"
 # ENV BUILD_DEPS="paxctl"
 ENV BUILD_DEPS="apt-utils bsdtar gnupg gosu wget curl bzip2 g++ build-essential git ca-certificates" \
 ENV BUILD_DEPS="apt-utils bsdtar gnupg gosu wget curl bzip2 g++ build-essential git ca-certificates" \
     DEBUG=false \
     DEBUG=false \
-    NODE_VERSION=v8.16.0 \
+    NODE_VERSION=v8.16.1 \
     METEOR_RELEASE=1.8.1 \
     METEOR_RELEASE=1.8.1 \
     USE_EDGE=false \
     USE_EDGE=false \
     METEOR_EDGE=1.5-beta.17 \
     METEOR_EDGE=1.5-beta.17 \
@@ -26,7 +26,7 @@ ENV BUILD_DEPS="apt-utils bsdtar gnupg gosu wget curl bzip2 g++ build-essential
     ATTACHMENTS_STORE_PATH="" \
     ATTACHMENTS_STORE_PATH="" \
     MAX_IMAGE_PIXEL="" \
     MAX_IMAGE_PIXEL="" \
     IMAGE_COMPRESS_RATIO="" \
     IMAGE_COMPRESS_RATIO="" \
-    BIGEVENTS_PATTERN="" \
+    BIGEVENTS_PATTERN=NONE \
     NOTIFY_DUE_DAYS_BEFORE_AND_AFTER="" \
     NOTIFY_DUE_DAYS_BEFORE_AND_AFTER="" \
     NOTIFY_DUE_AT_HOUR_OF_DAY="" \
     NOTIFY_DUE_AT_HOUR_OF_DAY="" \
     EMAIL_NOTIFICATION_TIMEOUT=30000 \
     EMAIL_NOTIFICATION_TIMEOUT=30000 \
@@ -178,7 +178,7 @@ RUN \
     mv node-${NODE_VERSION}-${ARCHITECTURE} /opt/nodejs && \
     mv node-${NODE_VERSION}-${ARCHITECTURE} /opt/nodejs && \
     ln -s /opt/nodejs/bin/node /usr/bin/node && \
     ln -s /opt/nodejs/bin/node /usr/bin/node && \
     ln -s /opt/nodejs/bin/npm /usr/bin/npm && \
     ln -s /opt/nodejs/bin/npm /usr/bin/npm && \
-    mkdir -p /opt/nodejs/lib/node_modules/fibers/.node-gyp /root/.node-gyp/8.16.0 /home/wekan/.config && \
+    mkdir -p /opt/nodejs/lib/node_modules/fibers/.node-gyp /root/.node-gyp/8.16.1 /home/wekan/.config && \
     chown wekan --recursive /home/wekan/.config && \
     chown wekan --recursive /home/wekan/.config && \
     \
     \
     #DOES NOT WORK: paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303
     #DOES NOT WORK: paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303

+ 1 - 1
Stackerfile.yml

@@ -1,5 +1,5 @@
 appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
 appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
-appVersion: "v3.20.0"
+appVersion: "v3.35.0"
 files:
 files:
   userUploads:
   userUploads:
     - README.md
     - README.md

+ 1 - 1
client/components/activities/activities.js

@@ -85,7 +85,7 @@ BlazeComponent.extendComponent({
     const lastLabel = Boards.findOne(Session.get('currentBoard')).getLabelById(
     const lastLabel = Boards.findOne(Session.get('currentBoard')).getLabelById(
       lastLabelId,
       lastLabelId,
     );
     );
-    if (lastLabel.name === undefined || lastLabel.name === '') {
+    if (lastLabel && (lastLabel.name === undefined || lastLabel.name === '')) {
       return lastLabel.color;
       return lastLabel.color;
     } else {
     } else {
       return lastLabel.name;
       return lastLabel.name;

+ 1 - 0
client/components/boards/boardBody.js

@@ -326,6 +326,7 @@ BlazeComponent.extendComponent({
                 slug: currentBoard.slug,
                 slug: currentBoard.slug,
                 cardId: card._id,
                 cardId: card._id,
               }),
               }),
+              className: card.color ? `calendar-event-${card.color}` : null,
             });
             });
           });
           });
         callback(events);
         callback(events);

+ 78 - 0
client/components/boards/boardBody.styl

@@ -53,3 +53,81 @@ position()
         padding: 0 0px 0px 0
         padding: 0 0px 0px 0
         overflow-x: hidden
         overflow-x: hidden
         overflow-y: auto
         overflow-y: auto
+
+calendar-event-color(background, borderColor, color...)
+  background: background !important
+  border-color: borderColor
+  if color
+    color: color !important //overwrite text for better visibility
+
+.calendar-event-green
+  calendar-event-color(#3cb500, #2a8000, #ffffff) //White text for better visibility
+
+.calendar-event-yellow
+  calendar-event-color(#fad900, #c7ac00, #000) //Black text for better visibility
+
+.calendar-event-orange
+  calendar-event-color(#ff9f19, #cc7c14, #000) //Black text for better visibility
+
+.calendar-event-red
+  calendar-event-color(#eb4646, #b83737, #ffffff) //White text for better visibility
+
+.calendar-event-purple
+  calendar-event-color(#a632db, #7d26a6, #ffffff) //White text for better visibility
+
+.calendar-event-blue
+  calendar-event-color(#0079bf, #005a8a, #ffffff) //White text for better visibility
+
+.calendar-event-pink
+  calendar-event-color(#ff78cb, #cc62a3, #000) //Black text for better visibility
+
+.calendar-event-sky
+  calendar-event-color(#00c2e0, #0094ab, #ffffff) //White text for better visibility
+
+.calendar-event-black
+  calendar-event-color(#4d4d4d, #1a1a1a, #ffffff) //White text for better visibility
+
+.calendar-event-lime
+  calendar-event-color(#51e898, #3eb375, #000) //Black text for better visibility
+
+.calendar-event-silver
+  calendar-event-color(#c0c0c0, #8c8c8c, #000) //Black text for better visibility
+
+.calendar-event-peachpuff
+  calendar-event-color(#ffdab9, #ccaf95, #000) //Black text for better visibility
+
+.calendar-event-crimson
+  calendar-event-color(#dc143c, #a8112f, #ffffff) //White text for better visibility
+
+.calendar-event-plum
+  calendar-event-color(#dda0dd, #a87ba8, #000) //Black text for better visibility
+
+.calendar-event-darkgreen
+  calendar-event-color(#006400, #003000, #ffffff) //White text for better visibility
+
+.calendar-event-slateblue
+  calendar-event-color(#6a5acd, #4f4399, #ffffff) //White text for better visibility
+
+.calendar-event-magenta
+  calendar-event-color(#ff00ff, #cc00cc, #ffffff) //White text for better visibility
+
+.calendar-event-gold
+  calendar-event-color(#ffd700, #ccaa00, #000) //Black text for better visibility
+
+.calendar-event-navy
+  calendar-event-color(#000080, #000033, #ffffff) //White text for better visibility
+
+.calendar-event-gray
+  calendar-event-color(#808080, #333333, #ffffff) //White text for better visibility
+
+.calendar-event-saddlebrown
+  calendar-event-color(#8b4513, #572b0c, #ffffff) //White text for better visibility
+
+.calendar-event-paleturquoise
+  calendar-event-color(#afeeee, #8ababa, #000) //Black text for better visibility
+
+.calendar-event-mistyrose
+  calendar-event-color(#ffe4e1, #ccb8b6, #000) //Black text for better visibility
+
+.calendar-event-indigo
+  calendar-event-color(#4b0082, #2b004d, #ffffff) //White text for better visibility

+ 1 - 0
client/components/boards/boardColors.styl

@@ -241,6 +241,7 @@ setBoardColor(color)
             background-color #ffffff !important
             background-color #ffffff !important
             padding 15px !important
             padding 15px !important
             border 1px solid #000000 !important
             border 1px solid #000000 !important
+            word-wrap: break-word
 
 
   // When card has comment, emphasis on minicard:
   // When card has comment, emphasis on minicard:
   // bigger red comment icon and number of comments,
   // bigger red comment icon and number of comments,

+ 3 - 1
client/components/cards/cardDetails.styl

@@ -99,7 +99,9 @@
       &.card-details-item-end,
       &.card-details-item-end,
       &.card-details-item-customfield,
       &.card-details-item-customfield,
       &.card-details-item-name
       &.card-details-item-name
-        max-width: 50%
+        display: block
+        word-wrap: break-word
+        max-width: 48%
         flex-grow: 1
         flex-grow: 1
 
 
   .card-details-item-title
   .card-details-item-title

+ 3 - 0
client/components/cards/checklists.styl

@@ -128,6 +128,9 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
     & .viewer
     & .viewer
       p
       p
         margin-bottom: 2px
         margin-bottom: 2px
+        display: block
+        word-wrap: break-word
+        max-width: 420px
 
 
 .js-delete-checklist-item
 .js-delete-checklist-item
   margin: 0 0 0.5em 1.33em
   margin: 0 0 0.5em 1.33em

+ 2 - 1
client/components/cards/labels.styl

@@ -10,9 +10,10 @@
   margin-right: 4px
   margin-right: 4px
   margin-bottom: 5px
   margin-bottom: 5px
   padding: 3px 8px
   padding: 3px 8px
-  max-width: 100%
+  max-width: 210px
   min-width: 8px
   min-width: 8px
   overflow: ellipsis
   overflow: ellipsis
+  word-wrap: break-word
   height: 18px
   height: 18px
   vertical-align: bottom
   vertical-align: bottom
 
 

+ 9 - 3
client/components/cards/minicard.styl

@@ -81,6 +81,7 @@
   .minicard-labels
   .minicard-labels
     float: right
     float: right
     display: flex
     display: flex
+    flex-wrap: wrap
 
 
     .minicard-label
     .minicard-label
       width: 11px
       width: 11px
@@ -92,8 +93,11 @@
   .minicard-custom-field
   .minicard-custom-field
     display:flex;
     display:flex;
   .minicard-custom-field-item
   .minicard-custom-field-item
-    max-width:50%;
-    flex-grow:1;
+    flex-grow: 1
+    display: block
+    word-wrap: break-word
+    max-width: 100px
+    margin-right: 4px
   .handle
   .handle
     width: 20px;
     width: 20px;
     height: 20px;
     height: 20px;
@@ -111,7 +115,9 @@
     p:last-child
     p:last-child
       margin-bottom: 0
       margin-bottom: 0
     .viewer
     .viewer
-      display: inline-block
+      display: block
+      word-wrap: break-word
+      max-width: 230px
   .dates
   .dates
     display: flex;
     display: flex;
     flex-direction: row;
     flex-direction: row;

+ 10 - 12
client/components/import/import.js

@@ -211,22 +211,20 @@ BlazeComponent.extendComponent({
     this.parentComponent().nextStep();
     this.parentComponent().nextStep();
   },
   },
 
 
-  onMapMember(evt) {
-    const memberToMap = this.currentData();
-    if (memberToMap.wekan) {
-      // todo xxx ask for confirmation?
-      this.unmapMember(memberToMap.id);
-    } else {
-      this.setSelectedMember(memberToMap.id);
-      Popup.open('importMapMembersAdd')(evt);
-    }
-  },
-
   events() {
   events() {
     return [
     return [
       {
       {
         submit: this.onSubmit,
         submit: this.onSubmit,
-        'click .js-select-member': this.onMapMember,
+        'click .js-select-member'(evt) {
+          const memberToMap = this.currentData();
+          if (memberToMap.wekan) {
+            // todo xxx ask for confirmation?
+            this.unmapMember(memberToMap.id);
+          } else {
+            this.setSelectedMember(memberToMap.id);
+            Popup.open('importMapMembersAdd')(evt);
+          }
+        },
       },
       },
     ];
     ];
   },
   },

+ 25 - 6
client/components/lists/listBody.js

@@ -701,12 +701,31 @@ BlazeComponent.extendComponent({
     this.listId = this.parentComponent().data()._id;
     this.listId = this.parentComponent().data()._id;
     this.swimlaneId = '';
     this.swimlaneId = '';
 
 
-    const boardView = (Meteor.user().profile || {}).boardView;
-    if (boardView === 'board-view-swimlanes')
-      this.swimlaneId = this.parentComponent()
-        .parentComponent()
-        .parentComponent()
-        .data()._id;
+    const isSandstorm =
+      Meteor.settings &&
+      Meteor.settings.public &&
+      Meteor.settings.public.sandstorm;
+
+    if (isSandstorm) {
+      const user = Meteor.user();
+      if (user) {
+        const boardView = (Meteor.user().profile || {}).boardView;
+        if (boardView === 'board-view-swimlanes') {
+          this.swimlaneId = this.parentComponent()
+            .parentComponent()
+            .parentComponent()
+            .data()._id;
+        }
+      }
+    } else {
+      const boardView = (Meteor.user().profile || {}).boardView;
+      if (boardView === 'board-view-swimlanes') {
+        this.swimlaneId = this.parentComponent()
+          .parentComponent()
+          .parentComponent()
+          .data()._id;
+      }
+    }
   },
   },
 
 
   onRendered() {
   onRendered() {

+ 2 - 0
client/components/main/layouts.styl

@@ -378,6 +378,8 @@ a
 
 
 .viewer
 .viewer
   min-height: 18px
   min-height: 18px
+  display: block
+  word-wrap: break-word
 
 
   ol
   ol
     list-style-type: decimal
     list-style-type: decimal

+ 2 - 0
client/components/sidebar/sidebarArchives.js

@@ -1,3 +1,4 @@
+archivedRequested = false;
 const subManager = new SubsManager();
 const subManager = new SubsManager();
 
 
 BlazeComponent.extendComponent({
 BlazeComponent.extendComponent({
@@ -12,6 +13,7 @@ BlazeComponent.extendComponent({
       const currentBoardId = Session.get('currentBoard');
       const currentBoardId = Session.get('currentBoard');
       if (!currentBoardId) return;
       if (!currentBoardId) return;
       const handle = subManager.subscribe('board', currentBoardId, true);
       const handle = subManager.subscribe('board', currentBoardId, true);
+      archivedRequested = true;
       Tracker.nonreactive(() => {
       Tracker.nonreactive(() => {
         Tracker.autorun(() => {
         Tracker.autorun(() => {
           this.isArchiveReady.set(handle.ready());
           this.isArchiveReady.set(handle.ready());

+ 16 - 0
client/components/sidebar/sidebarFilters.jade

@@ -56,6 +56,22 @@ template(name="filterSidebar")
           if Filter.customFields.isSelected _id
           if Filter.customFields.isSelected _id
             i.fa.fa-check
             i.fa.fa-check
   hr
   hr
+  ul.sidebar-list
+    li(class="{{#if Filter.archive.isSelected _id}}active{{/if}}")
+      a.name.js-toggle-archive-filter
+        span.sidebar-list-item-description
+          | {{_ 'filter-show-archive'}}
+        if Filter.archive.isSelected _id
+          i.fa.fa-check
+  hr
+  ul.sidebar-list
+    li(class="{{#if Filter.hideEmpty.isSelected _id}}active{{/if}}")
+      a.name.js-toggle-hideEmpty-filter
+        span.sidebar-list-item-description
+          | {{_ 'filter-hide-empty'}}
+        if Filter.hideEmpty.isSelected _id
+          i.fa.fa-check
+  hr
   span {{_ 'advanced-filter-label'}}
   span {{_ 'advanced-filter-label'}}
   input.js-field-advanced-filter(type="text")
   input.js-field-advanced-filter(type="text")
   span {{_ 'advanced-filter-description'}}
   span {{_ 'advanced-filter-description'}}

+ 19 - 0
client/components/sidebar/sidebarFilters.js

@@ -1,3 +1,5 @@
+const subManager = new SubsManager();
+
 BlazeComponent.extendComponent({
 BlazeComponent.extendComponent({
   events() {
   events() {
     return [
     return [
@@ -12,6 +14,23 @@ BlazeComponent.extendComponent({
           Filter.members.toggle(this.currentData()._id);
           Filter.members.toggle(this.currentData()._id);
           Filter.resetExceptions();
           Filter.resetExceptions();
         },
         },
+        'click .js-toggle-archive-filter'(evt) {
+          evt.preventDefault();
+          Filter.archive.toggle(this.currentData()._id);
+          Filter.resetExceptions();
+          const currentBoardId = Session.get('currentBoard');
+          if (!currentBoardId) return;
+          subManager.subscribe(
+            'board',
+            currentBoardId,
+            Filter.archive.isSelected(),
+          );
+        },
+        'click .js-toggle-hideEmpty-filter'(evt) {
+          evt.preventDefault();
+          Filter.hideEmpty.toggle(this.currentData()._id);
+          Filter.resetExceptions();
+        },
         'click .js-toggle-custom-fields-filter'(evt) {
         'click .js-toggle-custom-fields-filter'(evt) {
           evt.preventDefault();
           evt.preventDefault();
           Filter.customFields.toggle(this.currentData()._id);
           Filter.customFields.toggle(this.currentData()._id);

+ 2 - 1
client/components/swimlanes/swimlanes.jade

@@ -33,7 +33,8 @@ template(name="listsGroup")
             +addListForm
             +addListForm
     else
     else
       each lists
       each lists
-        +list(this)
+        if visible this
+          +list(this)
         if currentCardIsInThisList _id null
         if currentCardIsInThisList _id null
           +cardDetails(currentCard)
           +cardDetails(currentCard)
       if currentUser.isBoardMember
       if currentUser.isBoardMember

+ 18 - 0
client/components/swimlanes/swimlanes.js

@@ -246,6 +246,24 @@ BlazeComponent.extendComponent({
   currentCardIsInThisList(listId, swimlaneId) {
   currentCardIsInThisList(listId, swimlaneId) {
     return currentCardIsInThisList(listId, swimlaneId);
     return currentCardIsInThisList(listId, swimlaneId);
   },
   },
+  visible(list) {
+    if (list.archived) {
+      // Show archived list only when filter archive is on or archive is selected
+      if (!(Filter.archive.isSelected() || archivedRequested)) {
+        return false;
+      }
+    }
+    if (Filter.hideEmpty.isSelected()) {
+      const swimlaneId = this.parentComponent()
+        .parentComponent()
+        .data()._id;
+      const cards = list.cards(swimlaneId);
+      if (cards.count() === 0) {
+        return false;
+      }
+    }
+    return true;
+  },
   onRendered() {
   onRendered() {
     const boardComponent = this.parentComponent();
     const boardComponent = this.parentComponent();
     const $listsDom = this.$('.js-lists');
     const $listsDom = this.$('.js-lists');

+ 3 - 1
client/lib/filter.js

@@ -451,10 +451,12 @@ Filter = {
   // before changing the schema.
   // before changing the schema.
   labelIds: new SetFilter(),
   labelIds: new SetFilter(),
   members: new SetFilter(),
   members: new SetFilter(),
+  archive: new SetFilter(),
+  hideEmpty: new SetFilter(),
   customFields: new SetFilter('_id'),
   customFields: new SetFilter('_id'),
   advanced: new AdvancedFilter(),
   advanced: new AdvancedFilter(),
 
 
-  _fields: ['labelIds', 'members', 'customFields'],
+  _fields: ['labelIds', 'members', 'archive', 'hideEmpty', 'customFields'],
 
 
   // We don't filter cards that have been added after the last filter change. To
   // We don't filter cards that have been added after the last filter change. To
   // implement this we keep the id of these cards in this `_exceptions` fields
   // implement this we keep the id of these cards in this `_exceptions` fields

+ 1 - 1
client/lib/popup.js

@@ -67,7 +67,7 @@ window.Popup = new (class {
         title: self._getTitle(popupName),
         title: self._getTitle(popupName),
         depth: self._stack.length,
         depth: self._stack.length,
         offset: self._getOffset(openerElement),
         offset: self._getOffset(openerElement),
-        dataContext: (this.currentData && this.currentData()) || this,
+        dataContext: (this && this.currentData && this.currentData()) || this,
       });
       });
 
 
       // If there are no popup currently opened we use the Blaze API to render
       // If there are no popup currently opened we use the Blaze API to render

+ 4 - 4
docker-compose.yml

@@ -93,7 +93,7 @@ services:
     #-------------------------------------------------------------------------------------
     #-------------------------------------------------------------------------------------
     # ==== MONGODB AND METEOR VERSION ====
     # ==== MONGODB AND METEOR VERSION ====
     # a) For Wekan Meteor 1.8.x version at master branch, use mongo 4.x
     # a) For Wekan Meteor 1.8.x version at master branch, use mongo 4.x
-    image: mongo:4.0.11
+    image: mongo:4.0.12
     # b) For Wekan Meteor 1.6.x version at devel branch.
     # b) For Wekan Meteor 1.6.x version at devel branch.
     # Only for Snap and Sandstorm while they are not upgraded yet to Meteor 1.8.x
     # Only for Snap and Sandstorm while they are not upgraded yet to Meteor 1.8.x
     #image: mongo:3.2.21
     #image: mongo:3.2.21
@@ -251,19 +251,19 @@ services:
       #---------------------------------------------------------------
       #---------------------------------------------------------------
       # ==== BIGEVENTS DUE ETC NOTIFICATIONS =====
       # ==== BIGEVENTS DUE ETC NOTIFICATIONS =====
       # https://github.com/wekan/wekan/pull/2541
       # https://github.com/wekan/wekan/pull/2541
-      # Introduced a system env var BIGEVENTS_PATTERN default as "due",
+      # Introduced a system env var BIGEVENTS_PATTERN default as "NONE",
       # so any activityType matches the pattern, system will send out
       # so any activityType matches the pattern, system will send out
       # notifications to all board members no matter they are watching
       # notifications to all board members no matter they are watching
       # or tracking the board or not. Owner of the wekan server can
       # or tracking the board or not. Owner of the wekan server can
       # disable the feature by setting this variable to "NONE" or
       # disable the feature by setting this variable to "NONE" or
       # change the pattern to any valid regex. i.e. '|' delimited
       # change the pattern to any valid regex. i.e. '|' delimited
       # activityType names.
       # activityType names.
-      # a) Default
+      # a) Example
       #- BIGEVENTS_PATTERN=due
       #- BIGEVENTS_PATTERN=due
       # b) All
       # b) All
       #- BIGEVENTS_PATTERN=received|start|due|end
       #- BIGEVENTS_PATTERN=received|start|due|end
       # c) Disabled
       # c) Disabled
-      #- BIGEVENTS_PATTERN=NONE
+      - BIGEVENTS_PATTERN=NONE
       #---------------------------------------------------------------
       #---------------------------------------------------------------
       # ==== EMAIL DUE DATE NOTIFICATION =====
       # ==== EMAIL DUE DATE NOTIFICATION =====
       # https://github.com/wekan/wekan/pull/2536
       # https://github.com/wekan/wekan/pull/2536

+ 2 - 0
i18n/ar.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "لا يوجد ملصق",
   "filter-no-label": "لا يوجد ملصق",
   "filter-no-member": "ليس هناك أي عضو",
   "filter-no-member": "ليس هناك أي عضو",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "التصفية تشتغل",
   "filter-on": "التصفية تشتغل",
   "filter-on-desc": "أنت بصدد تصفية بطاقات هذه اللوحة. اضغط هنا لتعديل التصفية.",
   "filter-on-desc": "أنت بصدد تصفية بطاقات هذه اللوحة. اضغط هنا لتعديل التصفية.",
   "filter-to-selection": "تصفية بالتحديد",
   "filter-to-selection": "تصفية بالتحديد",

+ 2 - 0
i18n/bg.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "без етикет",
   "filter-no-label": "без етикет",
   "filter-no-member": "без член",
   "filter-no-member": "без член",
   "filter-no-custom-fields": "Няма Собствени полета",
   "filter-no-custom-fields": "Няма Собствени полета",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Има приложени филтри",
   "filter-on": "Има приложени филтри",
   "filter-on-desc": "В момента филтрирате картите в това табло. Моля, натиснете тук, за да промените филтъра.",
   "filter-on-desc": "В момента филтрирате картите в това табло. Моля, натиснете тук, за да промените филтъра.",
   "filter-to-selection": "Филтрирай избраните",
   "filter-to-selection": "Филтрирай избраните",

+ 2 - 0
i18n/br.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "No label",
   "filter-no-label": "No label",
   "filter-no-member": "No member",
   "filter-no-member": "No member",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filter is on",
   "filter-on": "Filter is on",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-to-selection": "Filter to selection",
   "filter-to-selection": "Filter to selection",

+ 2 - 0
i18n/ca.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "Sense etiqueta",
   "filter-no-label": "Sense etiqueta",
   "filter-no-member": "Sense membres",
   "filter-no-member": "Sense membres",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filtra per",
   "filter-on": "Filtra per",
   "filter-on-desc": "Estau filtrant fitxes en aquest tauler. Feu clic aquí per editar el filtre.",
   "filter-on-desc": "Estau filtrant fitxes en aquest tauler. Feu clic aquí per editar el filtre.",
   "filter-to-selection": "Filtra selecció",
   "filter-to-selection": "Filtra selecció",

+ 2 - 0
i18n/cs.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "Žádný štítek",
   "filter-no-label": "Žádný štítek",
   "filter-no-member": "Žádný člen",
   "filter-no-member": "Žádný člen",
   "filter-no-custom-fields": "Žádné vlastní pole",
   "filter-no-custom-fields": "Žádné vlastní pole",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filtr je zapnut",
   "filter-on": "Filtr je zapnut",
   "filter-on-desc": "Filtrujete karty tohoto tabla. Pro úpravu filtru klikni sem.",
   "filter-on-desc": "Filtrujete karty tohoto tabla. Pro úpravu filtru klikni sem.",
   "filter-to-selection": "Filtrovat výběr",
   "filter-to-selection": "Filtrovat výběr",

+ 2 - 0
i18n/da.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "No label",
   "filter-no-label": "No label",
   "filter-no-member": "No member",
   "filter-no-member": "No member",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filter is on",
   "filter-on": "Filter is on",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-to-selection": "Filter to selection",
   "filter-to-selection": "Filter to selection",

+ 2 - 0
i18n/de.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "Kein Label",
   "filter-no-label": "Kein Label",
   "filter-no-member": "Kein Mitglied",
   "filter-no-member": "Kein Mitglied",
   "filter-no-custom-fields": "Keine benutzerdefinierten Felder",
   "filter-no-custom-fields": "Keine benutzerdefinierten Felder",
+  "filter-show-archive": "Archivierte Listen anzeigen",
+  "filter-hide-empty": "Leere Listen verstecken",
   "filter-on": "Filter ist aktiv",
   "filter-on": "Filter ist aktiv",
   "filter-on-desc": "Sie filtern die Karten in diesem Board. Klicken Sie, um den Filter zu bearbeiten.",
   "filter-on-desc": "Sie filtern die Karten in diesem Board. Klicken Sie, um den Filter zu bearbeiten.",
   "filter-to-selection": "Ergebnisse auswählen",
   "filter-to-selection": "Ergebnisse auswählen",

+ 110 - 108
i18n/el.i18n.json

@@ -1,6 +1,6 @@
 {
 {
-  "accept": "Accept",
-  "act-activity-notify": "Activity Notification",
+  "accept": "Αποδοχή",
+  "act-activity-notify": "Ειδοποίηση δραστηριότητας",
   "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
   "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
   "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
   "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
   "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
   "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
@@ -42,11 +42,11 @@
   "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
   "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
   "act-withBoardTitle": "__board__",
   "act-withBoardTitle": "__board__",
   "act-withCardTitle": "[__board__] __card__",
   "act-withCardTitle": "[__board__] __card__",
-  "actions": "Actions",
+  "actions": "Ενέργειες",
   "activities": "Activities",
   "activities": "Activities",
-  "activity": "Activity",
+  "activity": "Δραστηριότητα",
   "activity-added": "added %s to %s",
   "activity-added": "added %s to %s",
-  "activity-archived": "%s moved to Archive",
+  "activity-archived": "%s μετακινήθηκε στο Αρχείο",
   "activity-attached": "attached %s to %s",
   "activity-attached": "attached %s to %s",
   "activity-created": "created %s",
   "activity-created": "created %s",
   "activity-customfield-created": "created custom field %s",
   "activity-customfield-created": "created custom field %s",
@@ -98,49 +98,49 @@
   "and-n-other-card_plural": "And __count__ other cards",
   "and-n-other-card_plural": "And __count__ other cards",
   "apply": "Εφαρμογή",
   "apply": "Εφαρμογή",
   "app-is-offline": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.",
   "app-is-offline": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.",
-  "archive": "Move to Archive",
-  "archive-all": "Move All to Archive",
-  "archive-board": "Move Board to Archive",
-  "archive-card": "Move Card to Archive",
-  "archive-list": "Move List to Archive",
+  "archive": "Μετακίνηση στο Αρχείο",
+  "archive-all": "Μετακίνηση Όλων στο Αρχείο",
+  "archive-board": "Μετακίνηση Πίνακα στο Αρχείο",
+  "archive-card": "Μετακίνηση Κάρτας στο Αρχείο",
+  "archive-list": "Μετακίνηση Λίστας στο Αρχείο",
   "archive-swimlane": "Move Swimlane to Archive",
   "archive-swimlane": "Move Swimlane to Archive",
-  "archive-selection": "Move selection to Archive",
-  "archiveBoardPopup-title": "Move Board to Archive?",
-  "archived-items": "Archive",
-  "archived-boards": "Boards in Archive",
-  "restore-board": "Restore Board",
-  "no-archived-boards": "No Boards in Archive.",
-  "archives": "Archive",
-  "template": "Template",
-  "templates": "Templates",
-  "assign-member": "Assign member",
+  "archive-selection": "Μετακίνηση επιλογής στο Αρχείο",
+  "archiveBoardPopup-title": "Να μετακινηθεί ο Πίνακας στο Αρχείο;",
+  "archived-items": "Αρχείο",
+  "archived-boards": "Πίνακες στο Αρχείο",
+  "restore-board": "Επαναφορά Πίνακα",
+  "no-archived-boards": "Δεν υπάρχουν Πίνακες στο Αρχείο.",
+  "archives": "Αρχείο",
+  "template": "Πρότυπο",
+  "templates": "Πρότυπα",
+  "assign-member": "Ανάθεση μέλους",
   "attached": "attached",
   "attached": "attached",
-  "attachment": "Attachment",
+  "attachment": "Συνημμένο",
   "attachment-delete-pop": "Deleting an attachment is permanent. There is no undo.",
   "attachment-delete-pop": "Deleting an attachment is permanent. There is no undo.",
-  "attachmentDeletePopup-title": "Delete Attachment?",
-  "attachments": "Attachments",
+  "attachmentDeletePopup-title": "Διαγραφή Συννημένου;",
+  "attachments": "Συννημένα",
   "auto-watch": "Automatically watch boards when they are created",
   "auto-watch": "Automatically watch boards when they are created",
   "avatar-too-big": "The avatar is too large (70KB max)",
   "avatar-too-big": "The avatar is too large (70KB max)",
   "back": "Πίσω",
   "back": "Πίσω",
   "board-change-color": "Αλλαγή χρώματος",
   "board-change-color": "Αλλαγή χρώματος",
   "board-nb-stars": "%s stars",
   "board-nb-stars": "%s stars",
-  "board-not-found": "Board not found",
+  "board-not-found": "Ο πίνακας δε βρέθηκε",
   "board-private-info": "This board will be <strong>private</strong>.",
   "board-private-info": "This board will be <strong>private</strong>.",
   "board-public-info": "This board will be <strong>public</strong>.",
   "board-public-info": "This board will be <strong>public</strong>.",
-  "boardChangeColorPopup-title": "Change Board Background",
-  "boardChangeTitlePopup-title": "Rename Board",
-  "boardChangeVisibilityPopup-title": "Change Visibility",
+  "boardChangeColorPopup-title": "Αλλαγή Φόντου Πίνακα",
+  "boardChangeTitlePopup-title": "Μετονομασία Πίνακα",
+  "boardChangeVisibilityPopup-title": "Αλλαγή Ορατότητας",
   "boardChangeWatchPopup-title": "Change Watch",
   "boardChangeWatchPopup-title": "Change Watch",
-  "boardMenuPopup-title": "Board Settings",
-  "boards": "Boards",
+  "boardMenuPopup-title": "Ρυθμίσεις Πίνακα",
+  "boards": "Πίνακες",
   "board-view": "Board View",
   "board-view": "Board View",
-  "board-view-cal": "Calendar",
+  "board-view-cal": "Ημερολόγιο",
   "board-view-swimlanes": "Swimlanes",
   "board-view-swimlanes": "Swimlanes",
   "board-view-lists": "Λίστες",
   "board-view-lists": "Λίστες",
   "bucket-example": "Like “Bucket List” for example",
   "bucket-example": "Like “Bucket List” for example",
   "cancel": "Ακύρωση",
   "cancel": "Ακύρωση",
-  "card-archived": "This card is moved to Archive.",
-  "board-archived": "This board is moved to Archive.",
+  "card-archived": "Αυτή η κάρτα μετακινήθηκε στο Αρχείο.",
+  "board-archived": "Αυτός ο πίνακας μετακινήθηκε στο Αρχείο.",
   "card-comments-title": "This card has %s comment.",
   "card-comments-title": "This card has %s comment.",
   "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
   "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
   "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
   "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
@@ -191,12 +191,12 @@
   "close-board-pop": "You will be able to restore the board by clicking the “Archive” button from the home header.",
   "close-board-pop": "You will be able to restore the board by clicking the “Archive” button from the home header.",
   "color-black": "μαύρο",
   "color-black": "μαύρο",
   "color-blue": "μπλε",
   "color-blue": "μπλε",
-  "color-crimson": "crimson",
-  "color-darkgreen": "darkgreen",
-  "color-gold": "gold",
-  "color-gray": "gray",
+  "color-crimson": "βυσσινί",
+  "color-darkgreen": "σκούρο πράσινο",
+  "color-gold": "χρυσό",
+  "color-gray": "γκρι",
   "color-green": "πράσινο",
   "color-green": "πράσινο",
-  "color-indigo": "indigo",
+  "color-indigo": "λουλάκι",
   "color-lime": "λάιμ",
   "color-lime": "λάιμ",
   "color-magenta": "magenta",
   "color-magenta": "magenta",
   "color-mistyrose": "mistyrose",
   "color-mistyrose": "mistyrose",
@@ -209,17 +209,17 @@
   "color-purple": "μωβ",
   "color-purple": "μωβ",
   "color-red": "κόκκινο",
   "color-red": "κόκκινο",
   "color-saddlebrown": "saddlebrown",
   "color-saddlebrown": "saddlebrown",
-  "color-silver": "silver",
+  "color-silver": "ασημί",
   "color-sky": "ουρανός",
   "color-sky": "ουρανός",
   "color-slateblue": "slateblue",
   "color-slateblue": "slateblue",
-  "color-white": "white",
+  "color-white": "λευκό",
   "color-yellow": "κίτρινο",
   "color-yellow": "κίτρινο",
   "unset-color": "Unset",
   "unset-color": "Unset",
   "comment": "Comment",
   "comment": "Comment",
   "comment-placeholder": "Write Comment",
   "comment-placeholder": "Write Comment",
   "comment-only": "Comment only",
   "comment-only": "Comment only",
   "comment-only-desc": "Can comment on cards only.",
   "comment-only-desc": "Can comment on cards only.",
-  "no-comments": "No comments",
+  "no-comments": "Χωρίς σχόλια",
   "no-comments-desc": "Can not see comments and activities.",
   "no-comments-desc": "Can not see comments and activities.",
   "computer": "Υπολογιστής",
   "computer": "Υπολογιστής",
   "confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?",
   "confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?",
@@ -233,10 +233,10 @@
   "copyChecklistToManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
   "copyChecklistToManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
   "create": "Δημιουργία",
   "create": "Δημιουργία",
   "createBoardPopup-title": "Create Board",
   "createBoardPopup-title": "Create Board",
-  "chooseBoardSourcePopup-title": "Import board",
-  "createLabelPopup-title": "Create Label",
-  "createCustomField": "Create Field",
-  "createCustomFieldPopup-title": "Create Field",
+  "chooseBoardSourcePopup-title": "Εισαγωγή πίνακα",
+  "createLabelPopup-title": "Δημιουργία Ετικέτας",
+  "createCustomField": "Δημιουργία Πεδίου",
+  "createCustomFieldPopup-title": "Δημιουργία Πεδίου",
   "current": "current",
   "current": "current",
   "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
   "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
   "custom-field-checkbox": "Checkbox",
   "custom-field-checkbox": "Checkbox",
@@ -246,40 +246,40 @@
   "custom-field-dropdown-options": "List Options",
   "custom-field-dropdown-options": "List Options",
   "custom-field-dropdown-options-placeholder": "Press enter to add more options",
   "custom-field-dropdown-options-placeholder": "Press enter to add more options",
   "custom-field-dropdown-unknown": "(unknown)",
   "custom-field-dropdown-unknown": "(unknown)",
-  "custom-field-number": "Number",
-  "custom-field-text": "Text",
+  "custom-field-number": "Αριθμός",
+  "custom-field-text": "Κείμενο",
   "custom-fields": "Custom Fields",
   "custom-fields": "Custom Fields",
   "date": "Ημερομηνία",
   "date": "Ημερομηνία",
   "decline": "Decline",
   "decline": "Decline",
   "default-avatar": "Default avatar",
   "default-avatar": "Default avatar",
   "delete": "Διαγραφή",
   "delete": "Διαγραφή",
   "deleteCustomFieldPopup-title": "Delete Custom Field?",
   "deleteCustomFieldPopup-title": "Delete Custom Field?",
-  "deleteLabelPopup-title": "Delete Label?",
-  "description": "Description",
+  "deleteLabelPopup-title": "Διαγραφή Ετικέτας;",
+  "description": "Περιγραφή",
   "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
   "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
   "disambiguateMultiMemberPopup-title": "Disambiguate Member Action",
   "disambiguateMultiMemberPopup-title": "Disambiguate Member Action",
   "discard": "Απόρριψη",
   "discard": "Απόρριψη",
   "done": "Done",
   "done": "Done",
   "download": "Download",
   "download": "Download",
-  "edit": "Edit",
+  "edit": "Επεξεργασία",
   "edit-avatar": "Change Avatar",
   "edit-avatar": "Change Avatar",
-  "edit-profile": "Edit Profile",
+  "edit-profile": "Επεξεργασία Προφίλ",
   "edit-wip-limit": "Edit WIP Limit",
   "edit-wip-limit": "Edit WIP Limit",
   "soft-wip-limit": "Soft WIP Limit",
   "soft-wip-limit": "Soft WIP Limit",
   "editCardStartDatePopup-title": "Change start date",
   "editCardStartDatePopup-title": "Change start date",
   "editCardDueDatePopup-title": "Change due date",
   "editCardDueDatePopup-title": "Change due date",
-  "editCustomFieldPopup-title": "Edit Field",
+  "editCustomFieldPopup-title": "Επεξεργασία Πεδίου",
   "editCardSpentTimePopup-title": "Change spent time",
   "editCardSpentTimePopup-title": "Change spent time",
-  "editLabelPopup-title": "Change Label",
-  "editNotificationPopup-title": "Edit Notification",
-  "editProfilePopup-title": "Edit Profile",
+  "editLabelPopup-title": "Αλλαγή Ετικέτας",
+  "editNotificationPopup-title": "Επεξεργασία Ειδοποίησης",
+  "editProfilePopup-title": "Επεξεργασία Προφίλ",
   "email": "Email",
   "email": "Email",
   "email-enrollAccount-subject": "An account created for you on __siteName__",
   "email-enrollAccount-subject": "An account created for you on __siteName__",
   "email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.",
   "email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.",
   "email-fail": "Sending email failed",
   "email-fail": "Sending email failed",
   "email-fail-text": "Error trying to send email",
   "email-fail-text": "Error trying to send email",
   "email-invalid": "Invalid email",
   "email-invalid": "Invalid email",
-  "email-invite": "Invite via Email",
+  "email-invite": "Πρόσκληση μέσω Email",
   "email-invite-subject": "__inviter__ sent you an invitation",
   "email-invite-subject": "__inviter__ sent you an invitation",
   "email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.",
   "email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.",
   "email-resetPassword-subject": "Reset your password on __siteName__",
   "email-resetPassword-subject": "Reset your password on __siteName__",
@@ -293,19 +293,21 @@
   "error-board-notAMember": "You need to be a member of this board to do that",
   "error-board-notAMember": "You need to be a member of this board to do that",
   "error-json-malformed": "Το κείμενο δεν είναι έγκυρο JSON",
   "error-json-malformed": "Το κείμενο δεν είναι έγκυρο JSON",
   "error-json-schema": "Your JSON data does not include the proper information in the correct format",
   "error-json-schema": "Your JSON data does not include the proper information in the correct format",
-  "error-list-doesNotExist": "This list does not exist",
-  "error-user-doesNotExist": "This user does not exist",
+  "error-list-doesNotExist": "Η λίστα δεν υπάρχει",
+  "error-user-doesNotExist": "Ο χρήστης δεν υπάρχει",
   "error-user-notAllowSelf": "You can not invite yourself",
   "error-user-notAllowSelf": "You can not invite yourself",
-  "error-user-notCreated": "This user is not created",
+  "error-user-notCreated": "Ο χρήστης δε δημιουργήθηκε",
   "error-username-taken": "This username is already taken",
   "error-username-taken": "This username is already taken",
   "error-email-taken": "Email has already been taken",
   "error-email-taken": "Email has already been taken",
-  "export-board": "Export board",
+  "export-board": "Εξαγωγή πίνακα",
   "filter": "Φίλτρο",
   "filter": "Φίλτρο",
   "filter-cards": "Filter Cards",
   "filter-cards": "Filter Cards",
   "filter-clear": "Clear filter",
   "filter-clear": "Clear filter",
   "filter-no-label": "No label",
   "filter-no-label": "No label",
   "filter-no-member": "Κανένα μέλος",
   "filter-no-member": "Κανένα μέλος",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filter is on",
   "filter-on": "Filter is on",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-to-selection": "Filter to selection",
   "filter-to-selection": "Filter to selection",
@@ -319,7 +321,7 @@
   "import": "Εισαγωγή",
   "import": "Εισαγωγή",
   "link": "Link",
   "link": "Link",
   "import-board": "import board",
   "import-board": "import board",
-  "import-board-c": "Import board",
+  "import-board-c": "Εισαγωγή πίνακα",
   "import-board-title-trello": "Import board from Trello",
   "import-board-title-trello": "Import board from Trello",
   "import-board-title-wekan": "Import board from previous export",
   "import-board-title-wekan": "Import board from previous export",
   "import-sandstorm-backup-warning": "Do not delete data you import from original exported board or Trello before checking does this grain close and open again, or do you get Board not found error, that means data loss.",
   "import-sandstorm-backup-warning": "Do not delete data you import from original exported board or Trello before checking does this grain close and open again, or do you get Board not found error, that means data loss.",
@@ -334,7 +336,7 @@
   "import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
   "import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
   "import-show-user-mapping": "Review members mapping",
   "import-show-user-mapping": "Review members mapping",
   "import-user-select": "Pick your existing user you want to use as this member",
   "import-user-select": "Pick your existing user you want to use as this member",
-  "importMapMembersAddPopup-title": "Select member",
+  "importMapMembersAddPopup-title": "Επιλογή μέλους",
   "info": "Έκδοση",
   "info": "Έκδοση",
   "initials": "Initials",
   "initials": "Initials",
   "invalid-date": "Invalid date",
   "invalid-date": "Invalid date",
@@ -342,8 +344,8 @@
   "invalid-user": "Invalid user",
   "invalid-user": "Invalid user",
   "joined": "joined",
   "joined": "joined",
   "just-invited": "You are just invited to this board",
   "just-invited": "You are just invited to this board",
-  "keyboard-shortcuts": "Keyboard shortcuts",
-  "label-create": "Create Label",
+  "keyboard-shortcuts": "Συντομεύσεις πληκτρολογίου",
+  "label-create": "Δημιουργία Ετικέτας",
   "label-default": "%s label (default)",
   "label-default": "%s label (default)",
   "label-delete-pop": "There is no undo. This will remove this label from all cards and destroy its history.",
   "label-delete-pop": "There is no undo. This will remove this label from all cards and destroy its history.",
   "labels": "Ετικέτες",
   "labels": "Ετικέτες",
@@ -361,7 +363,7 @@
   "listActionPopup-title": "List Actions",
   "listActionPopup-title": "List Actions",
   "swimlaneActionPopup-title": "Swimlane Actions",
   "swimlaneActionPopup-title": "Swimlane Actions",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "swimlaneAddPopup-title": "Add a Swimlane below",
-  "listImportCardPopup-title": "Import a Trello card",
+  "listImportCardPopup-title": "Εισαγωγή μιας κάρτας Trello",
   "listMorePopup-title": "Περισσότερα",
   "listMorePopup-title": "Περισσότερα",
   "link-list": "Link to this list",
   "link-list": "Link to this list",
   "list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
   "list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
@@ -385,7 +387,7 @@
   "muted-info": "You will never be notified of any changes in this board",
   "muted-info": "You will never be notified of any changes in this board",
   "my-boards": "My Boards",
   "my-boards": "My Boards",
   "name": "Όνομα",
   "name": "Όνομα",
-  "no-archived-cards": "No cards in Archive.",
+  "no-archived-cards": "Δεν υπάρχουν κάρτες στο Αρχείο.",
   "no-archived-lists": "No lists in Archive.",
   "no-archived-lists": "No lists in Archive.",
   "no-archived-swimlanes": "No swimlanes in Archive.",
   "no-archived-swimlanes": "No swimlanes in Archive.",
   "no-results": "Κανένα αποτέλεσμα",
   "no-results": "Κανένα αποτέλεσμα",
@@ -401,25 +403,25 @@
   "password": "Κωδικός",
   "password": "Κωδικός",
   "paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)",
   "paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)",
   "participating": "Participating",
   "participating": "Participating",
-  "preview": "Preview",
-  "previewAttachedImagePopup-title": "Preview",
-  "previewClipboardImagePopup-title": "Preview",
+  "preview": "Προεπισκόπηση",
+  "previewAttachedImagePopup-title": "Προεπισκόπηση",
+  "previewClipboardImagePopup-title": "Προεπισκόπηση",
   "private": "Private",
   "private": "Private",
   "private-desc": "This board is private. Only people added to the board can view and edit it.",
   "private-desc": "This board is private. Only people added to the board can view and edit it.",
-  "profile": "Profile",
+  "profile": "Προφίλ",
   "public": "Public",
   "public": "Public",
   "public-desc": "This board is public. It's visible to anyone with the link and will show up in search engines like Google. Only people added to the board can edit.",
   "public-desc": "This board is public. It's visible to anyone with the link and will show up in search engines like Google. Only people added to the board can edit.",
   "quick-access-description": "Star a board to add a shortcut in this bar.",
   "quick-access-description": "Star a board to add a shortcut in this bar.",
   "remove-cover": "Remove Cover",
   "remove-cover": "Remove Cover",
-  "remove-from-board": "Remove from Board",
-  "remove-label": "Remove Label",
+  "remove-from-board": "Αφαίρεση από Πίνακα",
+  "remove-label": "Αφαίρεση Ετικέτας",
   "listDeletePopup-title": "Διαγραφή Λίστας;",
   "listDeletePopup-title": "Διαγραφή Λίστας;",
   "remove-member": "Αφαίρεση Μέλους",
   "remove-member": "Αφαίρεση Μέλους",
   "remove-member-from-card": "Αφαίρεση από την Κάρτα",
   "remove-member-from-card": "Αφαίρεση από την Κάρτα",
   "remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.",
   "remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.",
   "removeMemberPopup-title": "Αφαίρεση Μέλους;",
   "removeMemberPopup-title": "Αφαίρεση Μέλους;",
   "rename": "Μετανομασία",
   "rename": "Μετανομασία",
-  "rename-board": "Rename Board",
+  "rename-board": "Μετονομασία Πίνακα",
   "restore": "Restore",
   "restore": "Restore",
   "save": "Αποθήκευση",
   "save": "Αποθήκευση",
   "search": "Αναζήτηση",
   "search": "Αναζήτηση",
@@ -432,9 +434,9 @@
   "shortcut-assign-self": "Assign yourself to current card",
   "shortcut-assign-self": "Assign yourself to current card",
   "shortcut-autocomplete-emoji": "Autocomplete emoji",
   "shortcut-autocomplete-emoji": "Autocomplete emoji",
   "shortcut-autocomplete-members": "Autocomplete members",
   "shortcut-autocomplete-members": "Autocomplete members",
-  "shortcut-clear-filters": "Clear all filters",
+  "shortcut-clear-filters": "Καθαρισμός φίλτρων",
   "shortcut-close-dialog": "Close Dialog",
   "shortcut-close-dialog": "Close Dialog",
-  "shortcut-filter-my-cards": "Filter my cards",
+  "shortcut-filter-my-cards": "Φιλτράρισμα των καρτών μου",
   "shortcut-show-shortcuts": "Bring up this shortcuts list",
   "shortcut-show-shortcuts": "Bring up this shortcuts list",
   "shortcut-toggle-filterbar": "Toggle Filter Sidebar",
   "shortcut-toggle-filterbar": "Toggle Filter Sidebar",
   "shortcut-toggle-sidebar": "Toggle Board Sidebar",
   "shortcut-toggle-sidebar": "Toggle Board Sidebar",
@@ -445,7 +447,7 @@
   "star-board-title": "Click to star this board. It will show up at top of your boards list.",
   "star-board-title": "Click to star this board. It will show up at top of your boards list.",
   "starred-boards": "Starred Boards",
   "starred-boards": "Starred Boards",
   "starred-boards-description": "Starred boards show up at the top of your boards list.",
   "starred-boards-description": "Starred boards show up at the top of your boards list.",
-  "subscribe": "Subscribe",
+  "subscribe": "Εγγραφή",
   "team": "Ομάδα",
   "team": "Ομάδα",
   "this-board": "this board",
   "this-board": "this board",
   "this-card": "αυτή η κάρτα",
   "this-card": "αυτή η κάρτα",
@@ -458,7 +460,7 @@
   "title": "Τίτλος",
   "title": "Τίτλος",
   "tracking": "Tracking",
   "tracking": "Tracking",
   "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
   "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
-  "type": "Type",
+  "type": "Τύπος",
   "unassign-member": "Unassign member",
   "unassign-member": "Unassign member",
   "unsaved-description": "You have an unsaved description.",
   "unsaved-description": "You have an unsaved description.",
   "unwatch": "Unwatch",
   "unwatch": "Unwatch",
@@ -471,23 +473,23 @@
   "watch": "Watch",
   "watch": "Watch",
   "watching": "Watching",
   "watching": "Watching",
   "watching-info": "You will be notified of any change in this board",
   "watching-info": "You will be notified of any change in this board",
-  "welcome-board": "Welcome Board",
+  "welcome-board": "Πίνακας Καλωσορίσματος",
   "welcome-swimlane": "Milestone 1",
   "welcome-swimlane": "Milestone 1",
   "welcome-list1": "Basics",
   "welcome-list1": "Basics",
   "welcome-list2": "Advanced",
   "welcome-list2": "Advanced",
-  "card-templates-swimlane": "Card Templates",
-  "list-templates-swimlane": "List Templates",
-  "board-templates-swimlane": "Board Templates",
+  "card-templates-swimlane": "Πρότυπα Καρτών",
+  "list-templates-swimlane": "Πρότυπα Λίστας",
+  "board-templates-swimlane": "Πρότυπα Πινάκων",
   "what-to-do": "What do you want to do?",
   "what-to-do": "What do you want to do?",
   "wipLimitErrorPopup-title": "Invalid WIP Limit",
   "wipLimitErrorPopup-title": "Invalid WIP Limit",
   "wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
   "wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
   "wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.",
   "wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.",
   "admin-panel": "Admin Panel",
   "admin-panel": "Admin Panel",
   "settings": "Ρυθμίσεις",
   "settings": "Ρυθμίσεις",
-  "people": "People",
+  "people": "Άνθρωποι",
   "registration": "Registration",
   "registration": "Registration",
   "disable-self-registration": "Disable Self-Registration",
   "disable-self-registration": "Disable Self-Registration",
-  "invite": "Invite",
+  "invite": "Πρόσκληση",
   "invite-people": "Invite People",
   "invite-people": "Invite People",
   "to-boards": "To board(s)",
   "to-boards": "To board(s)",
   "email-addresses": "Email Διευθύνσεις",
   "email-addresses": "Email Διευθύνσεις",
@@ -513,9 +515,9 @@
   "boardCardTitlePopup-title": "Card Title Filter",
   "boardCardTitlePopup-title": "Card Title Filter",
   "new-outgoing-webhook": "New Outgoing Webhook",
   "new-outgoing-webhook": "New Outgoing Webhook",
   "no-name": "(Άγνωστο)",
   "no-name": "(Άγνωστο)",
-  "Node_version": "Node version",
-  "Meteor_version": "Meteor version",
-  "MongoDB_version": "MongoDB version",
+  "Node_version": "Έκδοση Node",
+  "Meteor_version": "Έκδοση Meteor",
+  "MongoDB_version": "Έκδοση MongoDB",
   "MongoDB_storage_engine": "MongoDB storage engine",
   "MongoDB_storage_engine": "MongoDB storage engine",
   "MongoDB_Oplog_enabled": "MongoDB Oplog enabled",
   "MongoDB_Oplog_enabled": "MongoDB Oplog enabled",
   "OS_Arch": "OS Arch",
   "OS_Arch": "OS Arch",
@@ -541,10 +543,10 @@
   "accounts-allowUserNameChange": "Allow Username Change",
   "accounts-allowUserNameChange": "Allow Username Change",
   "createdAt": "Created at",
   "createdAt": "Created at",
   "verified": "Verified",
   "verified": "Verified",
-  "active": "Active",
+  "active": "Ενεργό",
   "card-received": "Received",
   "card-received": "Received",
   "card-received-on": "Received on",
   "card-received-on": "Received on",
-  "card-end": "End",
+  "card-end": "Τέλος",
   "card-end-on": "Ends on",
   "card-end-on": "Ends on",
   "editCardReceivedDatePopup-title": "Change received date",
   "editCardReceivedDatePopup-title": "Change received date",
   "editCardEndDatePopup-title": "Change end date",
   "editCardEndDatePopup-title": "Change end date",
@@ -556,8 +558,8 @@
   "requested-by": "Requested By",
   "requested-by": "Requested By",
   "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
   "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
   "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
   "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
-  "boardDeletePopup-title": "Delete Board?",
-  "delete-board": "Delete Board",
+  "boardDeletePopup-title": "Διαγραφή Πίνακα;",
+  "delete-board": "Διαγραφή Πίνακα",
   "default-subtasks-board": "Subtasks for __board__ board",
   "default-subtasks-board": "Subtasks for __board__ board",
   "default": "Default",
   "default": "Default",
   "queue": "Queue",
   "queue": "Queue",
@@ -583,16 +585,16 @@
   "activity-delete-attach-card": "deleted an attachment",
   "activity-delete-attach-card": "deleted an attachment",
   "activity-set-customfield": "set custom field '%s' to '%s' in %s",
   "activity-set-customfield": "set custom field '%s' to '%s' in %s",
   "activity-unset-customfield": "unset custom field '%s' in %s",
   "activity-unset-customfield": "unset custom field '%s' in %s",
-  "r-rule": "Rule",
+  "r-rule": "Κανόνας",
   "r-add-trigger": "Add trigger",
   "r-add-trigger": "Add trigger",
   "r-add-action": "Add action",
   "r-add-action": "Add action",
   "r-board-rules": "Board rules",
   "r-board-rules": "Board rules",
-  "r-add-rule": "Add rule",
-  "r-view-rule": "View rule",
-  "r-delete-rule": "Delete rule",
+  "r-add-rule": "Προσθήκη κανόνα",
+  "r-view-rule": "Προβολή κανόνα",
+  "r-delete-rule": "Διαγραφή κανόνα",
   "r-new-rule-name": "New rule title",
   "r-new-rule-name": "New rule title",
   "r-no-rules": "No rules",
   "r-no-rules": "No rules",
-  "r-when-a-card": "When a card",
+  "r-when-a-card": "Όταν μία κάρτα",
   "r-is": "is",
   "r-is": "is",
   "r-is-moved": "is moved",
   "r-is-moved": "is moved",
   "r-added-to": "added to",
   "r-added-to": "added to",
@@ -602,9 +604,9 @@
   "set-filter": "Set Filter",
   "set-filter": "Set Filter",
   "r-moved-to": "Moved to",
   "r-moved-to": "Moved to",
   "r-moved-from": "Moved from",
   "r-moved-from": "Moved from",
-  "r-archived": "Moved to Archive",
-  "r-unarchived": "Restored from Archive",
-  "r-a-card": "a card",
+  "r-archived": "Μετακινήθηκε στο Αρχείο",
+  "r-unarchived": "Επαναφέρθηκε από το Αρχείο",
+  "r-a-card": "μία κάρτα",
   "r-when-a-label-is": "When a label is",
   "r-when-a-label-is": "When a label is",
   "r-when-the-label": "When the label",
   "r-when-the-label": "When the label",
   "r-list-name": "list name",
   "r-list-name": "list name",
@@ -624,8 +626,8 @@
   "r-top-of": "Top of",
   "r-top-of": "Top of",
   "r-bottom-of": "Bottom of",
   "r-bottom-of": "Bottom of",
   "r-its-list": "its list",
   "r-its-list": "its list",
-  "r-archive": "Move to Archive",
-  "r-unarchive": "Restore from Archive",
+  "r-archive": "Μετακίνηση στο Αρχείο",
+  "r-unarchive": "Επαναφορά από το Αρχείο",
   "r-card": "card",
   "r-card": "card",
   "r-add": "Προσθήκη",
   "r-add": "Προσθήκη",
   "r-remove": "Remove",
   "r-remove": "Remove",
@@ -645,19 +647,19 @@
   "r-to": "to",
   "r-to": "to",
   "r-subject": "subject",
   "r-subject": "subject",
   "r-rule-details": "Rule details",
   "r-rule-details": "Rule details",
-  "r-d-move-to-top-gen": "Move card to top of its list",
-  "r-d-move-to-top-spec": "Move card to top of list",
-  "r-d-move-to-bottom-gen": "Move card to bottom of its list",
-  "r-d-move-to-bottom-spec": "Move card to bottom of list",
+  "r-d-move-to-top-gen": "Μετακίνηση κάρτας στην αρχή της λίστας της",
+  "r-d-move-to-top-spec": "Μετακίνηση κάρτας στην αρχή της λίστας",
+  "r-d-move-to-bottom-gen": "Μετακίνηση κάρτας στο τέλος της λίστας της",
+  "r-d-move-to-bottom-spec": "Μετακίνηση κάρτας στο τέλος της λίστας",
   "r-d-send-email": "Send email",
   "r-d-send-email": "Send email",
   "r-d-send-email-to": "to",
   "r-d-send-email-to": "to",
   "r-d-send-email-subject": "subject",
   "r-d-send-email-subject": "subject",
   "r-d-send-email-message": "message",
   "r-d-send-email-message": "message",
-  "r-d-archive": "Move card to Archive",
-  "r-d-unarchive": "Restore card from Archive",
-  "r-d-add-label": "Add label",
-  "r-d-remove-label": "Remove label",
-  "r-create-card": "Create new card",
+  "r-d-archive": "Μετακίνηση κάρτας στο Αρχείο",
+  "r-d-unarchive": "Επαναφορά κάρτας από το Αρχείο",
+  "r-d-add-label": "Προσθήκη ετικέτας",
+  "r-d-remove-label": "Αφαίρεση ετικέτας",
+  "r-create-card": "Δημιουργία νέας κάρτας",
   "r-in-list": "in list",
   "r-in-list": "in list",
   "r-in-swimlane": "in swimlane",
   "r-in-swimlane": "in swimlane",
   "r-d-add-member": "Add member",
   "r-d-add-member": "Add member",

+ 2 - 0
i18n/en-GB.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "No label",
   "filter-no-label": "No label",
   "filter-no-member": "No member",
   "filter-no-member": "No member",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filter is on",
   "filter-on": "Filter is on",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-to-selection": "Filter to selection",
   "filter-to-selection": "Filter to selection",

+ 2 - 0
i18n/en.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "No label",
   "filter-no-label": "No label",
   "filter-no-member": "No member",
   "filter-no-member": "No member",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filter is on",
   "filter-on": "Filter is on",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-to-selection": "Filter to selection",
   "filter-to-selection": "Filter to selection",

+ 2 - 0
i18n/eo.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "Nenia etikedo",
   "filter-no-label": "Nenia etikedo",
   "filter-no-member": "Nenia membro",
   "filter-no-member": "Nenia membro",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filter is on",
   "filter-on": "Filter is on",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-to-selection": "Filter to selection",
   "filter-to-selection": "Filter to selection",

+ 2 - 0
i18n/es-AR.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "Sin etiqueta",
   "filter-no-label": "Sin etiqueta",
   "filter-no-member": "No es miembro",
   "filter-no-member": "No es miembro",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "El filtro está activado",
   "filter-on": "El filtro está activado",
   "filter-on-desc": "Estás filtrando cartas en este tablero. Clickeá acá para editar el filtro.",
   "filter-on-desc": "Estás filtrando cartas en este tablero. Clickeá acá para editar el filtro.",
   "filter-to-selection": "Filtrar en la selección",
   "filter-to-selection": "Filtrar en la selección",

+ 32 - 30
i18n/es.i18n.json

@@ -73,8 +73,8 @@
   "activity-unchecked-item-card": "desmarcado %s en la lista de verificación %s",
   "activity-unchecked-item-card": "desmarcado %s en la lista de verificación %s",
   "activity-checklist-completed-card": "completada la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
   "activity-checklist-completed-card": "completada la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
   "activity-checklist-uncompleted-card": "no completó la lista de verificación %s",
   "activity-checklist-uncompleted-card": "no completó la lista de verificación %s",
-  "activity-editComment": "edited comment %s",
-  "activity-deleteComment": "deleted comment %s",
+  "activity-editComment": "comentario editado",
+  "activity-deleteComment": "comentario eliminado",
   "add-attachment": "Añadir adjunto",
   "add-attachment": "Añadir adjunto",
   "add-board": "Añadir tablero",
   "add-board": "Añadir tablero",
   "add-card": "Añadir una tarjeta",
   "add-card": "Añadir una tarjeta",
@@ -107,7 +107,7 @@
   "archive-selection": "Archivar esta selección",
   "archive-selection": "Archivar esta selección",
   "archiveBoardPopup-title": "¿Archivar este tablero?",
   "archiveBoardPopup-title": "¿Archivar este tablero?",
   "archived-items": "Archivo",
   "archived-items": "Archivo",
-  "archived-boards": "Tableros en Archivo",
+  "archived-boards": "Tableros en el Archivo",
   "restore-board": "Restaurar el tablero",
   "restore-board": "Restaurar el tablero",
   "no-archived-boards": "No hay Tableros en el Archivo",
   "no-archived-boards": "No hay Tableros en el Archivo",
   "archives": "Archivo",
   "archives": "Archivo",
@@ -287,7 +287,7 @@
   "email-sent": "Correo enviado",
   "email-sent": "Correo enviado",
   "email-verifyEmail-subject": "Verifica tu dirección de correo en __siteName__",
   "email-verifyEmail-subject": "Verifica tu dirección de correo en __siteName__",
   "email-verifyEmail-text": "Hola __user__,\n\nPara verificar tu cuenta de correo electrónico, haz clic en el siguiente enlace.\n\n__url__\n\nGracias.",
   "email-verifyEmail-text": "Hola __user__,\n\nPara verificar tu cuenta de correo electrónico, haz clic en el siguiente enlace.\n\n__url__\n\nGracias.",
-  "enable-wip-limit": "Activar el límite del trabajo en proceso",
+  "enable-wip-limit": "Habilitar el límite del trabajo en proceso",
   "error-board-doesNotExist": "El tablero no existe",
   "error-board-doesNotExist": "El tablero no existe",
   "error-board-notAdmin": "Es necesario ser administrador de este tablero para hacer eso",
   "error-board-notAdmin": "Es necesario ser administrador de este tablero para hacer eso",
   "error-board-notAMember": "Es necesario ser miembro de este tablero para hacer eso",
   "error-board-notAMember": "Es necesario ser miembro de este tablero para hacer eso",
@@ -306,6 +306,8 @@
   "filter-no-label": "Sin etiqueta",
   "filter-no-label": "Sin etiqueta",
   "filter-no-member": "Sin miembro",
   "filter-no-member": "Sin miembro",
   "filter-no-custom-fields": "Sin campos personalizados",
   "filter-no-custom-fields": "Sin campos personalizados",
+  "filter-show-archive": "Mostrar las listas archivadas",
+  "filter-hide-empty": "Ocultar las listas vacías",
   "filter-on": "Filtrado activado",
   "filter-on": "Filtrado activado",
   "filter-on-desc": "Estás filtrando tarjetas en este tablero. Haz clic aquí para editar el filtro.",
   "filter-on-desc": "Estás filtrando tarjetas en este tablero. Haz clic aquí para editar el filtro.",
   "filter-to-selection": "Filtrar la selección",
   "filter-to-selection": "Filtrar la selección",
@@ -478,7 +480,7 @@
   "card-templates-swimlane": "Plantilla de tarjeta",
   "card-templates-swimlane": "Plantilla de tarjeta",
   "list-templates-swimlane": "Listar plantillas",
   "list-templates-swimlane": "Listar plantillas",
   "board-templates-swimlane": "Plantilla de tablero",
   "board-templates-swimlane": "Plantilla de tablero",
-  "what-to-do": "¿Qué deseas hacer?",
+  "what-to-do": "¿Qué quieres hacer?",
   "wipLimitErrorPopup-title": "El límite del trabajo en proceso no es válido.",
   "wipLimitErrorPopup-title": "El límite del trabajo en proceso no es válido.",
   "wipLimitErrorPopup-dialog-pt1": "El número de tareas en esta lista es mayor que el límite del trabajo en proceso que has definido.",
   "wipLimitErrorPopup-dialog-pt1": "El número de tareas en esta lista es mayor que el límite del trabajo en proceso que has definido.",
   "wipLimitErrorPopup-dialog-pt2": "Por favor, mueve algunas tareas fuera de esta lista, o fija un límite del trabajo en proceso más alto.",
   "wipLimitErrorPopup-dialog-pt2": "Por favor, mueve algunas tareas fuera de esta lista, o fija un límite del trabajo en proceso más alto.",
@@ -514,10 +516,10 @@
   "new-outgoing-webhook": "Nuevo webhook saliente",
   "new-outgoing-webhook": "Nuevo webhook saliente",
   "no-name": "(Desconocido)",
   "no-name": "(Desconocido)",
   "Node_version": "Versión de Node",
   "Node_version": "Versión de Node",
-  "Meteor_version": "Meteor version",
-  "MongoDB_version": "MongoDB version",
-  "MongoDB_storage_engine": "MongoDB storage engine",
-  "MongoDB_Oplog_enabled": "MongoDB Oplog enabled",
+  "Meteor_version": "Versión de Meteor",
+  "MongoDB_version": "Versión de MongoDB",
+  "MongoDB_storage_engine": "Motor de almacenamiento de MongoDB",
+  "MongoDB_Oplog_enabled": "Oplog de MongoDB habilitado",
   "OS_Arch": "Arquitectura del sistema",
   "OS_Arch": "Arquitectura del sistema",
   "OS_Cpus": "Número de CPUs del sistema",
   "OS_Cpus": "Número de CPUs del sistema",
   "OS_Freemem": "Memoria libre del sistema",
   "OS_Freemem": "Memoria libre del sistema",
@@ -695,7 +697,7 @@
   "authentication-type": "Tipo de autenticación",
   "authentication-type": "Tipo de autenticación",
   "custom-product-name": "Nombre de producto personalizado",
   "custom-product-name": "Nombre de producto personalizado",
   "layout": "Diseño",
   "layout": "Diseño",
-  "hide-logo": "Ocultar logo",
+  "hide-logo": "Ocultar el logo",
   "add-custom-html-after-body-start": "Añade HTML personalizado después de <body>",
   "add-custom-html-after-body-start": "Añade HTML personalizado después de <body>",
   "add-custom-html-before-body-end": "Añade HTML personalizado después de </body>",
   "add-custom-html-before-body-end": "Añade HTML personalizado después de </body>",
   "error-undefined": "Algo no está bien",
   "error-undefined": "Algo no está bien",
@@ -709,24 +711,24 @@
   "restore-all": "Restaurar todas",
   "restore-all": "Restaurar todas",
   "delete-all": "Borrar todas",
   "delete-all": "Borrar todas",
   "loading": "Cargando. Por favor, espere.",
   "loading": "Cargando. Por favor, espere.",
-  "previous_as": "last time was",
-  "act-a-dueAt": "modified due time to \nWhen: __timeValue__\nWhere: __card__\n previous due was __timeOldValue__",
-  "act-a-endAt": "modified ending time to __timeValue__ from (__timeOldValue__)",
-  "act-a-startAt": "modified starting time to __timeValue__ from (__timeOldValue__)",
-  "act-a-receivedAt": "modified received time to __timeValue__ from (__timeOldValue__)",
-  "a-dueAt": "modified due time to be",
-  "a-endAt": "modified ending time to be",
-  "a-startAt": "modified starting time to be",
-  "a-receivedAt": "modified received time to be",
-  "almostdue": "current due time %s is approaching",
-  "pastdue": "current due time %s is past",
-  "duenow": "current due time %s is today",
-  "act-withDue": "__card__ due reminders [__board__]",
-  "act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
-  "act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
-  "act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
-  "act-atUserComment": "You were mentioned in [__board__] __card__",
-  "delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
-  "accounts-allowUserDelete": "Allow users to self delete their account",
-  "hide-minicard-label-text": "Hide minicard label text"
+  "previous_as": "el último tiempo fue",
+  "act-a-dueAt": "cambiada la hora de vencimiento a \nCuándo: __timeValue__\nDónde: __card__\n el vencimiento anterior fue __timeOldValue__",
+  "act-a-endAt": "cambiada la hora de finalización a __timeValue__ Fecha anterior: (__timeOldValue__)",
+  "act-a-startAt": "cambiada la hora de comienzo a __timeValue__ Fecha anterior: (__timeOldValue__)",
+  "act-a-receivedAt": "cambiada la fecha de recepción a __timeValue__ Fecha anterior: (__timeOldValue__)",
+  "a-dueAt": "cambiada la hora de vencimiento a",
+  "a-endAt": "cambiada la hora de finalización a",
+  "a-startAt": "cambiada la hora de comienzo a",
+  "a-receivedAt": "cambiada la hora de recepción a",
+  "almostdue": "está próxima la hora de vencimiento actual %s",
+  "pastdue": "se sobrepasó la hora de vencimiento actual%s",
+  "duenow": "la hora de vencimiento actual %s es hoy",
+  "act-withDue": "__card__ notificaciones de vencimiento [__board__]",
+  "act-almostdue": "se ha notificado que el vencimiento actual (__timeValue__) de __card__ está próximo",
+  "act-pastdue": "se ha notificado que el vencimiento actual (__timeValue__) de __card__ se sobrepasó",
+  "act-duenow": "se ha notificado que el vencimiento actual (__timeValue__) de __card__ es ahora",
+  "act-atUserComment": "Te mencionaron en [__board__] __card__",
+  "delete-user-confirm-popup": "¿Seguro que quieres eliminar esta cuenta? Esta acción no puede deshacerse.",
+  "accounts-allowUserDelete": "Permitir a los usuarios eliminar su cuenta",
+  "hide-minicard-label-text": "Ocultar el texto de la etiqueta de la minitarjeta"
 }
 }

+ 2 - 0
i18n/eu.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "Etiketarik ez",
   "filter-no-label": "Etiketarik ez",
   "filter-no-member": "Kiderik ez",
   "filter-no-member": "Kiderik ez",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Iragazkia gaituta dago",
   "filter-on": "Iragazkia gaituta dago",
   "filter-on-desc": "Arbel honetako txartela iragazten ari zara. Egin klik hemen iragazkia editatzeko.",
   "filter-on-desc": "Arbel honetako txartela iragazten ari zara. Egin klik hemen iragazkia editatzeko.",
   "filter-to-selection": "Iragazketa aukerara",
   "filter-to-selection": "Iragazketa aukerara",

+ 2 - 0
i18n/fa.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "بدون برچسب",
   "filter-no-label": "بدون برچسب",
   "filter-no-member": "بدون عضو",
   "filter-no-member": "بدون عضو",
   "filter-no-custom-fields": "هیچ فیلدشخصی ای وجود ندارد",
   "filter-no-custom-fields": "هیچ فیلدشخصی ای وجود ندارد",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "صافی ـFilterـ فعال است",
   "filter-on": "صافی ـFilterـ فعال است",
   "filter-on-desc": "شما صافی ـFilterـ برای کارتهای تخته را روشن کرده اید. جهت ویرایش کلیک نمایید.",
   "filter-on-desc": "شما صافی ـFilterـ برای کارتهای تخته را روشن کرده اید. جهت ویرایش کلیک نمایید.",
   "filter-to-selection": "صافی ـFilterـ برای موارد انتخابی",
   "filter-to-selection": "صافی ـFilterـ برای موارد انتخابی",

+ 2 - 0
i18n/fi.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "Ei tunnistetta",
   "filter-no-label": "Ei tunnistetta",
   "filter-no-member": "Ei jäseniä",
   "filter-no-member": "Ei jäseniä",
   "filter-no-custom-fields": "Ei mukautettuja kenttiä",
   "filter-no-custom-fields": "Ei mukautettuja kenttiä",
+  "filter-show-archive": "Näytä arkistoidut listat",
+  "filter-hide-empty": "Näytä tyhjät listat",
   "filter-on": "Suodatus on päällä",
   "filter-on": "Suodatus on päällä",
   "filter-on-desc": "Suodatat kortteja tällä taululla. Klikkaa tästä muokataksesi suodatinta.",
   "filter-on-desc": "Suodatat kortteja tällä taululla. Klikkaa tästä muokataksesi suodatinta.",
   "filter-to-selection": "Suodata valintaan",
   "filter-to-selection": "Suodata valintaan",

+ 4 - 2
i18n/fr.i18n.json

@@ -73,8 +73,8 @@
   "activity-unchecked-item-card": "a décoché %s dans la checklist %s",
   "activity-unchecked-item-card": "a décoché %s dans la checklist %s",
   "activity-checklist-completed-card": "a complété la checklist __checklist__ de la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
   "activity-checklist-completed-card": "a complété la checklist __checklist__ de la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
   "activity-checklist-uncompleted-card": "a rendu incomplète la checklist %s",
   "activity-checklist-uncompleted-card": "a rendu incomplète la checklist %s",
-  "activity-editComment": "edited comment %s",
-  "activity-deleteComment": "deleted comment %s",
+  "activity-editComment": "commentaire modifié %s",
+  "activity-deleteComment": "commentaire supprimé %s",
   "add-attachment": "Ajouter une pièce jointe",
   "add-attachment": "Ajouter une pièce jointe",
   "add-board": "Ajouter un tableau",
   "add-board": "Ajouter un tableau",
   "add-card": "Ajouter une carte",
   "add-card": "Ajouter une carte",
@@ -306,6 +306,8 @@
   "filter-no-label": "Aucune étiquette",
   "filter-no-label": "Aucune étiquette",
   "filter-no-member": "Aucun participant",
   "filter-no-member": "Aucun participant",
   "filter-no-custom-fields": "Pas de champs personnalisés",
   "filter-no-custom-fields": "Pas de champs personnalisés",
+  "filter-show-archive": "Montrer les listes archivées",
+  "filter-hide-empty": "Cacher les listes vides",
   "filter-on": "Le filtre est actif",
   "filter-on": "Le filtre est actif",
   "filter-on-desc": "Vous êtes en train de filtrer les cartes sur ce tableau. Cliquez ici pour modifier les filtres.",
   "filter-on-desc": "Vous êtes en train de filtrer les cartes sur ce tableau. Cliquez ici pour modifier les filtres.",
   "filter-to-selection": "Filtre vers la sélection",
   "filter-to-selection": "Filtre vers la sélection",

+ 2 - 0
i18n/gl.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "Non hai etiquetas",
   "filter-no-label": "Non hai etiquetas",
   "filter-no-member": "Non hai membros",
   "filter-no-member": "Non hai membros",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "O filtro está activado",
   "filter-on": "O filtro está activado",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-to-selection": "Filter to selection",
   "filter-to-selection": "Filter to selection",

+ 2 - 0
i18n/he.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "אין תווית",
   "filter-no-label": "אין תווית",
   "filter-no-member": "אין חבר כזה",
   "filter-no-member": "אין חבר כזה",
   "filter-no-custom-fields": "אין שדות מותאמים אישית",
   "filter-no-custom-fields": "אין שדות מותאמים אישית",
+  "filter-show-archive": "הצגת רשימות שהועברו לארכיון",
+  "filter-hide-empty": "הסתרת רשימות ריקות",
   "filter-on": "המסנן פועל",
   "filter-on": "המסנן פועל",
   "filter-on-desc": "מסנן כרטיסים פעיל בלוח זה. יש ללחוץ כאן לעריכת המסנן.",
   "filter-on-desc": "מסנן כרטיסים פעיל בלוח זה. יש ללחוץ כאן לעריכת המסנן.",
   "filter-to-selection": "סינון לבחירה",
   "filter-to-selection": "סינון לבחירה",

+ 2 - 0
i18n/hi.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "No label",
   "filter-no-label": "No label",
   "filter-no-member": "No सदस्य",
   "filter-no-member": "No सदस्य",
   "filter-no-custom-fields": "No  प्रचलन  क्षेत्र",
   "filter-no-custom-fields": "No  प्रचलन  क्षेत्र",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filter is on",
   "filter-on": "Filter is on",
   "filter-on-desc": "You are filtering कार्ड इस पर बोर्ड. Click here तक  संपादित करें filter.",
   "filter-on-desc": "You are filtering कार्ड इस पर बोर्ड. Click here तक  संपादित करें filter.",
   "filter-to-selection": "Filter तक selection",
   "filter-to-selection": "Filter तक selection",

+ 2 - 0
i18n/hu.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "Nincs címke",
   "filter-no-label": "Nincs címke",
   "filter-no-member": "Nincs tag",
   "filter-no-member": "Nincs tag",
   "filter-no-custom-fields": "Nincsenek egyéni mezők",
   "filter-no-custom-fields": "Nincsenek egyéni mezők",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Szűrő bekapcsolva",
   "filter-on": "Szűrő bekapcsolva",
   "filter-on-desc": "A kártyaszűrés be van kapcsolva ezen a táblán. Kattintson ide a szűrő szerkesztéséhez.",
   "filter-on-desc": "A kártyaszűrés be van kapcsolva ezen a táblán. Kattintson ide a szűrő szerkesztéséhez.",
   "filter-to-selection": "Szűrés a kijelöléshez",
   "filter-to-selection": "Szűrés a kijelöléshez",

+ 2 - 0
i18n/hy.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "No label",
   "filter-no-label": "No label",
   "filter-no-member": "No member",
   "filter-no-member": "No member",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filter is on",
   "filter-on": "Filter is on",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-to-selection": "Filter to selection",
   "filter-to-selection": "Filter to selection",

+ 2 - 0
i18n/id.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "Tidak ada label",
   "filter-no-label": "Tidak ada label",
   "filter-no-member": "Tidak ada anggota",
   "filter-no-member": "Tidak ada anggota",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Penyaring aktif",
   "filter-on": "Penyaring aktif",
   "filter-on-desc": "Anda memfilter kartu di panel ini. Klik di sini untuk menyunting filter",
   "filter-on-desc": "Anda memfilter kartu di panel ini. Klik di sini untuk menyunting filter",
   "filter-to-selection": "Saring berdasarkan yang dipilih",
   "filter-to-selection": "Saring berdasarkan yang dipilih",

+ 2 - 0
i18n/ig.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "No label",
   "filter-no-label": "No label",
   "filter-no-member": "No member",
   "filter-no-member": "No member",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filter is on",
   "filter-on": "Filter is on",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-to-selection": "Filter to selection",
   "filter-to-selection": "Filter to selection",

+ 15 - 13
i18n/it.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "Nessuna etichetta",
   "filter-no-label": "Nessuna etichetta",
   "filter-no-member": "Nessun membro",
   "filter-no-member": "Nessun membro",
   "filter-no-custom-fields": "Nessun campo personalizzato",
   "filter-no-custom-fields": "Nessun campo personalizzato",
+  "filter-show-archive": "Mostra le liste archiviate",
+  "filter-hide-empty": "Nascondi liste vuote",
   "filter-on": "Il filtro è attivo",
   "filter-on": "Il filtro è attivo",
   "filter-on-desc": "Stai filtrando le schede su questa bacheca. Clicca qui per modificare il filtro,",
   "filter-on-desc": "Stai filtrando le schede su questa bacheca. Clicca qui per modificare il filtro,",
   "filter-to-selection": "Seleziona",
   "filter-to-selection": "Seleziona",
@@ -514,10 +516,10 @@
   "new-outgoing-webhook": "Nuovo webhook in uscita",
   "new-outgoing-webhook": "Nuovo webhook in uscita",
   "no-name": "(Sconosciuto)",
   "no-name": "(Sconosciuto)",
   "Node_version": "Versione di Node",
   "Node_version": "Versione di Node",
-  "Meteor_version": "Meteor version",
-  "MongoDB_version": "MongoDB version",
-  "MongoDB_storage_engine": "MongoDB storage engine",
-  "MongoDB_Oplog_enabled": "MongoDB Oplog enabled",
+  "Meteor_version": "Versione Meteor",
+  "MongoDB_version": "Versione MondoDB",
+  "MongoDB_storage_engine": "Versione motore dati MongoDB",
+  "MongoDB_Oplog_enabled": "MongoDB Oplog abilitato",
   "OS_Arch": "Architettura del sistema operativo",
   "OS_Arch": "Architettura del sistema operativo",
   "OS_Cpus": "Conteggio della CPU del sistema operativo",
   "OS_Cpus": "Conteggio della CPU del sistema operativo",
   "OS_Freemem": "Memoria libera del sistema operativo",
   "OS_Freemem": "Memoria libera del sistema operativo",
@@ -679,13 +681,13 @@
   "r-board-note": "Nota: Lascia un campo vuoto per abbinare ogni possibile valore",
   "r-board-note": "Nota: Lascia un campo vuoto per abbinare ogni possibile valore",
   "r-checklist-note": "Nota: Gli elementi della checklist devono essere scritti come valori separati dalla virgola",
   "r-checklist-note": "Nota: Gli elementi della checklist devono essere scritti come valori separati dalla virgola",
   "r-when-a-card-is-moved": "Quando una scheda viene spostata su un'altra lista",
   "r-when-a-card-is-moved": "Quando una scheda viene spostata su un'altra lista",
-  "r-set": "Set",
-  "r-update": "Update",
-  "r-datefield": "date field",
-  "r-df-start-at": "start",
-  "r-df-due-at": "due",
-  "r-df-end-at": "end",
-  "r-df-received-at": "received",
+  "r-set": "Imposta",
+  "r-update": "Aggiorna",
+  "r-datefield": "campo data",
+  "r-df-start-at": "inizio",
+  "r-df-due-at": "scadenza",
+  "r-df-end-at": "fine",
+  "r-df-received-at": "ricevuta",
   "r-to-current-datetime": "to current date/time",
   "r-to-current-datetime": "to current date/time",
   "r-remove-value-from": "Remove value from",
   "r-remove-value-from": "Remove value from",
   "ldap": "LDAP",
   "ldap": "LDAP",
@@ -726,7 +728,7 @@
   "act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
   "act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
   "act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
   "act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
   "act-atUserComment": "You were mentioned in [__board__] __card__",
   "act-atUserComment": "You were mentioned in [__board__] __card__",
-  "delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
-  "accounts-allowUserDelete": "Allow users to self delete their account",
+  "delete-user-confirm-popup": "Sei sicuro di voler cancellare questo profilo? Non sarà possibile ripristinarlo.",
+  "accounts-allowUserDelete": "Permetti agli utenti di cancellare il loro profilo",
   "hide-minicard-label-text": "Hide minicard label text"
   "hide-minicard-label-text": "Hide minicard label text"
 }
 }

+ 7 - 5
i18n/ja.i18n.json

@@ -107,7 +107,7 @@
   "archive-selection": "Move selection to Archive",
   "archive-selection": "Move selection to Archive",
   "archiveBoardPopup-title": "Move Board to Archive?",
   "archiveBoardPopup-title": "Move Board to Archive?",
   "archived-items": "アーカイブ",
   "archived-items": "アーカイブ",
-  "archived-boards": "Boards in Archive",
+  "archived-boards": "アーカイブ済みボード",
   "restore-board": "ボードをリストア",
   "restore-board": "ボードをリストア",
   "no-archived-boards": "No Boards in Archive.",
   "no-archived-boards": "No Boards in Archive.",
   "archives": "アーカイブ",
   "archives": "アーカイブ",
@@ -131,10 +131,10 @@
   "boardChangeTitlePopup-title": "ボード名の変更",
   "boardChangeTitlePopup-title": "ボード名の変更",
   "boardChangeVisibilityPopup-title": "公開範囲の変更",
   "boardChangeVisibilityPopup-title": "公開範囲の変更",
   "boardChangeWatchPopup-title": "ウォッチの変更",
   "boardChangeWatchPopup-title": "ウォッチの変更",
-  "boardMenuPopup-title": "Board Settings",
+  "boardMenuPopup-title": "ボード設定",
   "boards": "ボード",
   "boards": "ボード",
   "board-view": "Board View",
   "board-view": "Board View",
-  "board-view-cal": "Calendar",
+  "board-view-cal": "カレンダー",
   "board-view-swimlanes": "スイムレーン",
   "board-view-swimlanes": "スイムレーン",
   "board-view-lists": "リスト",
   "board-view-lists": "リスト",
   "bucket-example": "例:バケットリスト",
   "bucket-example": "例:バケットリスト",
@@ -200,7 +200,7 @@
   "color-lime": "ライム",
   "color-lime": "ライム",
   "color-magenta": "マゼンタ",
   "color-magenta": "マゼンタ",
   "color-mistyrose": "mistyrose",
   "color-mistyrose": "mistyrose",
-  "color-navy": "navy",
+  "color-navy": "濃紺",
   "color-orange": "オレンジ",
   "color-orange": "オレンジ",
   "color-paleturquoise": "paleturquoise",
   "color-paleturquoise": "paleturquoise",
   "color-peachpuff": "peachpuff",
   "color-peachpuff": "peachpuff",
@@ -219,7 +219,7 @@
   "comment-placeholder": "コメントを書く",
   "comment-placeholder": "コメントを書く",
   "comment-only": "コメントのみ",
   "comment-only": "コメントのみ",
   "comment-only-desc": "カードにのみコメント可能",
   "comment-only-desc": "カードにのみコメント可能",
-  "no-comments": "No comments",
+  "no-comments": "コメントなし",
   "no-comments-desc": "Can not see comments and activities.",
   "no-comments-desc": "Can not see comments and activities.",
   "computer": "コンピューター",
   "computer": "コンピューター",
   "confirm-subtask-delete-dialog": "本当にサブタスクを削除してもよろしいでしょうか?",
   "confirm-subtask-delete-dialog": "本当にサブタスクを削除してもよろしいでしょうか?",
@@ -306,6 +306,8 @@
   "filter-no-label": "ラベルなし",
   "filter-no-label": "ラベルなし",
   "filter-no-member": "メンバーなし",
   "filter-no-member": "メンバーなし",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "フィルター有効",
   "filter-on": "フィルター有効",
   "filter-on-desc": "このボードのカードをフィルターしています。フィルターを編集するにはこちらをクリックしてください。",
   "filter-on-desc": "このボードのカードをフィルターしています。フィルターを編集するにはこちらをクリックしてください。",
   "filter-to-selection": "フィルターした項目を全選択",
   "filter-to-selection": "フィルターした項目を全選択",

+ 2 - 0
i18n/ka.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "ნიშანი არ გვაქვს",
   "filter-no-label": "ნიშანი არ გვაქვს",
   "filter-no-member": "არ არის წევრები ",
   "filter-no-member": "არ არის წევრები ",
   "filter-no-custom-fields": "არა მომხმარებლის ველი",
   "filter-no-custom-fields": "არა მომხმარებლის ველი",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "ფილტრი ჩართულია",
   "filter-on": "ფილტრი ჩართულია",
   "filter-on-desc": "თქვენ ფილტრავთ ბარათებს ამ დაფაზე. დააკლიკეთ აქ ფილტრაციის შესწორებისთვის. ",
   "filter-on-desc": "თქვენ ფილტრავთ ბარათებს ამ დაფაზე. დააკლიკეთ აქ ფილტრაციის შესწორებისთვის. ",
   "filter-to-selection": "მონიშნულის გაფილტვრა",
   "filter-to-selection": "მონიშნულის გაფილტვრა",

+ 2 - 0
i18n/km.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "No label",
   "filter-no-label": "No label",
   "filter-no-member": "No member",
   "filter-no-member": "No member",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filter is on",
   "filter-on": "Filter is on",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-to-selection": "Filter to selection",
   "filter-to-selection": "Filter to selection",

+ 2 - 0
i18n/ko.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "라벨 없음",
   "filter-no-label": "라벨 없음",
   "filter-no-member": "멤버 없음",
   "filter-no-member": "멤버 없음",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "필터 사용",
   "filter-on": "필터 사용",
   "filter-on-desc": "보드에서 카드를 필터링합니다. 여기를 클릭하여 필터를 수정합니다.",
   "filter-on-desc": "보드에서 카드를 필터링합니다. 여기를 클릭하여 필터를 수정합니다.",
   "filter-to-selection": "선택 항목으로 필터링",
   "filter-to-selection": "선택 항목으로 필터링",

+ 2 - 0
i18n/lv.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "No label",
   "filter-no-label": "No label",
   "filter-no-member": "No member",
   "filter-no-member": "No member",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filter is on",
   "filter-on": "Filter is on",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-to-selection": "Filter to selection",
   "filter-to-selection": "Filter to selection",

+ 2 - 0
i18n/mk.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "без етикет",
   "filter-no-label": "без етикет",
   "filter-no-member": "без член",
   "filter-no-member": "без член",
   "filter-no-custom-fields": "Няма Собствени полета",
   "filter-no-custom-fields": "Няма Собствени полета",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Има приложени филтри",
   "filter-on": "Има приложени филтри",
   "filter-on-desc": "В момента филтрирате картите в това табло. Моля, натиснете тук, за да промените филтъра.",
   "filter-on-desc": "В момента филтрирате картите в това табло. Моля, натиснете тук, за да промените филтъра.",
   "filter-to-selection": "Филтрирай избраните",
   "filter-to-selection": "Филтрирай избраните",

+ 2 - 0
i18n/mn.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "No label",
   "filter-no-label": "No label",
   "filter-no-member": "No member",
   "filter-no-member": "No member",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filter is on",
   "filter-on": "Filter is on",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-to-selection": "Filter to selection",
   "filter-to-selection": "Filter to selection",

+ 2 - 0
i18n/nb.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "No label",
   "filter-no-label": "No label",
   "filter-no-member": "No member",
   "filter-no-member": "No member",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filter is on",
   "filter-on": "Filter is on",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-to-selection": "Filter to selection",
   "filter-to-selection": "Filter to selection",

+ 130 - 128
i18n/nl.i18n.json

@@ -1,36 +1,36 @@
 {
 {
   "accept": "Accepteren",
   "accept": "Accepteren",
-  "act-activity-notify": "Activity Notification",
-  "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-editComment": "edited comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-deleteComment": "deleted comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-createBoard": "created board __board__",
-  "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
-  "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
-  "act-createCustomField": "created custom field __customField__ at board __board__",
-  "act-deleteCustomField": "deleted custom field __customField__ at board __board__",
-  "act-setCustomField": "edited custom field __customField__: __customFieldValue__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-activity-notify": "Activiteiten Notificatie",
+  "act-addAttachment": "bijlage __attachment__ toegevoegd op kaart __card__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+  "act-deleteAttachment": "bijlage __attachment__ verwijderd op kaart __card__ van lijst __list__ uit swimlane __swimlane__ op bord __board__",
+  "act-addSubtask": "subtaak __subtask__ toegevoegd aan kaart __card__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+  "act-addLabel": "Label __label__ toegevoegd aan kaart __card__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+  "act-addedLabel": "Label __label__ toegevoegd aan kaart __card__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+  "act-removeLabel": "Label __label__ verwijderd van kaart __card__ van lijst __list__ uit swimlane __swimlane__ op bord __board__",
+  "act-removedLabel": "Label __label__ verwijderd van kaart __card__ van lijst __list__ uit swimlane __swimlane__ op bord __board__",
+  "act-addChecklist": "checklist __checklist__ toegevoegd aan kaart __card__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+  "act-addChecklistItem": "checklist item __checklistItem__ toegevoegd aan checklist __checklist__ op kaart __card__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+  "act-removeChecklist": "checklist __checklist__ verwijderd van kaart __card__ van lijst __list__ uit swimlane __swimlane__ op bord __board__",
+  "act-removeChecklistItem": "checklist item __checklistItem__ verwijderd van checklist __checkList__ op kaart __card__ van lijst __list__ uit swimlane __swimlane__ op bord __board__",
+  "act-checkedItem": "__checklistItem__ aangevinkt van checklist __checklist__ op kaart __card__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+  "act-uncheckedItem": "__checklistItem__ uitgevinkt van checklist __checklist__ op kaart __card__ van lijst __list__ uit swimlane __swimlane__ op bord __board__",
+  "act-completeChecklist": "checklist __checklist__ afgewerkt op kaart __card__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+  "act-uncompleteChecklist": "checklist __checklist__ onafgewerkt op kaart __card__ van lijst __list__ uit swimlane __swimlane__ op bord __board__",
+  "act-addComment": "aantekening toegevoegd aan kaart __card__: __comment__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+  "act-editComment": "aantekening gewijzigd op kaart __card__: __comment__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+  "act-deleteComment": "aantekening verwijderd van kaart __card__: __comment__ van lijst __list__ uit swimlane __swimlane__ op bord __board__",
+  "act-createBoard": "bord __board__ aangemaakt",
+  "act-createSwimlane": "swimlane __swimlane__ aangemaakt op bord __board__",
+  "act-createCard": "kaart __card__ aangemaakt in lijst __list__ in swimlane __swimlane__ op bord __board__",
+  "act-createCustomField": "maatwerkveld __customField__ gecreëerd op bord __board__",
+  "act-deleteCustomField": "maatwerkveld __customField__ verwijderd van bord __board__",
+  "act-setCustomField": "maatwerkveld gewijzigd __customField__: __customFieldValue__ op kaart __card__ in lijst __list__ uit swimlane __swimlane__ op bord __board__",
   "act-createList": "added list __list__ to board __board__",
   "act-createList": "added list __list__ to board __board__",
   "act-addBoardMember": "added member __member__ to board __board__",
   "act-addBoardMember": "added member __member__ to board __board__",
-  "act-archivedBoard": "Board __board__ moved to Archive",
-  "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
-  "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
-  "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+  "act-archivedBoard": "Bord __board__ verplaatst naar Archief",
+  "act-archivedCard": "Kaart __card__ van lijst __list__ uit swimlane __swimlane__ op bord __board__ verplaatst naar Archief",
+  "act-archivedList": "Lijst __list__ uit swimlane __swimlane__ op bord __board__ verplaatst naar Archief",
+  "act-archivedSwimlane": "Swimlane __swimlane__ op bord __board__ verplaatst naar Archief",
   "act-importBoard": "imported board __board__",
   "act-importBoard": "imported board __board__",
   "act-importCard": "imported card  __card__ to list __list__ at swimlane __swimlane__ at board __board__",
   "act-importCard": "imported card  __card__ to list __list__ at swimlane __swimlane__ at board __board__",
   "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
   "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
@@ -46,10 +46,10 @@
   "activities": "Activiteiten",
   "activities": "Activiteiten",
   "activity": "Activiteit",
   "activity": "Activiteit",
   "activity-added": "%s toegevoegd aan %s",
   "activity-added": "%s toegevoegd aan %s",
-  "activity-archived": "%s moved to Archive",
+  "activity-archived": "%s verplaatst naar Archief",
   "activity-attached": "%s bijgevoegd aan %s",
   "activity-attached": "%s bijgevoegd aan %s",
-  "activity-created": "%s aangemaakt",
-  "activity-customfield-created": "created custom field %s",
+  "activity-created": "%s gecreëerd",
+  "activity-customfield-created": "maatwerkveld gecreëerd %s",
   "activity-excluded": "%s uitgesloten van %s",
   "activity-excluded": "%s uitgesloten van %s",
   "activity-imported": "%s geimporteerd in %s van %s",
   "activity-imported": "%s geimporteerd in %s van %s",
   "activity-imported-board": "%s geimporteerd van %s",
   "activity-imported-board": "%s geimporteerd van %s",
@@ -64,17 +64,17 @@
   "activity-unchecked-item": "unchecked %s in checklist %s of %s",
   "activity-unchecked-item": "unchecked %s in checklist %s of %s",
   "activity-checklist-added": "checklist toegevoegd aan %s",
   "activity-checklist-added": "checklist toegevoegd aan %s",
   "activity-checklist-removed": "removed a checklist from %s",
   "activity-checklist-removed": "removed a checklist from %s",
-  "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "activity-checklist-completed": "checklist __checklist__ afgewerkt op kaart __card__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
   "activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
   "activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
   "activity-checklist-item-added": "checklist punt toegevoegd aan '%s' in '%s'",
   "activity-checklist-item-added": "checklist punt toegevoegd aan '%s' in '%s'",
   "activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
   "activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
   "add": "Toevoegen",
   "add": "Toevoegen",
   "activity-checked-item-card": "checked %s in checklist %s",
   "activity-checked-item-card": "checked %s in checklist %s",
   "activity-unchecked-item-card": "unchecked %s in checklist %s",
   "activity-unchecked-item-card": "unchecked %s in checklist %s",
-  "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "activity-checklist-completed-card": "checklist __checklist__ afgewerkt op kaart __card__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
   "activity-checklist-uncompleted-card": "uncompleted the checklist %s",
   "activity-checklist-uncompleted-card": "uncompleted the checklist %s",
-  "activity-editComment": "edited comment %s",
-  "activity-deleteComment": "deleted comment %s",
+  "activity-editComment": "aantekening gewijzigd %s",
+  "activity-deleteComment": "aantekening verwijderd %s",
   "add-attachment": "Voeg Bijlage Toe",
   "add-attachment": "Voeg Bijlage Toe",
   "add-board": "Voeg Bord Toe",
   "add-board": "Voeg Bord Toe",
   "add-card": "Voeg Kaart Toe",
   "add-card": "Voeg Kaart Toe",
@@ -98,22 +98,22 @@
   "and-n-other-card_plural": "En __count__ andere kaarten",
   "and-n-other-card_plural": "En __count__ andere kaarten",
   "apply": "Aanmelden",
   "apply": "Aanmelden",
   "app-is-offline": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.",
   "app-is-offline": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.",
-  "archive": "Move to Archive",
-  "archive-all": "Move All to Archive",
-  "archive-board": "Move Board to Archive",
-  "archive-card": "Move Card to Archive",
-  "archive-list": "Move List to Archive",
-  "archive-swimlane": "Move Swimlane to Archive",
-  "archive-selection": "Move selection to Archive",
-  "archiveBoardPopup-title": "Move Board to Archive?",
-  "archived-items": "Archiveren",
-  "archived-boards": "Boards in Archive",
+  "archive": "Verplaats naar Archief",
+  "archive-all": "Verplaats Alles naar Archief",
+  "archive-board": "Verplaats Bord naar Archief",
+  "archive-card": "Verplaats Kaart naar Archief",
+  "archive-list": "Verplaats Lijst naar Archief",
+  "archive-swimlane": "Verplaats Swimlane naar Archief",
+  "archive-selection": "Verplaats selectie naar Archief",
+  "archiveBoardPopup-title": "Bord naar Archief verplaatsen?",
+  "archived-items": "Archiefveren",
+  "archived-boards": "Borden in Archief",
   "restore-board": "Herstel Bord",
   "restore-board": "Herstel Bord",
-  "no-archived-boards": "No Boards in Archive.",
+  "no-archived-boards": "Geen Borden in Archief.",
   "archives": "Archiveren",
   "archives": "Archiveren",
   "template": "Template",
   "template": "Template",
   "templates": "Templates",
   "templates": "Templates",
-  "assign-member": "Wijs lid aan",
+  "assign-member": "Lid toevoegen",
   "attached": "bijgevoegd",
   "attached": "bijgevoegd",
   "attachment": "Bijlage",
   "attachment": "Bijlage",
   "attachment-delete-pop": "Een bijlage verwijderen is permanent. Er is geen herstelmogelijkheid.",
   "attachment-delete-pop": "Een bijlage verwijderen is permanent. Er is geen herstelmogelijkheid.",
@@ -122,7 +122,7 @@
   "auto-watch": "Automatisch borden bekijken wanneer deze aangemaakt worden",
   "auto-watch": "Automatisch borden bekijken wanneer deze aangemaakt worden",
   "avatar-too-big": "De bestandsgrootte van je avatar is te groot (70KB max)",
   "avatar-too-big": "De bestandsgrootte van je avatar is te groot (70KB max)",
   "back": "Terug",
   "back": "Terug",
-  "board-change-color": "Verander kleur",
+  "board-change-color": "Wijzig kleur",
   "board-nb-stars": "%s sterren",
   "board-nb-stars": "%s sterren",
   "board-not-found": "Bord is niet gevonden",
   "board-not-found": "Bord is niet gevonden",
   "board-private-info": "Dit bord is nu <strong>privé</strong>.",
   "board-private-info": "Dit bord is nu <strong>privé</strong>.",
@@ -134,22 +134,22 @@
   "boardMenuPopup-title": "Board Settings",
   "boardMenuPopup-title": "Board Settings",
   "boards": "Borden",
   "boards": "Borden",
   "board-view": "Bord overzicht",
   "board-view": "Bord overzicht",
-  "board-view-cal": "Calendar",
+  "board-view-cal": "Kalender",
   "board-view-swimlanes": "Swimlanes",
   "board-view-swimlanes": "Swimlanes",
   "board-view-lists": "Lijsten",
   "board-view-lists": "Lijsten",
   "bucket-example": "Zoals \"Bucket List\" bijvoorbeeld",
   "bucket-example": "Zoals \"Bucket List\" bijvoorbeeld",
   "cancel": "Annuleren",
   "cancel": "Annuleren",
-  "card-archived": "This card is moved to Archive.",
-  "board-archived": "This board is moved to Archive.",
-  "card-comments-title": "Deze kaart heeft %s reactie.",
+  "card-archived": "Deze kaart is verplaatst naar Archief.",
+  "board-archived": "Dit bord is verplaatst naar Archief.",
+  "card-comments-title": "Deze kaart heeft %s aantekening(en).",
   "card-delete-notice": "Verwijdering is permanent. Als je dit doet, verlies je alle informatie die op deze kaart is opgeslagen.",
   "card-delete-notice": "Verwijdering is permanent. Als je dit doet, verlies je alle informatie die op deze kaart is opgeslagen.",
-  "card-delete-pop": "Alle acties worden verwijderd van de activiteiten feed, en er zal geen mogelijkheid zijn om de kaart opnieuw te openen. Deze actie kan je niet ongedaan maken.",
-  "card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
+  "card-delete-pop": "Alle acties worden verwijderd van de activiteiten feed, en er zal geen mogelijkheid zijn om de kaart opnieuw te openen. Er is geen herstelmogelijkheid.",
+  "card-delete-suggest-archive": "Je kunt een kaart naar Archief verplaatsen om die van het bord te verwijderen waarbij de activiteiten  behouden blijven.",
   "card-due": "Deadline: ",
   "card-due": "Deadline: ",
   "card-due-on": "Deadline: ",
   "card-due-on": "Deadline: ",
   "card-spent": "gespendeerde tijd",
   "card-spent": "gespendeerde tijd",
   "card-edit-attachments": "Wijzig bijlagen",
   "card-edit-attachments": "Wijzig bijlagen",
-  "card-edit-custom-fields": "Edit custom fields",
+  "card-edit-custom-fields": "Wijzig maatwerkvelden",
   "card-edit-labels": "Wijzig labels",
   "card-edit-labels": "Wijzig labels",
   "card-edit-members": "Wijzig leden",
   "card-edit-members": "Wijzig leden",
   "card-labels-title": "Wijzig de labels vam de kaart.",
   "card-labels-title": "Wijzig de labels vam de kaart.",
@@ -158,7 +158,7 @@
   "card-start-on": "Begint op",
   "card-start-on": "Begint op",
   "cardAttachmentsPopup-title": "Voeg bestand toe vanuit",
   "cardAttachmentsPopup-title": "Voeg bestand toe vanuit",
   "cardCustomField-datePopup-title": "Change date",
   "cardCustomField-datePopup-title": "Change date",
-  "cardCustomFieldsPopup-title": "Edit custom fields",
+  "cardCustomFieldsPopup-title": "Wijzig maatwerkvelden",
   "cardDeletePopup-title": "Kaart verwijderen?",
   "cardDeletePopup-title": "Kaart verwijderen?",
   "cardDetailsActionsPopup-title": "Kaart actie ondernemen",
   "cardDetailsActionsPopup-title": "Kaart actie ondernemen",
   "cardLabelsPopup-title": "Labels",
   "cardLabelsPopup-title": "Labels",
@@ -181,14 +181,14 @@
   "changePasswordPopup-title": "Wijzig wachtwoord",
   "changePasswordPopup-title": "Wijzig wachtwoord",
   "changePermissionsPopup-title": "Wijzig permissies",
   "changePermissionsPopup-title": "Wijzig permissies",
   "changeSettingsPopup-title": "Wijzig instellingen",
   "changeSettingsPopup-title": "Wijzig instellingen",
-  "subtasks": "Subtasks",
+  "subtasks": "Subtaken",
   "checklists": "Checklists",
   "checklists": "Checklists",
   "click-to-star": "Klik om het bord als favoriet in te stellen",
   "click-to-star": "Klik om het bord als favoriet in te stellen",
   "click-to-unstar": "Klik om het bord uit favorieten weg te halen",
   "click-to-unstar": "Klik om het bord uit favorieten weg te halen",
   "clipboard": "Vanuit clipboard of sleep het bestand hierheen",
   "clipboard": "Vanuit clipboard of sleep het bestand hierheen",
   "close": "Sluiten",
   "close": "Sluiten",
   "close-board": "Sluit bord",
   "close-board": "Sluit bord",
-  "close-board-pop": "You will be able to restore the board by clicking the “Archive” button from the home header.",
+  "close-board-pop": "Je kunt het bord terughalen door de \"Archief\" knop te klikken in de menubalk \"Mijn Borden\".",
   "color-black": "zwart",
   "color-black": "zwart",
   "color-blue": "blauw",
   "color-blue": "blauw",
   "color-crimson": "crimson",
   "color-crimson": "crimson",
@@ -215,12 +215,12 @@
   "color-white": "white",
   "color-white": "white",
   "color-yellow": "Geel",
   "color-yellow": "Geel",
   "unset-color": "Unset",
   "unset-color": "Unset",
-  "comment": "Reageer",
-  "comment-placeholder": "Schrijf reactie",
-  "comment-only": "Alleen reageren",
-  "comment-only-desc": "Kan alleen op kaarten reageren.",
-  "no-comments": "No comments",
-  "no-comments-desc": "Can not see comments and activities.",
+  "comment": "Aantekening",
+  "comment-placeholder": "Schrijf aantekening",
+  "comment-only": "Alleen aantekeningen maken",
+  "comment-only-desc": "Kan alleen op kaarten aantekenen.",
+  "no-comments": "Geen aantekeningen",
+  "no-comments-desc": "Zie geen aantekeningen of activiteiten.",
   "computer": "Computer",
   "computer": "Computer",
   "confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?",
   "confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?",
   "confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
   "confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
@@ -238,7 +238,7 @@
   "createCustomField": "Create Field",
   "createCustomField": "Create Field",
   "createCustomFieldPopup-title": "Create Field",
   "createCustomFieldPopup-title": "Create Field",
   "current": "Huidige",
   "current": "Huidige",
-  "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+  "custom-field-delete-pop": "Er is geen herstelmogelijkheid. Deze actie zal dit maatwerkveld van alle kaarten verwijderen en de bijbehorende historie wissen.",
   "custom-field-checkbox": "Checkbox",
   "custom-field-checkbox": "Checkbox",
   "custom-field-date": "Datum",
   "custom-field-date": "Datum",
   "custom-field-dropdown": "Dropdown List",
   "custom-field-dropdown": "Dropdown List",
@@ -248,12 +248,12 @@
   "custom-field-dropdown-unknown": "(unknown)",
   "custom-field-dropdown-unknown": "(unknown)",
   "custom-field-number": "Number",
   "custom-field-number": "Number",
   "custom-field-text": "Text",
   "custom-field-text": "Text",
-  "custom-fields": "Custom Fields",
+  "custom-fields": "Maatwerkvelden",
   "date": "Datum",
   "date": "Datum",
   "decline": "Weigeren",
   "decline": "Weigeren",
   "default-avatar": "Standaard avatar",
   "default-avatar": "Standaard avatar",
   "delete": "Verwijderen",
   "delete": "Verwijderen",
-  "deleteCustomFieldPopup-title": "Delete Custom Field?",
+  "deleteCustomFieldPopup-title": "Maatwerkveld verwijderen?",
   "deleteLabelPopup-title": "Verwijder label?",
   "deleteLabelPopup-title": "Verwijder label?",
   "description": "Beschrijving",
   "description": "Beschrijving",
   "disambiguateMultiLabelPopup-title": "Disambigueer Label Actie",
   "disambiguateMultiLabelPopup-title": "Disambigueer Label Actie",
@@ -286,7 +286,7 @@
   "email-resetPassword-text": "Hallo __user__,\n\nKlik op de link hier beneden om je wachtwoord te resetten.\n\n__url__\n\nBedankt.",
   "email-resetPassword-text": "Hallo __user__,\n\nKlik op de link hier beneden om je wachtwoord te resetten.\n\n__url__\n\nBedankt.",
   "email-sent": "E-mail is verzonden",
   "email-sent": "E-mail is verzonden",
   "email-verifyEmail-subject": "Verifieer je e-mailadres op __siteName__",
   "email-verifyEmail-subject": "Verifieer je e-mailadres op __siteName__",
-  "email-verifyEmail-text": "Hallo __user__,\n\nOm je e-mail te verifiëren vragen we je om op de link hieronder te drukken.\n\n__url__\n\nBedankt.",
+  "email-verifyEmail-text": "Hallo __user__,\n\nOm je e-mail te verifiëren vragen we je om op de link hieronder te klikken.\n\n__url__\n\nBedankt.",
   "enable-wip-limit": "Activeer WIP limiet",
   "enable-wip-limit": "Activeer WIP limiet",
   "error-board-doesNotExist": "Dit bord bestaat niet.",
   "error-board-doesNotExist": "Dit bord bestaat niet.",
   "error-board-notAdmin": "Je moet een administrator zijn van dit bord om dat te doen.",
   "error-board-notAdmin": "Je moet een administrator zijn van dit bord om dat te doen.",
@@ -305,7 +305,9 @@
   "filter-clear": "Reset filter",
   "filter-clear": "Reset filter",
   "filter-no-label": "Geen label",
   "filter-no-label": "Geen label",
   "filter-no-member": "Geen lid",
   "filter-no-member": "Geen lid",
-  "filter-no-custom-fields": "No Custom Fields",
+  "filter-no-custom-fields": "Geen maatwerkvelden",
+  "filter-show-archive": "Toon gearchiveerde lijsten",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filter staat aan",
   "filter-on": "Filter staat aan",
   "filter-on-desc": "Je bent nu kaarten aan het filteren op dit bord. Klik hier om het filter te wijzigen.",
   "filter-on-desc": "Je bent nu kaarten aan het filteren op dit bord. Klik hier om het filter te wijzigen.",
   "filter-to-selection": "Filter zoals selectie",
   "filter-to-selection": "Filter zoals selectie",
@@ -345,7 +347,7 @@
   "keyboard-shortcuts": "Toetsenbord snelkoppelingen",
   "keyboard-shortcuts": "Toetsenbord snelkoppelingen",
   "label-create": "Label aanmaken",
   "label-create": "Label aanmaken",
   "label-default": "%s label (standaard)",
   "label-default": "%s label (standaard)",
-  "label-delete-pop": "Je kan het niet ongedaan maken. Deze actie zal de label van alle kaarten verwijderen, en de feed.",
+  "label-delete-pop": "Er is geen herstelmogelijkheid. Deze actie zal de label van alle kaarten verwijderen, en de feed.",
   "labels": "Labels",
   "labels": "Labels",
   "language": "Taal",
   "language": "Taal",
   "last-admin-desc": "Je kan de permissies niet veranderen omdat er maar een administrator is.",
   "last-admin-desc": "Je kan de permissies niet veranderen omdat er maar een administrator is.",
@@ -353,19 +355,19 @@
   "leave-board-pop": "Weet u zeker dat u __boardTitle__ wilt verlaten? U wordt verwijderd van alle kaarten binnen dit bord",
   "leave-board-pop": "Weet u zeker dat u __boardTitle__ wilt verlaten? U wordt verwijderd van alle kaarten binnen dit bord",
   "leaveBoardPopup-title": "Bord verlaten?",
   "leaveBoardPopup-title": "Bord verlaten?",
   "link-card": "Link naar deze kaart",
   "link-card": "Link naar deze kaart",
-  "list-archive-cards": "Move all cards in this list to Archive",
-  "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.",
+  "list-archive-cards": "Verplaats alle kaarten in deze lijst naar Archief",
+  "list-archive-cards-pop": "Dit zal alle kaarten uit deze lijst op dit bord verwijderen. Om de kaarten in het Archief te tonen en terug te halen, klik \"Menu\" > \"Archief\".",
   "list-move-cards": "Verplaats alle kaarten in deze lijst",
   "list-move-cards": "Verplaats alle kaarten in deze lijst",
   "list-select-cards": "Selecteer alle kaarten in deze lijst",
   "list-select-cards": "Selecteer alle kaarten in deze lijst",
-  "set-color-list": "Set Color",
+  "set-color-list": "Wijzig kleur in",
   "listActionPopup-title": "Lijst acties",
   "listActionPopup-title": "Lijst acties",
   "swimlaneActionPopup-title": "Swimlane handelingen",
   "swimlaneActionPopup-title": "Swimlane handelingen",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "listImportCardPopup-title": "Importeer een Trello kaart",
   "listImportCardPopup-title": "Importeer een Trello kaart",
   "listMorePopup-title": "Meer",
   "listMorePopup-title": "Meer",
   "link-list": "Link naar deze lijst",
   "link-list": "Link naar deze lijst",
-  "list-delete-pop": "Alle acties zullen verwijderd worden van de activiteiten feed, en je zult deze niet meer kunnen herstellen. Je kan deze actie niet ongedaan maken.",
-  "list-delete-suggest-archive": "You can move a list to Archive to remove it from the board and preserve the activity.",
+  "list-delete-pop": "Alle acties zullen verwijderd worden van de activiteiten feed, en je zult deze niet meer kunnen herstellen. Er is geen herstelmogelijkheid.",
+  "list-delete-suggest-archive": "Je kunt een lijst naar Archief verplaatsen om die van het bord te verwijderen waarbij de activiteiten behouden blijven.",
   "lists": "Lijsten",
   "lists": "Lijsten",
   "swimlanes": "Swimlanes",
   "swimlanes": "Swimlanes",
   "log-out": "Uitloggen",
   "log-out": "Uitloggen",
@@ -385,9 +387,9 @@
   "muted-info": "Je zal nooit meer geïnformeerd worden bij veranderingen in dit bord.",
   "muted-info": "Je zal nooit meer geïnformeerd worden bij veranderingen in dit bord.",
   "my-boards": "Mijn Borden",
   "my-boards": "Mijn Borden",
   "name": "Naam",
   "name": "Naam",
-  "no-archived-cards": "No cards in Archive.",
-  "no-archived-lists": "No lists in Archive.",
-  "no-archived-swimlanes": "No swimlanes in Archive.",
+  "no-archived-cards": "Geen kaarten in Archief.",
+  "no-archived-lists": "Geen lijsten in Archief..",
+  "no-archived-swimlanes": "Geen swimlanes in Archief.",
   "no-results": "Geen resultaten",
   "no-results": "Geen resultaten",
   "normal": "Normaal",
   "normal": "Normaal",
   "normal-desc": "Kan de kaarten zien en wijzigen. Kan de instellingen niet wijzigen.",
   "normal-desc": "Kan de kaarten zien en wijzigen. Kan de instellingen niet wijzigen.",
@@ -423,13 +425,13 @@
   "restore": "Herstel",
   "restore": "Herstel",
   "save": "Opslaan",
   "save": "Opslaan",
   "search": "Zoek",
   "search": "Zoek",
-  "rules": "Rules",
+  "rules": "Regels",
   "search-cards": "Zoeken in kaart titels en omschrijvingen op dit bord",
   "search-cards": "Zoeken in kaart titels en omschrijvingen op dit bord",
   "search-example": "Tekst om naar te zoeken?",
   "search-example": "Tekst om naar te zoeken?",
   "select-color": "Selecteer kleur",
   "select-color": "Selecteer kleur",
   "set-wip-limit-value": "Zet een limiet voor het maximaal aantal taken in deze lijst",
   "set-wip-limit-value": "Zet een limiet voor het maximaal aantal taken in deze lijst",
   "setWipLimitPopup-title": "Zet een WIP limiet",
   "setWipLimitPopup-title": "Zet een WIP limiet",
-  "shortcut-assign-self": "Wijs jezelf toe aan huidige kaart",
+  "shortcut-assign-self": "Voeg jezelf toe aan huidige kaart",
   "shortcut-autocomplete-emoji": "Emojis automatisch aanvullen",
   "shortcut-autocomplete-emoji": "Emojis automatisch aanvullen",
   "shortcut-autocomplete-members": "Leden automatisch aanvullen",
   "shortcut-autocomplete-members": "Leden automatisch aanvullen",
   "shortcut-clear-filters": "Alle filters vrijmaken",
   "shortcut-clear-filters": "Alle filters vrijmaken",
@@ -459,7 +461,7 @@
   "tracking": "Volgen",
   "tracking": "Volgen",
   "tracking-info": "Je wordt op de hoogte gesteld als er veranderingen zijn aan de kaarten waar je lid of maker van bent.",
   "tracking-info": "Je wordt op de hoogte gesteld als er veranderingen zijn aan de kaarten waar je lid of maker van bent.",
   "type": "Type",
   "type": "Type",
-  "unassign-member": "Lid ontkennen",
+  "unassign-member": "Lid verwijderen",
   "unsaved-description": "Je hebt een niet opgeslagen beschrijving.",
   "unsaved-description": "Je hebt een niet opgeslagen beschrijving.",
   "unwatch": "Niet bekijken",
   "unwatch": "Niet bekijken",
   "upload": "Upload",
   "upload": "Upload",
@@ -467,7 +469,7 @@
   "uploaded-avatar": "Avatar is geüpload",
   "uploaded-avatar": "Avatar is geüpload",
   "username": "Gebruikersnaam",
   "username": "Gebruikersnaam",
   "view-it": "Bekijk het",
   "view-it": "Bekijk het",
-  "warn-list-archived": "warning: this card is in an list at Archive",
+  "warn-list-archived": "Let op: deze kaart zit in gearchiveerde lijst",
   "watch": "Bekijk",
   "watch": "Bekijk",
   "watching": "Bekijken",
   "watching": "Bekijken",
   "watching-info": "Je zal op de hoogte worden gesteld als er een verandering gebeurt op dit bord.",
   "watching-info": "Je zal op de hoogte worden gesteld als er een verandering gebeurt op dit bord.",
@@ -500,7 +502,7 @@
   "smtp-password": "Wachtwoord",
   "smtp-password": "Wachtwoord",
   "smtp-tls": "TLS ondersteuning",
   "smtp-tls": "TLS ondersteuning",
   "send-from": "Van",
   "send-from": "Van",
-  "send-smtp-test": "Verzend een email naar uzelf",
+  "send-smtp-test": "Verzend een test email naar uzelf",
   "invitation-code": "Uitnodigings code",
   "invitation-code": "Uitnodigings code",
   "email-invite-register-subject": "__inviter__ heeft je een uitnodiging gestuurd",
   "email-invite-register-subject": "__inviter__ heeft je een uitnodiging gestuurd",
   "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
   "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
@@ -542,30 +544,30 @@
   "createdAt": "Gemaakt op",
   "createdAt": "Gemaakt op",
   "verified": "Geverifieerd",
   "verified": "Geverifieerd",
   "active": "Actief",
   "active": "Actief",
-  "card-received": "Received",
-  "card-received-on": "Received on",
-  "card-end": "End",
-  "card-end-on": "Ends on",
-  "editCardReceivedDatePopup-title": "Change received date",
-  "editCardEndDatePopup-title": "Change end date",
-  "setCardColorPopup-title": "Set color",
-  "setCardActionsColorPopup-title": "Choose a color",
-  "setSwimlaneColorPopup-title": "Choose a color",
-  "setListColorPopup-title": "Choose a color",
-  "assigned-by": "Assigned By",
-  "requested-by": "Requested By",
+  "card-received": "Ontvangen",
+  "card-received-on": "Ontvangen op",
+  "card-end": "Einde",
+  "card-end-on": "Eindigt op",
+  "editCardReceivedDatePopup-title": "Pas ontvangstdatum aan",
+  "editCardEndDatePopup-title": "Wijzig einddatum",
+  "setCardColorPopup-title": "Stel kleur in",
+  "setCardActionsColorPopup-title": "Kies een kleur",
+  "setSwimlaneColorPopup-title": "Kies een kleur",
+  "setListColorPopup-title": "Kies een kleur",
+  "assigned-by": "Toegewezen Door",
+  "requested-by": "Aangevraagd Door",
   "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
   "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
-  "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+  "delete-board-confirm-popup": "Alle lijsten, kaarten, labels en activiteiten zullen worden verwijderd en je kunt de bordinhoud niet terughalen. Er is geen herstelmogelijkheid. ",
   "boardDeletePopup-title": "Delete Board?",
   "boardDeletePopup-title": "Delete Board?",
   "delete-board": "Delete Board",
   "delete-board": "Delete Board",
-  "default-subtasks-board": "Subtasks for __board__ board",
+  "default-subtasks-board": "Subtaken voor __board__ bord",
   "default": "Default",
   "default": "Default",
   "queue": "Queue",
   "queue": "Queue",
-  "subtask-settings": "Subtasks Settings",
-  "boardSubtaskSettingsPopup-title": "Board Subtasks Settings",
-  "show-subtasks-field": "Cards can have subtasks",
-  "deposit-subtasks-board": "Deposit subtasks to this board:",
-  "deposit-subtasks-list": "Landing list for subtasks deposited here:",
+  "subtask-settings": "Subtaak Instellingen",
+  "boardSubtaskSettingsPopup-title": "Bord Subtaak Instellingen",
+  "show-subtasks-field": "Kaarten kunnen subtaken hebben",
+  "deposit-subtasks-board": "Plaats subtaken op dit bord:",
+  "deposit-subtasks-list": "Plaats subtaken in deze lijst:",
   "show-parent-in-minicard": "Show parent in minicard:",
   "show-parent-in-minicard": "Show parent in minicard:",
   "prefix-with-full-path": "Prefix with full path",
   "prefix-with-full-path": "Prefix with full path",
   "prefix-with-parent": "Prefix with parent",
   "prefix-with-parent": "Prefix with parent",
@@ -577,21 +579,21 @@
   "no-parent": "Don't show parent",
   "no-parent": "Don't show parent",
   "activity-added-label": "added label '%s' to %s",
   "activity-added-label": "added label '%s' to %s",
   "activity-removed-label": "removed label '%s' from %s",
   "activity-removed-label": "removed label '%s' from %s",
-  "activity-delete-attach": "deleted an attachment from %s",
+  "activity-delete-attach": "een bijlage verwijderd van %s",
   "activity-added-label-card": "added label '%s'",
   "activity-added-label-card": "added label '%s'",
   "activity-removed-label-card": "removed label '%s'",
   "activity-removed-label-card": "removed label '%s'",
-  "activity-delete-attach-card": "deleted an attachment",
+  "activity-delete-attach-card": "een bijlage verwijderd",
   "activity-set-customfield": "set custom field '%s' to '%s' in %s",
   "activity-set-customfield": "set custom field '%s' to '%s' in %s",
   "activity-unset-customfield": "unset custom field '%s' in %s",
   "activity-unset-customfield": "unset custom field '%s' in %s",
   "r-rule": "Rule",
   "r-rule": "Rule",
   "r-add-trigger": "Add trigger",
   "r-add-trigger": "Add trigger",
   "r-add-action": "Add action",
   "r-add-action": "Add action",
-  "r-board-rules": "Board rules",
+  "r-board-rules": "Bord regels",
   "r-add-rule": "Add rule",
   "r-add-rule": "Add rule",
   "r-view-rule": "View rule",
   "r-view-rule": "View rule",
   "r-delete-rule": "Delete rule",
   "r-delete-rule": "Delete rule",
   "r-new-rule-name": "New rule title",
   "r-new-rule-name": "New rule title",
-  "r-no-rules": "No rules",
+  "r-no-rules": "Geen regels",
   "r-when-a-card": "When a card",
   "r-when-a-card": "When a card",
   "r-is": "is",
   "r-is": "is",
   "r-is-moved": "is moved",
   "r-is-moved": "is moved",
@@ -602,8 +604,8 @@
   "set-filter": "Set Filter",
   "set-filter": "Set Filter",
   "r-moved-to": "Moved to",
   "r-moved-to": "Moved to",
   "r-moved-from": "Moved from",
   "r-moved-from": "Moved from",
-  "r-archived": "Moved to Archive",
-  "r-unarchived": "Restored from Archive",
+  "r-archived": "Verplaatst naar Archief",
+  "r-unarchived": "Teruggehaald uit Archief",
   "r-a-card": "a card",
   "r-a-card": "a card",
   "r-when-a-label-is": "When a label is",
   "r-when-a-label-is": "When a label is",
   "r-when-the-label": "When the label",
   "r-when-the-label": "When the label",
@@ -611,7 +613,7 @@
   "r-when-a-member": "When a member is",
   "r-when-a-member": "When a member is",
   "r-when-the-member": "When the member",
   "r-when-the-member": "When the member",
   "r-name": "name",
   "r-name": "name",
-  "r-when-a-attach": "When an attachment",
+  "r-when-a-attach": "Als een bijlage",
   "r-when-a-checklist": "When a checklist is",
   "r-when-a-checklist": "When a checklist is",
   "r-when-the-checklist": "When the checklist",
   "r-when-the-checklist": "When the checklist",
   "r-completed": "Completed",
   "r-completed": "Completed",
@@ -624,15 +626,15 @@
   "r-top-of": "Top of",
   "r-top-of": "Top of",
   "r-bottom-of": "Bottom of",
   "r-bottom-of": "Bottom of",
   "r-its-list": "its list",
   "r-its-list": "its list",
-  "r-archive": "Move to Archive",
-  "r-unarchive": "Restore from Archive",
+  "r-archive": "Verplaats naar Archief",
+  "r-unarchive": "Terughalen uit Archief",
   "r-card": "card",
   "r-card": "card",
   "r-add": "Toevoegen",
   "r-add": "Toevoegen",
   "r-remove": "Remove",
   "r-remove": "Remove",
   "r-label": "label",
   "r-label": "label",
   "r-member": "member",
   "r-member": "member",
   "r-remove-all": "Remove all members from the card",
   "r-remove-all": "Remove all members from the card",
-  "r-set-color": "Set color to",
+  "r-set-color": "Wijzig kleur naar",
   "r-checklist": "checklist",
   "r-checklist": "checklist",
   "r-check-all": "Check all",
   "r-check-all": "Check all",
   "r-uncheck-all": "Uncheck all",
   "r-uncheck-all": "Uncheck all",
@@ -641,7 +643,7 @@
   "r-uncheck": "Uncheck",
   "r-uncheck": "Uncheck",
   "r-item": "item",
   "r-item": "item",
   "r-of-checklist": "of checklist",
   "r-of-checklist": "of checklist",
-  "r-send-email": "Send an email",
+  "r-send-email": "Verzend een email",
   "r-to": "to",
   "r-to": "to",
   "r-subject": "subject",
   "r-subject": "subject",
   "r-rule-details": "Rule details",
   "r-rule-details": "Rule details",
@@ -649,12 +651,12 @@
   "r-d-move-to-top-spec": "Move card to top of list",
   "r-d-move-to-top-spec": "Move card to top of list",
   "r-d-move-to-bottom-gen": "Move card to bottom of its list",
   "r-d-move-to-bottom-gen": "Move card to bottom of its list",
   "r-d-move-to-bottom-spec": "Move card to bottom of list",
   "r-d-move-to-bottom-spec": "Move card to bottom of list",
-  "r-d-send-email": "Send email",
+  "r-d-send-email": "Verzend email",
   "r-d-send-email-to": "to",
   "r-d-send-email-to": "to",
   "r-d-send-email-subject": "subject",
   "r-d-send-email-subject": "subject",
   "r-d-send-email-message": "message",
   "r-d-send-email-message": "message",
-  "r-d-archive": "Move card to Archive",
-  "r-d-unarchive": "Restore card from Archive",
+  "r-d-archive": "Verplaats kaart naar Archief",
+  "r-d-unarchive": "Haal kaart terug uit Archief",
   "r-d-add-label": "Add label",
   "r-d-add-label": "Add label",
   "r-d-remove-label": "Remove label",
   "r-d-remove-label": "Remove label",
   "r-create-card": "Create new card",
   "r-create-card": "Create new card",
@@ -684,8 +686,8 @@
   "r-datefield": "date field",
   "r-datefield": "date field",
   "r-df-start-at": "start",
   "r-df-start-at": "start",
   "r-df-due-at": "due",
   "r-df-due-at": "due",
-  "r-df-end-at": "end",
-  "r-df-received-at": "received",
+  "r-df-end-at": "einde",
+  "r-df-received-at": "ontvangen",
   "r-to-current-datetime": "to current date/time",
   "r-to-current-datetime": "to current date/time",
   "r-remove-value-from": "Remove value from",
   "r-remove-value-from": "Remove value from",
   "ldap": "LDAP",
   "ldap": "LDAP",
@@ -696,8 +698,8 @@
   "custom-product-name": "Custom Product Name",
   "custom-product-name": "Custom Product Name",
   "layout": "Layout",
   "layout": "Layout",
   "hide-logo": "Hide Logo",
   "hide-logo": "Hide Logo",
-  "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
-  "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
+  "add-custom-html-after-body-start": "Voeg eigen HTML toe na <body> start",
+  "add-custom-html-before-body-end": "Voeg eigen HTML toe voor </body> einde",
   "error-undefined": "Something went wrong",
   "error-undefined": "Something went wrong",
   "error-ldap-login": "An error occurred while trying to login",
   "error-ldap-login": "An error occurred while trying to login",
   "display-authentication-method": "Display Authentication Method",
   "display-authentication-method": "Display Authentication Method",
@@ -705,19 +707,19 @@
   "duplicate-board": "Duplicate Board",
   "duplicate-board": "Duplicate Board",
   "people-number": "The number of people is:",
   "people-number": "The number of people is:",
   "swimlaneDeletePopup-title": "Delete Swimlane ?",
   "swimlaneDeletePopup-title": "Delete Swimlane ?",
-  "swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.",
+  "swimlane-delete-pop": "Alle acties zullen verwijderd worden van de activiteiten feed en je kunt de swimlane niet terughalen. Er is geen herstelmogelijkheid.",
   "restore-all": "Restore all",
   "restore-all": "Restore all",
   "delete-all": "Delete all",
   "delete-all": "Delete all",
   "loading": "Loading, please wait.",
   "loading": "Loading, please wait.",
   "previous_as": "last time was",
   "previous_as": "last time was",
   "act-a-dueAt": "modified due time to \nWhen: __timeValue__\nWhere: __card__\n previous due was __timeOldValue__",
   "act-a-dueAt": "modified due time to \nWhen: __timeValue__\nWhere: __card__\n previous due was __timeOldValue__",
-  "act-a-endAt": "modified ending time to __timeValue__ from (__timeOldValue__)",
+  "act-a-endAt": "einddatum gewijzigd naar __timeValue__ van (__timeOldValue__)",
   "act-a-startAt": "modified starting time to __timeValue__ from (__timeOldValue__)",
   "act-a-startAt": "modified starting time to __timeValue__ from (__timeOldValue__)",
-  "act-a-receivedAt": "modified received time to __timeValue__ from (__timeOldValue__)",
+  "act-a-receivedAt": "ontvangstdatum gewijzigd naar __timeValue__ van (__timeOldValue__)",
   "a-dueAt": "modified due time to be",
   "a-dueAt": "modified due time to be",
-  "a-endAt": "modified ending time to be",
+  "a-endAt": "einddatum gewijzigd naar",
   "a-startAt": "modified starting time to be",
   "a-startAt": "modified starting time to be",
-  "a-receivedAt": "modified received time to be",
+  "a-receivedAt": "ontvangstdatum gewijzigd naar",
   "almostdue": "current due time %s is approaching",
   "almostdue": "current due time %s is approaching",
   "pastdue": "current due time %s is past",
   "pastdue": "current due time %s is past",
   "duenow": "current due time %s is today",
   "duenow": "current due time %s is today",
@@ -726,7 +728,7 @@
   "act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
   "act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
   "act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
   "act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
   "act-atUserComment": "You were mentioned in [__board__] __card__",
   "act-atUserComment": "You were mentioned in [__board__] __card__",
-  "delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
-  "accounts-allowUserDelete": "Allow users to self delete their account",
+  "delete-user-confirm-popup": "Weet je zeker dat je dit account wilt verwijderen? Er is geen herstelmogelijkheid.",
+  "accounts-allowUserDelete": "Sta gebruikers toe om hun eigen account te verwijderen",
   "hide-minicard-label-text": "Hide minicard label text"
   "hide-minicard-label-text": "Hide minicard label text"
 }
 }

+ 2 - 0
i18n/oc.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "Pas cap d'etiqueta",
   "filter-no-label": "Pas cap d'etiqueta",
   "filter-no-member": "Pas cap de participant",
   "filter-no-member": "Pas cap de participant",
   "filter-no-custom-fields": "Pas de camp personalizat",
   "filter-no-custom-fields": "Pas de camp personalizat",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Lo filtre es activat",
   "filter-on": "Lo filtre es activat",
   "filter-on-desc": "Filtratz las cartas dins aqueste tablèu. Picar aquí per editar los filtres",
   "filter-on-desc": "Filtratz las cartas dins aqueste tablèu. Picar aquí per editar los filtres",
   "filter-to-selection": "Filtrar la seleccion",
   "filter-to-selection": "Filtrar la seleccion",

+ 6 - 4
i18n/pl.i18n.json

@@ -73,8 +73,8 @@
   "activity-unchecked-item-card": "odznaczono %s w liście zadań %s",
   "activity-unchecked-item-card": "odznaczono %s w liście zadań %s",
   "activity-checklist-completed-card": "wykonał(a) wszystkie zadania z listy __checklist__ na karcie __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
   "activity-checklist-completed-card": "wykonał(a) wszystkie zadania z listy __checklist__ na karcie __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
   "activity-checklist-uncompleted-card": "wycofano ukończenie listy zadań %s",
   "activity-checklist-uncompleted-card": "wycofano ukończenie listy zadań %s",
-  "activity-editComment": "edited comment %s",
-  "activity-deleteComment": "deleted comment %s",
+  "activity-editComment": "edytował(a) komentarz %s",
+  "activity-deleteComment": "usunął/ęła komentarz %s",
   "add-attachment": "Dodaj załącznik",
   "add-attachment": "Dodaj załącznik",
   "add-board": "Dodaj tablicę",
   "add-board": "Dodaj tablicę",
   "add-card": "Dodaj kartę",
   "add-card": "Dodaj kartę",
@@ -106,11 +106,11 @@
   "archive-swimlane": "Przenieś diagram czynności do Archiwum",
   "archive-swimlane": "Przenieś diagram czynności do Archiwum",
   "archive-selection": "Przenieś zaznaczone do Archiwum",
   "archive-selection": "Przenieś zaznaczone do Archiwum",
   "archiveBoardPopup-title": "Przenieść tablicę do Archiwum?",
   "archiveBoardPopup-title": "Przenieść tablicę do Archiwum?",
-  "archived-items": "Zarchiwizuj",
+  "archived-items": "Archiwum",
   "archived-boards": "Tablice w Archiwum",
   "archived-boards": "Tablice w Archiwum",
   "restore-board": "Przywróć tablicę",
   "restore-board": "Przywróć tablicę",
   "no-archived-boards": "Brak tablic w Archiwum.",
   "no-archived-boards": "Brak tablic w Archiwum.",
-  "archives": "Zarchiwizuj",
+  "archives": "Archiwum",
   "template": "Szablon",
   "template": "Szablon",
   "templates": "Szablony",
   "templates": "Szablony",
   "assign-member": "Dodaj członka",
   "assign-member": "Dodaj członka",
@@ -306,6 +306,8 @@
   "filter-no-label": "Brak etykiety",
   "filter-no-label": "Brak etykiety",
   "filter-no-member": "Brak członków",
   "filter-no-member": "Brak członków",
   "filter-no-custom-fields": "Brak niestandardowych pól",
   "filter-no-custom-fields": "Brak niestandardowych pól",
+  "filter-show-archive": "Pokaż zarchiwizowane listy",
+  "filter-hide-empty": "Ukryj puste listy",
   "filter-on": "Filtr jest włączony",
   "filter-on": "Filtr jest włączony",
   "filter-on-desc": "Filtrujesz karty na tej tablicy. Kliknij tutaj by edytować filtr.",
   "filter-on-desc": "Filtrujesz karty na tej tablicy. Kliknij tutaj by edytować filtr.",
   "filter-to-selection": "Odfiltruj zaznaczenie",
   "filter-to-selection": "Odfiltruj zaznaczenie",

+ 3 - 1
i18n/pt-BR.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "Sem etiquetas",
   "filter-no-label": "Sem etiquetas",
   "filter-no-member": "Sem membros",
   "filter-no-member": "Sem membros",
   "filter-no-custom-fields": "Não há campos customizados",
   "filter-no-custom-fields": "Não há campos customizados",
+  "filter-show-archive": "Mostrar listas arquivadas",
+  "filter-hide-empty": "Esconder listas vazias",
   "filter-on": "Filtro está ativo",
   "filter-on": "Filtro está ativo",
   "filter-on-desc": "Você está filtrando cartões neste quadro. Clique aqui para editar o filtro.",
   "filter-on-desc": "Você está filtrando cartões neste quadro. Clique aqui para editar o filtro.",
   "filter-to-selection": "Filtrar esta seleção",
   "filter-to-selection": "Filtrar esta seleção",
@@ -313,7 +315,7 @@
   "advanced-filter-description": "Filtros avançados permitem escrever uma \"string\" contendo os seguintes operadores: == != <= >= && || (). Um espaco é utilizado como separador entre os operadores. Você pode filtrar para todos os campos personalizados escrevendo os nomes e valores. Exemplo: Campo1 == Valor1. Nota^Se o campo ou valor tiver espaços você precisa encapsular eles em citações sozinhas. Exemplo: Campo1 == Eu\\sou. Também você pode combinar múltiplas condições. Exemplo: C1 == V1 || C1 == V2. Normalmente todos os operadores são interpretados da esquerda para direita. Você pode alterar a ordem colocando parênteses - como ma expressão matemática. Exemplo: C1 == V1 && (C2 == V2 || C2 == V3). Você tamb~em pode pesquisar campos de texto usando regex: C1 == /Tes.*/i",
   "advanced-filter-description": "Filtros avançados permitem escrever uma \"string\" contendo os seguintes operadores: == != <= >= && || (). Um espaco é utilizado como separador entre os operadores. Você pode filtrar para todos os campos personalizados escrevendo os nomes e valores. Exemplo: Campo1 == Valor1. Nota^Se o campo ou valor tiver espaços você precisa encapsular eles em citações sozinhas. Exemplo: Campo1 == Eu\\sou. Também você pode combinar múltiplas condições. Exemplo: C1 == V1 || C1 == V2. Normalmente todos os operadores são interpretados da esquerda para direita. Você pode alterar a ordem colocando parênteses - como ma expressão matemática. Exemplo: C1 == V1 && (C2 == V2 || C2 == V3). Você tamb~em pode pesquisar campos de texto usando regex: C1 == /Tes.*/i",
   "fullname": "Nome Completo",
   "fullname": "Nome Completo",
   "header-logo-title": "Voltar para a lista de quadros.",
   "header-logo-title": "Voltar para a lista de quadros.",
-  "hide-system-messages": "Esconde mensagens de sistema",
+  "hide-system-messages": "Esconder mensagens de sistema",
   "headerBarCreateBoardPopup-title": "Criar Quadro",
   "headerBarCreateBoardPopup-title": "Criar Quadro",
   "home": "Início",
   "home": "Início",
   "import": "Importar",
   "import": "Importar",

+ 42 - 40
i18n/pt.i18n.json

@@ -17,14 +17,14 @@
   "act-completeChecklist": "completou a lista de verificação __checklist__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
   "act-completeChecklist": "completou a lista de verificação __checklist__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
   "act-uncompleteChecklist": "descompletou a lista de verificação __checklist__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
   "act-uncompleteChecklist": "descompletou a lista de verificação __checklist__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
   "act-addComment": "comentou no cartão __card__: __comment__ na lista __list__ na pista __swimlane__ no quadro __board__",
   "act-addComment": "comentou no cartão __card__: __comment__ na lista __list__ na pista __swimlane__ no quadro __board__",
-  "act-editComment": "edited comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-deleteComment": "deleted comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-editComment": "editou o comentário no cartão __card__: __comment__ na lista __list__ na pista __swimlane__ no quadro __board__",
+  "act-deleteComment": "apagou o comentário no cartão __card__: __comment__ na lista __list__ na pista __swimlane__ no quadro __board__",
   "act-createBoard": "criou o quadro __board__",
   "act-createBoard": "criou o quadro __board__",
   "act-createSwimlane": "criou a pista __swimlane__ no quadro __board__",
   "act-createSwimlane": "criou a pista __swimlane__ no quadro __board__",
   "act-createCard": "criou o cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
   "act-createCard": "criou o cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
-  "act-createCustomField": "created custom field __customField__ at board __board__",
-  "act-deleteCustomField": "deleted custom field __customField__ at board __board__",
-  "act-setCustomField": "edited custom field __customField__: __customFieldValue__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-createCustomField": "criou o campo personalizado __customField__ no quadro __board__",
+  "act-deleteCustomField": "apagou o campo personalizado __customField__ no quadro __board__",
+  "act-setCustomField": "editou o campo personalizado __customField__: __customFieldValue__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
   "act-createList": "adicionou a lista __list__ ao quadro __board__",
   "act-createList": "adicionou a lista __list__ ao quadro __board__",
   "act-addBoardMember": "adicionou o membro __member__ ao quadro __board__",
   "act-addBoardMember": "adicionou o membro __member__ ao quadro __board__",
   "act-archivedBoard": "O quadro __board__ foi movido para o Arquivo",
   "act-archivedBoard": "O quadro __board__ foi movido para o Arquivo",
@@ -73,8 +73,8 @@
   "activity-unchecked-item-card": "desmarcou %s na lista de verificação %s",
   "activity-unchecked-item-card": "desmarcou %s na lista de verificação %s",
   "activity-checklist-completed-card": "completou a lista de verificação __checklist__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
   "activity-checklist-completed-card": "completou a lista de verificação __checklist__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
   "activity-checklist-uncompleted-card": "descompletou a lista de verificação %s",
   "activity-checklist-uncompleted-card": "descompletou a lista de verificação %s",
-  "activity-editComment": "edited comment %s",
-  "activity-deleteComment": "deleted comment %s",
+  "activity-editComment": "editou o comentário %s",
+  "activity-deleteComment": "apagou o comentário %s",
   "add-attachment": "Adicionar Anexo",
   "add-attachment": "Adicionar Anexo",
   "add-board": "Adicionar Quadro",
   "add-board": "Adicionar Quadro",
   "add-card": "Adicionar Cartão",
   "add-card": "Adicionar Cartão",
@@ -306,6 +306,8 @@
   "filter-no-label": "Sem etiquetas",
   "filter-no-label": "Sem etiquetas",
   "filter-no-member": "Sem membros",
   "filter-no-member": "Sem membros",
   "filter-no-custom-fields": "Sem Campos Personalizados",
   "filter-no-custom-fields": "Sem Campos Personalizados",
+  "filter-show-archive": "Mostrar listas arquivadas",
+  "filter-hide-empty": "Ocultar listas vazias",
   "filter-on": "Filtro está activo",
   "filter-on": "Filtro está activo",
   "filter-on-desc": "Está a filtrar cartões neste quadro. Clique aqui para editar o filtro.",
   "filter-on-desc": "Está a filtrar cartões neste quadro. Clique aqui para editar o filtro.",
   "filter-to-selection": "Filtrar esta selecção",
   "filter-to-selection": "Filtrar esta selecção",
@@ -514,10 +516,10 @@
   "new-outgoing-webhook": "Novo Webhook de saída",
   "new-outgoing-webhook": "Novo Webhook de saída",
   "no-name": "(Desconhecido)",
   "no-name": "(Desconhecido)",
   "Node_version": "Versão do Node",
   "Node_version": "Versão do Node",
-  "Meteor_version": "Meteor version",
-  "MongoDB_version": "MongoDB version",
-  "MongoDB_storage_engine": "MongoDB storage engine",
-  "MongoDB_Oplog_enabled": "MongoDB Oplog enabled",
+  "Meteor_version": "Versão do Meteor",
+  "MongoDB_version": "Versão do MongoDB",
+  "MongoDB_storage_engine": "Versão do motor de armazenamento do MongoDB",
+  "MongoDB_Oplog_enabled": "Oplog do MongoDB activo",
   "OS_Arch": "Arquitectura do SO",
   "OS_Arch": "Arquitectura do SO",
   "OS_Cpus": "Quantidade de CPUs do SO",
   "OS_Cpus": "Quantidade de CPUs do SO",
   "OS_Freemem": "Memória Disponível do SO",
   "OS_Freemem": "Memória Disponível do SO",
@@ -679,15 +681,15 @@
   "r-board-note": "Nota: deixe o campo vazio para corresponder a todos os valores possíveis.",
   "r-board-note": "Nota: deixe o campo vazio para corresponder a todos os valores possíveis.",
   "r-checklist-note": "Nota: itens de listas de verificação devem ser escritos separados por vírgulas.",
   "r-checklist-note": "Nota: itens de listas de verificação devem ser escritos separados por vírgulas.",
   "r-when-a-card-is-moved": "Quando um cartão é movido de outra lista",
   "r-when-a-card-is-moved": "Quando um cartão é movido de outra lista",
-  "r-set": "Set",
-  "r-update": "Update",
-  "r-datefield": "date field",
-  "r-df-start-at": "start",
-  "r-df-due-at": "due",
-  "r-df-end-at": "end",
-  "r-df-received-at": "received",
-  "r-to-current-datetime": "to current date/time",
-  "r-remove-value-from": "Remove value from",
+  "r-set": "Definir",
+  "r-update": "Actualizar",
+  "r-datefield": "campo de data",
+  "r-df-start-at": "início",
+  "r-df-due-at": "data limite",
+  "r-df-end-at": "fim",
+  "r-df-received-at": "recebido",
+  "r-to-current-datetime": "até à data/hora actual",
+  "r-remove-value-from": "Remover valor de",
   "ldap": "LDAP",
   "ldap": "LDAP",
   "oauth2": "OAuth2",
   "oauth2": "OAuth2",
   "cas": "CAS",
   "cas": "CAS",
@@ -709,24 +711,24 @@
   "restore-all": "Restaurar todos",
   "restore-all": "Restaurar todos",
   "delete-all": "Apagar todos",
   "delete-all": "Apagar todos",
   "loading": "A carregar, por favor aguarde.",
   "loading": "A carregar, por favor aguarde.",
-  "previous_as": "last time was",
-  "act-a-dueAt": "modified due time to \nWhen: __timeValue__\nWhere: __card__\n previous due was __timeOldValue__",
-  "act-a-endAt": "modified ending time to __timeValue__ from (__timeOldValue__)",
-  "act-a-startAt": "modified starting time to __timeValue__ from (__timeOldValue__)",
-  "act-a-receivedAt": "modified received time to __timeValue__ from (__timeOldValue__)",
-  "a-dueAt": "modified due time to be",
-  "a-endAt": "modified ending time to be",
-  "a-startAt": "modified starting time to be",
-  "a-receivedAt": "modified received time to be",
-  "almostdue": "current due time %s is approaching",
-  "pastdue": "current due time %s is past",
-  "duenow": "current due time %s is today",
-  "act-withDue": "__card__ due reminders [__board__]",
-  "act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
-  "act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
-  "act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
-  "act-atUserComment": "You were mentioned in [__board__] __card__",
-  "delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
-  "accounts-allowUserDelete": "Allow users to self delete their account",
-  "hide-minicard-label-text": "Hide minicard label text"
+  "previous_as": "última data era",
+  "act-a-dueAt": "modificou a data limite para \nQuando: __timeValue__\nOnde: __card__\n a data limite anterior era __timeOldValue__",
+  "act-a-endAt": "modificou a data de fim para __timeValue__ de (__timeOldValue__)",
+  "act-a-startAt": "modificou a data de início para __timeValue__ de (__timeOldValue__)",
+  "act-a-receivedAt": "modificou a data recebida para __timeValue__ de (__timeOldValue__)",
+  "a-dueAt": "modificou a data limite para",
+  "a-endAt": "modificou a data de fim para",
+  "a-startAt": "modificou a data de início para",
+  "a-receivedAt": "modificou a data recebida para",
+  "almostdue": "a data limite actual %s está-se a aproximar",
+  "pastdue": "a data limite actual %s já passou",
+  "duenow": "a data limite actual %s é hoje",
+  "act-withDue": "lembretes das datas limites de __card__ [__board__]",
+  "act-almostdue": "estava a lembrar que a data limite actual (__timeValue__) de __card__ está-se a aproximar",
+  "act-pastdue": "estava a lembrar que a data limite (__timeValue__) de __card__ já passou",
+  "act-duenow": "estava a lembrar que a data limite (__timeValue__) de __card__ é agora",
+  "act-atUserComment": "Foi mencionado em [__board__] __card__",
+  "delete-user-confirm-popup": "Tem a certeza que pretende apagar esta conta? Não há como desfazer.",
+  "accounts-allowUserDelete": "Permitir aos utilizadores apagar as suas próprias contas",
+  "hide-minicard-label-text": "Ocultar texto das etiquetas dos mini-cartões"
 }
 }

+ 2 - 0
i18n/ro.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "No label",
   "filter-no-label": "No label",
   "filter-no-member": "No member",
   "filter-no-member": "No member",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filter is on",
   "filter-on": "Filter is on",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-to-selection": "Filter to selection",
   "filter-to-selection": "Filter to selection",

+ 11 - 9
i18n/ru.i18n.json

@@ -5,7 +5,7 @@
   "act-deleteAttachment": "удалил вложение __attachment__ из карточки __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
   "act-deleteAttachment": "удалил вложение __attachment__ из карточки __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
   "act-addSubtask": "добавил подзадачу __subtask__ для карточки __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
   "act-addSubtask": "добавил подзадачу __subtask__ для карточки __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
   "act-addLabel": "добавил метку __label__ в карточку __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
   "act-addLabel": "добавил метку __label__ в карточку __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
-  "act-addedLabel": "Добавлена метка __label__ в карточку __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
+  "act-addedLabel": "добавил метку __label__ в карточку __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
   "act-removeLabel": "Снята метка __label__ с карточки __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
   "act-removeLabel": "Снята метка __label__ с карточки __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
   "act-removedLabel": "Снята метка __label__ с карточки __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
   "act-removedLabel": "Снята метка __label__ с карточки __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
   "act-addChecklist": "добавил контрольный список __checklist__ в карточку __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
   "act-addChecklist": "добавил контрольный список __checklist__ в карточку __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
@@ -306,6 +306,8 @@
   "filter-no-label": "Нет метки",
   "filter-no-label": "Нет метки",
   "filter-no-member": "Нет участников",
   "filter-no-member": "Нет участников",
   "filter-no-custom-fields": "Нет настраиваемых полей",
   "filter-no-custom-fields": "Нет настраиваемых полей",
+  "filter-show-archive": "Показать архивные списки",
+  "filter-hide-empty": "Скрыть пустые списки",
   "filter-on": "Включен фильтр",
   "filter-on": "Включен фильтр",
   "filter-on-desc": "Показываются карточки, соответствующие настройкам фильтра. Нажмите для редактирования.",
   "filter-on-desc": "Показываются карточки, соответствующие настройкам фильтра. Нажмите для редактирования.",
   "filter-to-selection": "Filter to selection",
   "filter-to-selection": "Filter to selection",
@@ -710,10 +712,10 @@
   "delete-all": "Удалить все",
   "delete-all": "Удалить все",
   "loading": "Идет загрузка, пожалуйста подождите",
   "loading": "Идет загрузка, пожалуйста подождите",
   "previous_as": "в прошлый раз был",
   "previous_as": "в прошлый раз был",
-  "act-a-dueAt": "modified due time to \nWhen: __timeValue__\nWhere: __card__\n previous due was __timeOldValue__",
-  "act-a-endAt": "modified ending time to __timeValue__ from (__timeOldValue__)",
-  "act-a-startAt": "modified starting time to __timeValue__ from (__timeOldValue__)",
-  "act-a-receivedAt": "modified received time to __timeValue__ from (__timeOldValue__)",
+  "act-a-dueAt": "изменил срок выполнения \nСтало: __timeValue__\nВ карточке: __card__\nранее было __timeOldValue__",
+  "act-a-endAt": "изменил время завершения на __timeValue__, было (__timeOldValue__)",
+  "act-a-startAt": "изменил время начала на __timeValue__, было (__timeOldValue__)",
+  "act-a-receivedAt": "изменил время получения на __timeValue__, было (__timeOldValue__)",
   "a-dueAt": "изменил срок выполнения на",
   "a-dueAt": "изменил срок выполнения на",
   "a-endAt": "изменил время завершения на",
   "a-endAt": "изменил время завершения на",
   "a-startAt": "изменил время начала работы на",
   "a-startAt": "изменил время начала работы на",
@@ -721,10 +723,10 @@
   "almostdue": "текущий срок выполнения %s приближается",
   "almostdue": "текущий срок выполнения %s приближается",
   "pastdue": "текущий срок выполнения %s прошел",
   "pastdue": "текущий срок выполнения %s прошел",
   "duenow": "текущий срок выполнения %s сегодня",
   "duenow": "текущий срок выполнения %s сегодня",
-  "act-withDue": "__card__ due reminders [__board__]",
-  "act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
-  "act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
-  "act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
+  "act-withDue": "__card__ напоминания о сроке выполнения [__board__]",
+  "act-almostdue": "напомнил, что скоро завершается срок выполнения (__timeValue__) карточки __card__",
+  "act-pastdue": "напомнил, что срок выполнения (__timeValue__) карточки __card__ прошел",
+  "act-duenow": "напомнил, что срок выполнения (__timeValue__) карточки __card__ — это уже сейчас",
   "act-atUserComment": "Вас упомянули в [__board__] __card__",
   "act-atUserComment": "Вас упомянули в [__board__] __card__",
   "delete-user-confirm-popup": "Вы уверены, что хотите удалить аккаунт? Данное действие необратимо.",
   "delete-user-confirm-popup": "Вы уверены, что хотите удалить аккаунт? Данное действие необратимо.",
   "accounts-allowUserDelete": "Разрешить пользователям удалять собственные аккаунты",
   "accounts-allowUserDelete": "Разрешить пользователям удалять собственные аккаунты",

+ 2 - 0
i18n/sr.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "Nema oznake",
   "filter-no-label": "Nema oznake",
   "filter-no-member": "Nema člana",
   "filter-no-member": "Nema člana",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filter is on",
   "filter-on": "Filter is on",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-to-selection": "Filter to selection",
   "filter-to-selection": "Filter to selection",

+ 2 - 0
i18n/sv.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "Ingen etikett",
   "filter-no-label": "Ingen etikett",
   "filter-no-member": "Ingen medlem",
   "filter-no-member": "Ingen medlem",
   "filter-no-custom-fields": "Inga anpassade fält",
   "filter-no-custom-fields": "Inga anpassade fält",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filter är på",
   "filter-on": "Filter är på",
   "filter-on-desc": "Du filtrerar kort på denna anslagstavla. Klicka här för att redigera filter.",
   "filter-on-desc": "Du filtrerar kort på denna anslagstavla. Klicka här för att redigera filter.",
   "filter-to-selection": "Filter till val",
   "filter-to-selection": "Filter till val",

+ 2 - 0
i18n/sw.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "No label",
   "filter-no-label": "No label",
   "filter-no-member": "No member",
   "filter-no-member": "No member",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filter is on",
   "filter-on": "Filter is on",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-to-selection": "Filter to selection",
   "filter-to-selection": "Filter to selection",

+ 2 - 0
i18n/ta.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "No label",
   "filter-no-label": "No label",
   "filter-no-member": "No member",
   "filter-no-member": "No member",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filter is on",
   "filter-on": "Filter is on",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-to-selection": "Filter to selection",
   "filter-to-selection": "Filter to selection",

+ 2 - 0
i18n/th.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "ไม่มีฉลาก",
   "filter-no-label": "ไม่มีฉลาก",
   "filter-no-member": "ไม่มีสมาชิก",
   "filter-no-member": "ไม่มีสมาชิก",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "กรองบน",
   "filter-on": "กรองบน",
   "filter-on-desc": "คุณกำลังกรองการ์ดในบอร์ดนี้ คลิกที่นี่เพื่อแก้ไขตัวกรอง",
   "filter-on-desc": "คุณกำลังกรองการ์ดในบอร์ดนี้ คลิกที่นี่เพื่อแก้ไขตัวกรอง",
   "filter-to-selection": "กรองตัวเลือก",
   "filter-to-selection": "กรองตัวเลือก",

+ 2 - 0
i18n/tr.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "Etiket yok",
   "filter-no-label": "Etiket yok",
   "filter-no-member": "Üye yok",
   "filter-no-member": "Üye yok",
   "filter-no-custom-fields": "Hiç özel alan yok",
   "filter-no-custom-fields": "Hiç özel alan yok",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filtre aktif",
   "filter-on": "Filtre aktif",
   "filter-on-desc": "Bu panodaki kartları filtreliyorsunuz. Fitreyi düzenlemek için tıklayın.",
   "filter-on-desc": "Bu panodaki kartları filtreliyorsunuz. Fitreyi düzenlemek için tıklayın.",
   "filter-to-selection": "Seçime göre filtreleme yap",
   "filter-to-selection": "Seçime göre filtreleme yap",

+ 2 - 0
i18n/uk.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "No label",
   "filter-no-label": "No label",
   "filter-no-member": "No member",
   "filter-no-member": "No member",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filter is on",
   "filter-on": "Filter is on",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-to-selection": "Filter to selection",
   "filter-to-selection": "Filter to selection",

+ 2 - 0
i18n/vi.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "No label",
   "filter-no-label": "No label",
   "filter-no-member": "No member",
   "filter-no-member": "No member",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filter is on",
   "filter-on": "Filter is on",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-to-selection": "Filter to selection",
   "filter-to-selection": "Filter to selection",

+ 2 - 0
i18n/zh-CN.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "无标签",
   "filter-no-label": "无标签",
   "filter-no-member": "无成员",
   "filter-no-member": "无成员",
   "filter-no-custom-fields": "无自定义字段",
   "filter-no-custom-fields": "无自定义字段",
+  "filter-show-archive": "显示归档的列表",
+  "filter-hide-empty": "隐藏空列表",
   "filter-on": "过滤器启用",
   "filter-on": "过滤器启用",
   "filter-on-desc": "你正在过滤该看板上的卡片,点此编辑过滤。",
   "filter-on-desc": "你正在过滤该看板上的卡片,点此编辑过滤。",
   "filter-to-selection": "要选择的过滤器",
   "filter-to-selection": "要选择的过滤器",

+ 2 - 0
i18n/zh-HK.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "No label",
   "filter-no-label": "No label",
   "filter-no-member": "No member",
   "filter-no-member": "No member",
   "filter-no-custom-fields": "No Custom Fields",
   "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "Filter is on",
   "filter-on": "Filter is on",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
   "filter-to-selection": "Filter to selection",
   "filter-to-selection": "Filter to selection",

+ 2 - 0
i18n/zh-TW.i18n.json

@@ -306,6 +306,8 @@
   "filter-no-label": "沒有標籤",
   "filter-no-label": "沒有標籤",
   "filter-no-member": "沒有成員",
   "filter-no-member": "沒有成員",
   "filter-no-custom-fields": "沒有自訂欄位",
   "filter-no-custom-fields": "沒有自訂欄位",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
   "filter-on": "篩選器已開啟",
   "filter-on": "篩選器已開啟",
   "filter-on-desc": "你正在篩選該看板上的卡片,點此編輯篩選條件。",
   "filter-on-desc": "你正在篩選該看板上的卡片,點此編輯篩選條件。",
   "filter-to-selection": "選擇的篩選條件",
   "filter-to-selection": "選擇的篩選條件",

+ 1 - 4
models/boards.js

@@ -407,10 +407,7 @@ Boards.helpers({
   },
   },
 
 
   lists() {
   lists() {
-    return Lists.find(
-      { boardId: this._id, archived: false },
-      { sort: { sort: 1 } },
-    );
+    return Lists.find({ boardId: this._id }, { sort: { sort: 1 } });
   },
   },
 
 
   nullSortLists() {
   nullSortLists() {

+ 8 - 3
models/users.js

@@ -258,9 +258,14 @@ Users.attachSchema(
 );
 );
 
 
 Users.allow({
 Users.allow({
-  update(userId) {
-    const user = Users.findOne(userId);
-    return user && Meteor.user().isAdmin; // GitHub issue #2590
+  update(userId, doc) {
+    const user = Users.findOne({ _id: userId });
+    if ((user && user.isAdmin) || (Meteor.user() && Meteor.user().isAdmin))
+      return true;
+    if (!user) {
+      return false;
+    }
+    return doc._id === userId;
   },
   },
   remove(userId, doc) {
   remove(userId, doc) {
     const adminsNumber = Users.find({ isAdmin: true }).count();
     const adminsNumber = Users.find({ isAdmin: true }).count();

+ 5207 - 0
package-lock.json

@@ -0,0 +1,5207 @@
+{
+  "name": "wekan",
+  "version": "v3.35.0",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "@babel/code-frame": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+      "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+      "dev": true,
+      "requires": {
+        "@babel/highlight": "^7.0.0"
+      }
+    },
+    "@babel/highlight": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
+      "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.0.0",
+        "esutils": "^2.0.2",
+        "js-tokens": "^4.0.0"
+      }
+    },
+    "@babel/runtime": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz",
+      "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==",
+      "requires": {
+        "regenerator-runtime": "^0.13.2"
+      }
+    },
+    "@samverschueren/stream-to-observable": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz",
+      "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==",
+      "dev": true,
+      "requires": {
+        "any-observable": "^0.3.0"
+      }
+    },
+    "abbrev": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
+    },
+    "acorn": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz",
+      "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==",
+      "dev": true
+    },
+    "acorn-jsx": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz",
+      "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==",
+      "dev": true
+    },
+    "ajv": {
+      "version": "5.5.2",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+      "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+      "requires": {
+        "co": "^4.6.0",
+        "fast-deep-equal": "^1.0.0",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.3.0"
+      }
+    },
+    "ajv-keywords": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+      "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
+      "dev": true
+    },
+    "ansi-escapes": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz",
+      "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==",
+      "dev": true,
+      "requires": {
+        "type-fest": "^0.5.2"
+      }
+    },
+    "ansi-regex": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+    },
+    "ansi-styles": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "dev": true,
+      "requires": {
+        "color-convert": "^1.9.0"
+      }
+    },
+    "any-observable": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz",
+      "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==",
+      "dev": true
+    },
+    "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"
+      }
+    },
+    "argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+      "dev": true,
+      "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",
+      "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+      "dev": true
+    },
+    "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==",
+      "dev": true
+    },
+    "arr-union": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+      "dev": true
+    },
+    "array-includes": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
+      "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.7.0"
+      }
+    },
+    "array-unique": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+      "dev": true
+    },
+    "asn1": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+      "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
+    },
+    "assert-plus": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+    },
+    "assign-symbols": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+      "dev": true
+    },
+    "astral-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+      "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
+      "dev": true
+    },
+    "atob": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+      "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+      "dev": true
+    },
+    "babel-code-frame": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+      "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+      "dev": true,
+      "requires": {
+        "chalk": "^1.1.3",
+        "esutils": "^2.0.2",
+        "js-tokens": "^3.0.2"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
+          }
+        },
+        "js-tokens": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+          "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+          "dev": true
+        }
+      }
+    },
+    "babel-runtime": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+      "requires": {
+        "core-js": "^2.4.0",
+        "regenerator-runtime": "^0.11.0"
+      },
+      "dependencies": {
+        "regenerator-runtime": {
+          "version": "0.11.1",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+          "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
+        }
+      }
+    },
+    "backoff": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz",
+      "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=",
+      "requires": {
+        "precond": "0.2"
+      }
+    },
+    "balanced-match": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+    },
+    "base": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+      "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        }
+      }
+    },
+    "base64-js": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+      "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
+    },
+    "bcrypt": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-3.0.6.tgz",
+      "integrity": "sha512-taA5bCTfXe7FUjKroKky9EXpdhkVvhE5owfxfLYodbrAR1Ul3juLmIQmIQBK4L9a5BuUcE6cqmwT+Da20lF9tg==",
+      "requires": {
+        "nan": "2.13.2",
+        "node-pre-gyp": "0.12.0"
+      }
+    },
+    "brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "requires": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "braces": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+      "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "bson": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/bson/-/bson-4.0.2.tgz",
+      "integrity": "sha512-rBdCxMBCg2aR420e1oKUejjcuPZLTibA7zEhWAlliFWEwzuBCC9Dkp5r7VFFIQB2t1WVsvTbohry575mc7Xw5A==",
+      "requires": {
+        "buffer": "^5.1.0",
+        "long": "^4.0.0"
+      }
+    },
+    "buffer": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.3.0.tgz",
+      "integrity": "sha512-XykNc84nIOC32vZ9euOKbmGAP69JUkXDtBQfLq88c8/6J/gZi/t14A+l/p/9EM2TcT5xNC1MKPCrvO3LVUpVPw==",
+      "requires": {
+        "base64-js": "^1.0.2",
+        "ieee754": "^1.1.4"
+      }
+    },
+    "buffer-from": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
+    },
+    "buffer-shims": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz",
+      "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E="
+    },
+    "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"
+      }
+    },
+    "cache-base": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+      "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+      "dev": true,
+      "requires": {
+        "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"
+      }
+    },
+    "caller-callsite": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
+      "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
+      "dev": true,
+      "requires": {
+        "callsites": "^2.0.0"
+      },
+      "dependencies": {
+        "callsites": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+          "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
+          "dev": true
+        }
+      }
+    },
+    "caller-path": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
+      "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
+      "dev": true,
+      "requires": {
+        "caller-callsite": "^2.0.0"
+      }
+    },
+    "callsites": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+      "dev": true
+    },
+    "chalk": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+      "dev": true,
+      "requires": {
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
+      }
+    },
+    "chardet": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+      "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+      "dev": true
+    },
+    "chownr": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz",
+      "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A=="
+    },
+    "circular-json": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+      "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        }
+      }
+    },
+    "cli-cursor": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+      "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+      "dev": true,
+      "requires": {
+        "restore-cursor": "^3.1.0"
+      }
+    },
+    "cli-truncate": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz",
+      "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=",
+      "dev": true,
+      "requires": {
+        "slice-ansi": "0.0.4",
+        "string-width": "^1.0.1"
+      },
+      "dependencies": {
+        "slice-ansi": {
+          "version": "0.0.4",
+          "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
+          "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=",
+          "dev": true
+        }
+      }
+    },
+    "cli-width": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+      "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+      "dev": true
+    },
+    "co": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
+    },
+    "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="
+    },
+    "collection-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+      "dev": true,
+      "requires": {
+        "map-visit": "^1.0.0",
+        "object-visit": "^1.0.0"
+      }
+    },
+    "color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+      "dev": true,
+      "requires": {
+        "color-name": "1.1.3"
+      }
+    },
+    "color-name": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+      "dev": true
+    },
+    "commander": {
+      "version": "2.20.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
+      "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ=="
+    },
+    "common-tags": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz",
+      "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==",
+      "dev": true
+    },
+    "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==",
+      "dev": true
+    },
+    "concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+    },
+    "concat-stream": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+      "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+      "dev": true,
+      "requires": {
+        "buffer-from": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.2.2",
+        "typedarray": "^0.0.6"
+      }
+    },
+    "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="
+    },
+    "contains-path": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
+      "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
+      "dev": true
+    },
+    "copy-descriptor": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+      "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+      "dev": true
+    },
+    "core-js": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+      "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A=="
+    },
+    "core-util-is": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+    },
+    "cosmiconfig": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
+      "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
+      "dev": true,
+      "requires": {
+        "import-fresh": "^2.0.0",
+        "is-directory": "^0.3.1",
+        "js-yaml": "^3.13.1",
+        "parse-json": "^4.0.0"
+      },
+      "dependencies": {
+        "import-fresh": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+          "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+          "dev": true,
+          "requires": {
+            "caller-path": "^2.0.0",
+            "resolve-from": "^3.0.0"
+          }
+        },
+        "parse-json": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+          "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+          "dev": true,
+          "requires": {
+            "error-ex": "^1.3.1",
+            "json-parse-better-errors": "^1.0.1"
+          }
+        },
+        "resolve-from": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+          "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+          "dev": true
+        }
+      }
+    },
+    "cross-spawn": {
+      "version": "6.0.5",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+      "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+      "dev": true,
+      "requires": {
+        "nice-try": "^1.0.4",
+        "path-key": "^2.0.1",
+        "semver": "^5.5.0",
+        "shebang-command": "^1.2.0",
+        "which": "^1.2.9"
+      }
+    },
+    "cssfilter": {
+      "version": "0.0.10",
+      "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz",
+      "integrity": "sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4="
+    },
+    "dashdash": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+      "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+      "requires": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "date-fns": {
+      "version": "1.30.1",
+      "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz",
+      "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==",
+      "dev": true
+    },
+    "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"
+      }
+    },
+    "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=",
+      "dev": true
+    },
+    "dedent": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
+      "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
+      "dev": true
+    },
+    "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=="
+    },
+    "deep-is": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+      "dev": true
+    },
+    "define-properties": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+      "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+      "dev": true,
+      "requires": {
+        "object-keys": "^1.0.12"
+      }
+    },
+    "define-property": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+      "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+      "dev": true,
+      "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==",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        }
+      }
+    },
+    "delegates": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+      "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
+    },
+    "detect-libc": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+      "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
+    },
+    "dlv": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+      "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+      "dev": true
+    },
+    "doctrine": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+      "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+      "dev": true,
+      "requires": {
+        "esutils": "^2.0.2"
+      }
+    },
+    "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"
+      }
+    },
+    "elegant-spinner": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz",
+      "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=",
+      "dev": true
+    },
+    "emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true
+    },
+    "error-ex": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+      "dev": true,
+      "requires": {
+        "is-arrayish": "^0.2.1"
+      }
+    },
+    "es-abstract": {
+      "version": "1.13.0",
+      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
+      "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
+      "dev": true,
+      "requires": {
+        "es-to-primitive": "^1.2.0",
+        "function-bind": "^1.1.1",
+        "has": "^1.0.3",
+        "is-callable": "^1.1.4",
+        "is-regex": "^1.0.4",
+        "object-keys": "^1.0.12"
+      }
+    },
+    "es-to-primitive": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
+      "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
+      "dev": true,
+      "requires": {
+        "is-callable": "^1.1.4",
+        "is-date-object": "^1.0.1",
+        "is-symbol": "^1.0.2"
+      }
+    },
+    "es6-promise": {
+      "version": "4.2.8",
+      "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
+      "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="
+    },
+    "escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+      "dev": true
+    },
+    "eslint": {
+      "version": "5.16.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz",
+      "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.0.0",
+        "ajv": "^6.9.1",
+        "chalk": "^2.1.0",
+        "cross-spawn": "^6.0.5",
+        "debug": "^4.0.1",
+        "doctrine": "^3.0.0",
+        "eslint-scope": "^4.0.3",
+        "eslint-utils": "^1.3.1",
+        "eslint-visitor-keys": "^1.0.0",
+        "espree": "^5.0.1",
+        "esquery": "^1.0.1",
+        "esutils": "^2.0.2",
+        "file-entry-cache": "^5.0.1",
+        "functional-red-black-tree": "^1.0.1",
+        "glob": "^7.1.2",
+        "globals": "^11.7.0",
+        "ignore": "^4.0.6",
+        "import-fresh": "^3.0.0",
+        "imurmurhash": "^0.1.4",
+        "inquirer": "^6.2.2",
+        "js-yaml": "^3.13.0",
+        "json-stable-stringify-without-jsonify": "^1.0.1",
+        "levn": "^0.3.0",
+        "lodash": "^4.17.11",
+        "minimatch": "^3.0.4",
+        "mkdirp": "^0.5.1",
+        "natural-compare": "^1.4.0",
+        "optionator": "^0.8.2",
+        "path-is-inside": "^1.0.2",
+        "progress": "^2.0.0",
+        "regexpp": "^2.0.1",
+        "semver": "^5.5.1",
+        "strip-ansi": "^4.0.0",
+        "strip-json-comments": "^2.0.1",
+        "table": "^5.2.3",
+        "text-table": "^0.2.0"
+      },
+      "dependencies": {
+        "ajv": {
+          "version": "6.10.2",
+          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
+          "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+          "dev": true,
+          "requires": {
+            "fast-deep-equal": "^2.0.1",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.4.1",
+            "uri-js": "^4.2.2"
+          }
+        },
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        },
+        "debug": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "fast-deep-equal": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+          "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+          "dev": true
+        },
+        "json-schema-traverse": {
+          "version": "0.4.1",
+          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+          "dev": true
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        }
+      }
+    },
+    "eslint-config-meteor": {
+      "version": "0.0.9",
+      "resolved": "https://registry.npmjs.org/eslint-config-meteor/-/eslint-config-meteor-0.0.9.tgz",
+      "integrity": "sha1-a+IZQguko+oCPbMKhm5g70h2Uvo=",
+      "dev": true
+    },
+    "eslint-config-prettier": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-3.6.0.tgz",
+      "integrity": "sha512-ixJ4U3uTLXwJts4rmSVW/lMXjlGwCijhBJHk8iVqKKSifeI0qgFEfWl8L63isfc8Od7EiBALF6BX3jKLluf/jQ==",
+      "dev": true,
+      "requires": {
+        "get-stdin": "^6.0.0"
+      }
+    },
+    "eslint-import-resolver-meteor": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/eslint-import-resolver-meteor/-/eslint-import-resolver-meteor-0.4.0.tgz",
+      "integrity": "sha1-yGhjhAghIIz4EzxczlGQnCamFWk=",
+      "dev": true,
+      "requires": {
+        "object-assign": "^4.0.1",
+        "resolve": "^1.1.6"
+      }
+    },
+    "eslint-import-resolver-node": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz",
+      "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==",
+      "dev": true,
+      "requires": {
+        "debug": "^2.6.9",
+        "resolve": "^1.5.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        }
+      }
+    },
+    "eslint-module-utils": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz",
+      "integrity": "sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==",
+      "dev": true,
+      "requires": {
+        "debug": "^2.6.8",
+        "pkg-dir": "^2.0.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        }
+      }
+    },
+    "eslint-plugin-import": {
+      "version": "2.18.2",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz",
+      "integrity": "sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==",
+      "dev": true,
+      "requires": {
+        "array-includes": "^3.0.3",
+        "contains-path": "^0.1.0",
+        "debug": "^2.6.9",
+        "doctrine": "1.5.0",
+        "eslint-import-resolver-node": "^0.3.2",
+        "eslint-module-utils": "^2.4.0",
+        "has": "^1.0.3",
+        "minimatch": "^3.0.4",
+        "object.values": "^1.1.0",
+        "read-pkg-up": "^2.0.0",
+        "resolve": "^1.11.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "doctrine": {
+          "version": "1.5.0",
+          "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
+          "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
+          "dev": true,
+          "requires": {
+            "esutils": "^2.0.2",
+            "isarray": "^1.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        }
+      }
+    },
+    "eslint-plugin-meteor": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-meteor/-/eslint-plugin-meteor-5.2.0.tgz",
+      "integrity": "sha512-bHzs/0BwHdKcBbX7tYrSnBaMG+1i2f1wy8k6H/sBBsERD/yifmBUrNLiPyZkIvyVUeI8OaZw8U9fsMvLP5GhIg==",
+      "dev": true,
+      "requires": {
+        "invariant": "2.2.4"
+      }
+    },
+    "eslint-plugin-prettier": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.0.tgz",
+      "integrity": "sha512-XWX2yVuwVNLOUhQijAkXz+rMPPoCr7WFiAl8ig6I7Xn+pPVhDhzg4DxHpmbeb0iqjO9UronEA3Tb09ChnFVHHA==",
+      "dev": true,
+      "requires": {
+        "prettier-linter-helpers": "^1.0.0"
+      }
+    },
+    "eslint-scope": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+      "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
+      "dev": true,
+      "requires": {
+        "esrecurse": "^4.1.0",
+        "estraverse": "^4.1.1"
+      }
+    },
+    "eslint-utils": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz",
+      "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==",
+      "dev": true,
+      "requires": {
+        "eslint-visitor-keys": "^1.0.0"
+      }
+    },
+    "eslint-visitor-keys": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+      "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
+      "dev": true
+    },
+    "espree": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz",
+      "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==",
+      "dev": true,
+      "requires": {
+        "acorn": "^6.0.7",
+        "acorn-jsx": "^5.0.0",
+        "eslint-visitor-keys": "^1.0.0"
+      }
+    },
+    "esprima": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+      "dev": true
+    },
+    "esquery": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+      "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+      "dev": true,
+      "requires": {
+        "estraverse": "^4.0.0"
+      }
+    },
+    "esrecurse": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+      "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+      "dev": true,
+      "requires": {
+        "estraverse": "^4.1.0"
+      }
+    },
+    "estraverse": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+      "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+      "dev": true
+    },
+    "esutils": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+      "dev": true
+    },
+    "execa": {
+      "version": "0.9.0",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-0.9.0.tgz",
+      "integrity": "sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA==",
+      "dev": true,
+      "requires": {
+        "cross-spawn": "^5.0.1",
+        "get-stream": "^3.0.0",
+        "is-stream": "^1.1.0",
+        "npm-run-path": "^2.0.0",
+        "p-finally": "^1.0.0",
+        "signal-exit": "^3.0.0",
+        "strip-eof": "^1.0.0"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^4.0.1",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
+          }
+        }
+      }
+    },
+    "expand-brackets": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+      "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+      "dev": true,
+      "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": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "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=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        }
+      }
+    },
+    "extend-shallow": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+      "dev": true,
+      "requires": {
+        "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==",
+          "dev": true,
+          "requires": {
+            "is-plain-object": "^2.0.4"
+          }
+        }
+      }
+    },
+    "external-editor": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+      "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+      "dev": true,
+      "requires": {
+        "chardet": "^0.7.0",
+        "iconv-lite": "^0.4.24",
+        "tmp": "^0.0.33"
+      }
+    },
+    "extglob": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+      "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+      "dev": true,
+      "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": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "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=",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        }
+      }
+    },
+    "extsprintf": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.2.0.tgz",
+      "integrity": "sha1-WtlGwi9bMrp/jNdCZxHG6KP8JSk="
+    },
+    "fast-deep-equal": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+      "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
+    },
+    "fast-diff": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
+      "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
+      "dev": true
+    },
+    "fast-json-stable-stringify": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+      "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+    },
+    "fast-levenshtein": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+      "dev": true
+    },
+    "figures": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/figures/-/figures-3.0.0.tgz",
+      "integrity": "sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g==",
+      "dev": true,
+      "requires": {
+        "escape-string-regexp": "^1.0.5"
+      }
+    },
+    "file-entry-cache": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
+      "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
+      "dev": true,
+      "requires": {
+        "flat-cache": "^2.0.1"
+      }
+    },
+    "fill-range": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+      "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+      "dev": true,
+      "requires": {
+        "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=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "find-parent-dir": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz",
+      "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=",
+      "dev": true
+    },
+    "find-up": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+      "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+      "dev": true,
+      "requires": {
+        "locate-path": "^2.0.0"
+      }
+    },
+    "flat-cache": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
+      "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
+      "dev": true,
+      "requires": {
+        "flatted": "^2.0.0",
+        "rimraf": "2.6.3",
+        "write": "1.0.3"
+      }
+    },
+    "flatted": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
+      "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==",
+      "dev": true
+    },
+    "for-in": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+      "dev": true
+    },
+    "fragment-cache": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+      "dev": true,
+      "requires": {
+        "map-cache": "^0.2.2"
+      }
+    },
+    "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="
+    },
+    "function-bind": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+      "dev": true
+    },
+    "functional-red-black-tree": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+      "dev": true
+    },
+    "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-own-enumerable-property-symbols": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz",
+      "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==",
+      "dev": true
+    },
+    "get-stdin": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz",
+      "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==",
+      "dev": true
+    },
+    "get-stream": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+      "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+      "dev": true
+    },
+    "get-value": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+      "dev": true
+    },
+    "glob": {
+      "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": "^3.0.4",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      }
+    },
+    "globals": {
+      "version": "11.12.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+      "dev": true
+    },
+    "graceful-fs": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.1.tgz",
+      "integrity": "sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw==",
+      "dev": true
+    },
+    "gridfs-stream": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/gridfs-stream/-/gridfs-stream-0.5.3.tgz",
+      "integrity": "sha1-wIlnKPo+qD9fo8nO1GGvt6A20Uk="
+    },
+    "has": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+      "dev": true,
+      "requires": {
+        "function-bind": "^1.1.1"
+      }
+    },
+    "has-ansi": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "^2.0.0"
+      }
+    },
+    "has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+      "dev": true
+    },
+    "has-symbols": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+      "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
+      "dev": true
+    },
+    "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=",
+      "dev": true,
+      "requires": {
+        "get-value": "^2.0.6",
+        "has-values": "^1.0.0",
+        "isobject": "^3.0.0"
+      }
+    },
+    "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=",
+      "dev": true,
+      "requires": {
+        "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=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "hosted-git-info": {
+      "version": "2.8.4",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz",
+      "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==",
+      "dev": true
+    },
+    "iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+      "requires": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      }
+    },
+    "ieee754": {
+      "version": "1.1.13",
+      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+      "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
+    },
+    "ignore": {
+      "version": "4.0.6",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+      "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+      "dev": true
+    },
+    "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"
+      }
+    },
+    "import-fresh": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz",
+      "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==",
+      "dev": true,
+      "requires": {
+        "parent-module": "^1.0.0",
+        "resolve-from": "^4.0.0"
+      },
+      "dependencies": {
+        "resolve-from": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+          "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+          "dev": true
+        }
+      }
+    },
+    "imurmurhash": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+      "dev": true
+    },
+    "indent-string": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+      "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+      "dev": true
+    },
+    "inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "requires": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+    },
+    "ini": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+      "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
+    },
+    "inquirer": {
+      "version": "6.5.1",
+      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.1.tgz",
+      "integrity": "sha512-uxNHBeQhRXIoHWTSNYUFhQVrHYFThIt6IVo2fFmSe8aBwdR3/w6b58hJpiL/fMukFkvGzjg+hSxFtwvVmKZmXw==",
+      "dev": true,
+      "requires": {
+        "ansi-escapes": "^4.2.1",
+        "chalk": "^2.4.2",
+        "cli-cursor": "^3.1.0",
+        "cli-width": "^2.0.0",
+        "external-editor": "^3.0.3",
+        "figures": "^3.0.0",
+        "lodash": "^4.17.15",
+        "mute-stream": "0.0.8",
+        "run-async": "^2.2.0",
+        "rxjs": "^6.4.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^5.1.0",
+        "through": "^2.3.6"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+          "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+          "dev": true
+        },
+        "string-width": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.1.0.tgz",
+          "integrity": "sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ==",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^8.0.0",
+            "is-fullwidth-code-point": "^3.0.0",
+            "strip-ansi": "^5.2.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^4.1.0"
+          }
+        }
+      }
+    },
+    "invariant": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+      "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+      "dev": true,
+      "requires": {
+        "loose-envify": "^1.0.0"
+      }
+    },
+    "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=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "is-arrayish": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+      "dev": true
+    },
+    "is-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+      "dev": true
+    },
+    "is-callable": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+      "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
+      "dev": true
+    },
+    "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=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "is-date-object": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+      "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+      "dev": true
+    },
+    "is-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+      "dev": true,
+      "requires": {
+        "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==",
+          "dev": true
+        }
+      }
+    },
+    "is-directory": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+      "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
+      "dev": true
+    },
+    "is-extendable": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+      "dev": true
+    },
+    "is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+      "dev": true
+    },
+    "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": "4.0.1",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+      "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+      "dev": true,
+      "requires": {
+        "is-extglob": "^2.1.1"
+      }
+    },
+    "is-number": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "is-obj": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+      "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+      "dev": true
+    },
+    "is-observable": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz",
+      "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==",
+      "dev": true,
+      "requires": {
+        "symbol-observable": "^1.1.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.1"
+      }
+    },
+    "is-promise": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+      "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+      "dev": true
+    },
+    "is-regex": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+      "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+      "dev": true,
+      "requires": {
+        "has": "^1.0.1"
+      }
+    },
+    "is-regexp": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
+      "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
+      "dev": true
+    },
+    "is-resolvable": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+      "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+      "dev": true
+    },
+    "is-stream": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+      "dev": true
+    },
+    "is-symbol": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
+      "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
+      "dev": true,
+      "requires": {
+        "has-symbols": "^1.0.0"
+      }
+    },
+    "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==",
+      "dev": true
+    },
+    "isarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+    },
+    "isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+      "dev": true
+    },
+    "isobject": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+      "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+      "dev": true
+    },
+    "jest-get-type": {
+      "version": "22.4.3",
+      "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz",
+      "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==",
+      "dev": true
+    },
+    "jest-validate": {
+      "version": "23.6.0",
+      "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz",
+      "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.0.1",
+        "jest-get-type": "^22.1.0",
+        "leven": "^2.1.0",
+        "pretty-format": "^23.6.0"
+      }
+    },
+    "js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+      "dev": true
+    },
+    "js-yaml": {
+      "version": "3.13.1",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+      "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+      "dev": true,
+      "requires": {
+        "argparse": "^1.0.7",
+        "esprima": "^4.0.0"
+      }
+    },
+    "json-parse-better-errors": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+      "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+      "dev": true
+    },
+    "json-schema-traverse": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+      "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
+    },
+    "json-stable-stringify-without-jsonify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+      "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+      "dev": true
+    },
+    "kind-of": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+      "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+      "dev": true
+    },
+    "ldap-filter": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/ldap-filter/-/ldap-filter-0.2.2.tgz",
+      "integrity": "sha1-8rhCvguG2jNSeYUFsx68rlkNd9A=",
+      "requires": {
+        "assert-plus": "0.1.5"
+      },
+      "dependencies": {
+        "assert-plus": {
+          "version": "0.1.5",
+          "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz",
+          "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA="
+        }
+      }
+    },
+    "ldapjs": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/ldapjs/-/ldapjs-1.0.2.tgz",
+      "integrity": "sha1-VE/3Ayt7g8aPBwEyjZKXqmlDQPk=",
+      "requires": {
+        "asn1": "0.2.3",
+        "assert-plus": "^1.0.0",
+        "backoff": "^2.5.0",
+        "bunyan": "^1.8.3",
+        "dashdash": "^1.14.0",
+        "dtrace-provider": "~0.8",
+        "ldap-filter": "0.2.2",
+        "once": "^1.4.0",
+        "vasync": "^1.6.4",
+        "verror": "^1.8.1"
+      }
+    },
+    "leven": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz",
+      "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=",
+      "dev": true
+    },
+    "levn": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+      "dev": true,
+      "requires": {
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2"
+      }
+    },
+    "lint-staged": {
+      "version": "7.3.0",
+      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-7.3.0.tgz",
+      "integrity": "sha512-AXk40M9DAiPi7f4tdJggwuKIViUplYtVj1os1MVEteW7qOkU50EOehayCfO9TsoGK24o/EsWb41yrEgfJDDjCw==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.3.1",
+        "commander": "^2.14.1",
+        "cosmiconfig": "^5.0.2",
+        "debug": "^3.1.0",
+        "dedent": "^0.7.0",
+        "execa": "^0.9.0",
+        "find-parent-dir": "^0.3.0",
+        "is-glob": "^4.0.0",
+        "is-windows": "^1.0.2",
+        "jest-validate": "^23.5.0",
+        "listr": "^0.14.1",
+        "lodash": "^4.17.5",
+        "log-symbols": "^2.2.0",
+        "micromatch": "^3.1.8",
+        "npm-which": "^3.0.1",
+        "p-map": "^1.1.1",
+        "path-is-inside": "^1.0.2",
+        "pify": "^3.0.0",
+        "please-upgrade-node": "^3.0.2",
+        "staged-git-files": "1.1.1",
+        "string-argv": "^0.0.2",
+        "stringify-object": "^3.2.2"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "dev": true
+        }
+      }
+    },
+    "listr": {
+      "version": "0.14.3",
+      "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz",
+      "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==",
+      "dev": true,
+      "requires": {
+        "@samverschueren/stream-to-observable": "^0.3.0",
+        "is-observable": "^1.1.0",
+        "is-promise": "^2.1.0",
+        "is-stream": "^1.1.0",
+        "listr-silent-renderer": "^1.1.1",
+        "listr-update-renderer": "^0.5.0",
+        "listr-verbose-renderer": "^0.5.0",
+        "p-map": "^2.0.0",
+        "rxjs": "^6.3.3"
+      },
+      "dependencies": {
+        "p-map": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
+          "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
+          "dev": true
+        }
+      }
+    },
+    "listr-silent-renderer": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz",
+      "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=",
+      "dev": true
+    },
+    "listr-update-renderer": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz",
+      "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==",
+      "dev": true,
+      "requires": {
+        "chalk": "^1.1.3",
+        "cli-truncate": "^0.2.1",
+        "elegant-spinner": "^1.0.1",
+        "figures": "^1.7.0",
+        "indent-string": "^3.0.0",
+        "log-symbols": "^1.0.2",
+        "log-update": "^2.3.0",
+        "strip-ansi": "^3.0.1"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
+          }
+        },
+        "figures": {
+          "version": "1.7.0",
+          "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+          "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+          "dev": true,
+          "requires": {
+            "escape-string-regexp": "^1.0.5",
+            "object-assign": "^4.1.0"
+          }
+        },
+        "log-symbols": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
+          "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=",
+          "dev": true,
+          "requires": {
+            "chalk": "^1.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+          "dev": true
+        }
+      }
+    },
+    "listr-verbose-renderer": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz",
+      "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.4.1",
+        "cli-cursor": "^2.1.0",
+        "date-fns": "^1.27.2",
+        "figures": "^2.0.0"
+      },
+      "dependencies": {
+        "cli-cursor": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+          "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+          "dev": true,
+          "requires": {
+            "restore-cursor": "^2.0.0"
+          }
+        },
+        "figures": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+          "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+          "dev": true,
+          "requires": {
+            "escape-string-regexp": "^1.0.5"
+          }
+        },
+        "mimic-fn": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+          "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+          "dev": true
+        },
+        "onetime": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+          "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+          "dev": true,
+          "requires": {
+            "mimic-fn": "^1.0.0"
+          }
+        },
+        "restore-cursor": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+          "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+          "dev": true,
+          "requires": {
+            "onetime": "^2.0.0",
+            "signal-exit": "^3.0.2"
+          }
+        }
+      }
+    },
+    "load-json-file": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+      "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "parse-json": "^2.2.0",
+        "pify": "^2.0.0",
+        "strip-bom": "^3.0.0"
+      }
+    },
+    "locate-path": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+      "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+      "dev": true,
+      "requires": {
+        "p-locate": "^2.0.0",
+        "path-exists": "^3.0.0"
+      }
+    },
+    "lodash": {
+      "version": "4.17.15",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+      "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
+      "dev": true
+    },
+    "lodash.merge": {
+      "version": "4.6.2",
+      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+      "dev": true
+    },
+    "lodash.unescape": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz",
+      "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=",
+      "dev": true
+    },
+    "log-symbols": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+      "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.0.1"
+      }
+    },
+    "log-update": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz",
+      "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=",
+      "dev": true,
+      "requires": {
+        "ansi-escapes": "^3.0.0",
+        "cli-cursor": "^2.0.0",
+        "wrap-ansi": "^3.0.1"
+      },
+      "dependencies": {
+        "ansi-escapes": {
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+          "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+          "dev": true
+        },
+        "cli-cursor": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+          "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+          "dev": true,
+          "requires": {
+            "restore-cursor": "^2.0.0"
+          }
+        },
+        "mimic-fn": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+          "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+          "dev": true
+        },
+        "onetime": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+          "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+          "dev": true,
+          "requires": {
+            "mimic-fn": "^1.0.0"
+          }
+        },
+        "restore-cursor": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+          "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+          "dev": true,
+          "requires": {
+            "onetime": "^2.0.0",
+            "signal-exit": "^3.0.2"
+          }
+        }
+      }
+    },
+    "loglevel": {
+      "version": "1.6.3",
+      "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.3.tgz",
+      "integrity": "sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA==",
+      "dev": true
+    },
+    "loglevel-colored-level-prefix": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz",
+      "integrity": "sha1-akAhj9x64V/HbD0PPmdsRlOIYD4=",
+      "dev": true,
+      "requires": {
+        "chalk": "^1.1.3",
+        "loglevel": "^1.4.1"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+          "dev": true
+        }
+      }
+    },
+    "long": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
+      "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
+    },
+    "loose-envify": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+      "dev": true,
+      "requires": {
+        "js-tokens": "^3.0.0 || ^4.0.0"
+      }
+    },
+    "lru-cache": {
+      "version": "4.1.5",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+      "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+      "dev": true,
+      "requires": {
+        "pseudomap": "^1.0.2",
+        "yallist": "^2.1.2"
+      },
+      "dependencies": {
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+          "dev": true
+        }
+      }
+    },
+    "map-cache": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+      "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+      "dev": true
+    },
+    "map-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+      "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+      "dev": true,
+      "requires": {
+        "object-visit": "^1.0.0"
+      }
+    },
+    "meteor-node-stubs": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-0.4.1.tgz",
+      "integrity": "sha512-UO2OStvLOKoApmOdIP5eCqoLaa/ritMXRg4ffJVdkNLEsczzPvTjgC0Mxk4cM4R8MZkwll90FYgjDf5qUTJdMA==",
+      "requires": {
+        "assert": "^1.4.1",
+        "browserify-zlib": "^0.1.4",
+        "buffer": "^4.9.1",
+        "console-browserify": "^1.1.0",
+        "constants-browserify": "^1.0.0",
+        "crypto-browserify": "^3.11.0",
+        "domain-browser": "^1.1.7",
+        "events": "^1.1.1",
+        "https-browserify": "0.0.1",
+        "os-browserify": "^0.2.1",
+        "path-browserify": "0.0.0",
+        "process": "^0.11.9",
+        "punycode": "^1.4.1",
+        "querystring-es3": "^0.2.1",
+        "readable-stream": "^2.3.6",
+        "stream-browserify": "^2.0.1",
+        "stream-http": "^2.8.0",
+        "string_decoder": "^1.1.0",
+        "timers-browserify": "^1.4.2",
+        "tty-browserify": "0.0.0",
+        "url": "^0.11.0",
+        "util": "^0.10.3",
+        "vm-browserify": "0.0.4"
+      },
+      "dependencies": {
+        "asn1.js": {
+          "version": "4.10.1",
+          "bundled": true,
+          "requires": {
+            "bn.js": "^4.0.0",
+            "inherits": "^2.0.1",
+            "minimalistic-assert": "^1.0.0"
+          }
+        },
+        "assert": {
+          "version": "1.4.1",
+          "bundled": true,
+          "requires": {
+            "util": "0.10.3"
+          }
+        },
+        "base64-js": {
+          "version": "1.3.0",
+          "bundled": true
+        },
+        "bn.js": {
+          "version": "4.11.8",
+          "bundled": true
+        },
+        "brorand": {
+          "version": "1.1.0",
+          "bundled": true
+        },
+        "browserify-aes": {
+          "version": "1.2.0",
+          "bundled": true,
+          "requires": {
+            "buffer-xor": "^1.0.3",
+            "cipher-base": "^1.0.0",
+            "create-hash": "^1.1.0",
+            "evp_bytestokey": "^1.0.3",
+            "inherits": "^2.0.1",
+            "safe-buffer": "^5.0.1"
+          }
+        },
+        "browserify-cipher": {
+          "version": "1.0.1",
+          "bundled": true,
+          "requires": {
+            "browserify-aes": "^1.0.4",
+            "browserify-des": "^1.0.0",
+            "evp_bytestokey": "^1.0.0"
+          }
+        },
+        "browserify-des": {
+          "version": "1.0.1",
+          "bundled": true,
+          "requires": {
+            "cipher-base": "^1.0.1",
+            "des.js": "^1.0.0",
+            "inherits": "^2.0.1"
+          }
+        },
+        "browserify-rsa": {
+          "version": "4.0.1",
+          "bundled": true,
+          "requires": {
+            "bn.js": "^4.1.0",
+            "randombytes": "^2.0.1"
+          }
+        },
+        "browserify-sign": {
+          "version": "4.0.4",
+          "bundled": true,
+          "requires": {
+            "bn.js": "^4.1.1",
+            "browserify-rsa": "^4.0.0",
+            "create-hash": "^1.1.0",
+            "create-hmac": "^1.1.2",
+            "elliptic": "^6.0.0",
+            "inherits": "^2.0.1",
+            "parse-asn1": "^5.0.0"
+          }
+        },
+        "browserify-zlib": {
+          "version": "0.1.4",
+          "bundled": true,
+          "requires": {
+            "pako": "~0.2.0"
+          }
+        },
+        "buffer": {
+          "version": "4.9.1",
+          "bundled": true,
+          "requires": {
+            "base64-js": "^1.0.2",
+            "ieee754": "^1.1.4",
+            "isarray": "^1.0.0"
+          }
+        },
+        "buffer-xor": {
+          "version": "1.0.3",
+          "bundled": true
+        },
+        "builtin-status-codes": {
+          "version": "3.0.0",
+          "bundled": true
+        },
+        "cipher-base": {
+          "version": "1.0.4",
+          "bundled": true,
+          "requires": {
+            "inherits": "^2.0.1",
+            "safe-buffer": "^5.0.1"
+          }
+        },
+        "console-browserify": {
+          "version": "1.1.0",
+          "bundled": true,
+          "requires": {
+            "date-now": "^0.1.4"
+          }
+        },
+        "constants-browserify": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "core-util-is": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "create-ecdh": {
+          "version": "4.0.3",
+          "bundled": true,
+          "requires": {
+            "bn.js": "^4.1.0",
+            "elliptic": "^6.0.0"
+          }
+        },
+        "create-hash": {
+          "version": "1.2.0",
+          "bundled": true,
+          "requires": {
+            "cipher-base": "^1.0.1",
+            "inherits": "^2.0.1",
+            "md5.js": "^1.3.4",
+            "ripemd160": "^2.0.1",
+            "sha.js": "^2.4.0"
+          }
+        },
+        "create-hmac": {
+          "version": "1.1.7",
+          "bundled": true,
+          "requires": {
+            "cipher-base": "^1.0.3",
+            "create-hash": "^1.1.0",
+            "inherits": "^2.0.1",
+            "ripemd160": "^2.0.0",
+            "safe-buffer": "^5.0.1",
+            "sha.js": "^2.4.8"
+          }
+        },
+        "crypto-browserify": {
+          "version": "3.12.0",
+          "bundled": true,
+          "requires": {
+            "browserify-cipher": "^1.0.0",
+            "browserify-sign": "^4.0.0",
+            "create-ecdh": "^4.0.0",
+            "create-hash": "^1.1.0",
+            "create-hmac": "^1.1.0",
+            "diffie-hellman": "^5.0.0",
+            "inherits": "^2.0.1",
+            "pbkdf2": "^3.0.3",
+            "public-encrypt": "^4.0.0",
+            "randombytes": "^2.0.0",
+            "randomfill": "^1.0.3"
+          }
+        },
+        "date-now": {
+          "version": "0.1.4",
+          "bundled": true
+        },
+        "des.js": {
+          "version": "1.0.0",
+          "bundled": true,
+          "requires": {
+            "inherits": "^2.0.1",
+            "minimalistic-assert": "^1.0.0"
+          }
+        },
+        "diffie-hellman": {
+          "version": "5.0.3",
+          "bundled": true,
+          "requires": {
+            "bn.js": "^4.1.0",
+            "miller-rabin": "^4.0.0",
+            "randombytes": "^2.0.0"
+          }
+        },
+        "domain-browser": {
+          "version": "1.2.0",
+          "bundled": true
+        },
+        "elliptic": {
+          "version": "6.4.0",
+          "bundled": true,
+          "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"
+          }
+        },
+        "events": {
+          "version": "1.1.1",
+          "bundled": true
+        },
+        "evp_bytestokey": {
+          "version": "1.0.3",
+          "bundled": true,
+          "requires": {
+            "md5.js": "^1.3.4",
+            "safe-buffer": "^5.1.1"
+          }
+        },
+        "hash-base": {
+          "version": "3.0.4",
+          "bundled": true,
+          "requires": {
+            "inherits": "^2.0.1",
+            "safe-buffer": "^5.0.1"
+          }
+        },
+        "hash.js": {
+          "version": "1.1.3",
+          "bundled": true,
+          "requires": {
+            "inherits": "^2.0.3",
+            "minimalistic-assert": "^1.0.0"
+          },
+          "dependencies": {
+            "inherits": {
+              "version": "2.0.3",
+              "bundled": true
+            }
+          }
+        },
+        "hmac-drbg": {
+          "version": "1.0.1",
+          "bundled": true,
+          "requires": {
+            "hash.js": "^1.0.3",
+            "minimalistic-assert": "^1.0.0",
+            "minimalistic-crypto-utils": "^1.0.1"
+          }
+        },
+        "https-browserify": {
+          "version": "0.0.1",
+          "bundled": true
+        },
+        "ieee754": {
+          "version": "1.1.11",
+          "bundled": true
+        },
+        "indexof": {
+          "version": "0.0.1",
+          "bundled": true
+        },
+        "inherits": {
+          "version": "2.0.1",
+          "bundled": true
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "md5.js": {
+          "version": "1.3.4",
+          "bundled": true,
+          "requires": {
+            "hash-base": "^3.0.0",
+            "inherits": "^2.0.1"
+          }
+        },
+        "miller-rabin": {
+          "version": "4.0.1",
+          "bundled": true,
+          "requires": {
+            "bn.js": "^4.0.0",
+            "brorand": "^1.0.1"
+          }
+        },
+        "minimalistic-assert": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "minimalistic-crypto-utils": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "os-browserify": {
+          "version": "0.2.1",
+          "bundled": true
+        },
+        "pako": {
+          "version": "0.2.9",
+          "bundled": true
+        },
+        "parse-asn1": {
+          "version": "5.1.1",
+          "bundled": true,
+          "requires": {
+            "asn1.js": "^4.0.0",
+            "browserify-aes": "^1.0.0",
+            "create-hash": "^1.1.0",
+            "evp_bytestokey": "^1.0.0",
+            "pbkdf2": "^3.0.3"
+          }
+        },
+        "path-browserify": {
+          "version": "0.0.0",
+          "bundled": true
+        },
+        "pbkdf2": {
+          "version": "3.0.16",
+          "bundled": true,
+          "requires": {
+            "create-hash": "^1.1.2",
+            "create-hmac": "^1.1.4",
+            "ripemd160": "^2.0.1",
+            "safe-buffer": "^5.0.1",
+            "sha.js": "^2.4.8"
+          }
+        },
+        "process": {
+          "version": "0.11.10",
+          "bundled": true
+        },
+        "process-nextick-args": {
+          "version": "2.0.0",
+          "bundled": true
+        },
+        "public-encrypt": {
+          "version": "4.0.2",
+          "bundled": true,
+          "requires": {
+            "bn.js": "^4.1.0",
+            "browserify-rsa": "^4.0.0",
+            "create-hash": "^1.1.0",
+            "parse-asn1": "^5.0.0",
+            "randombytes": "^2.0.1"
+          }
+        },
+        "punycode": {
+          "version": "1.4.1",
+          "bundled": true
+        },
+        "querystring": {
+          "version": "0.2.0",
+          "bundled": true
+        },
+        "querystring-es3": {
+          "version": "0.2.1",
+          "bundled": true
+        },
+        "randombytes": {
+          "version": "2.0.6",
+          "bundled": true,
+          "requires": {
+            "safe-buffer": "^5.1.0"
+          }
+        },
+        "randomfill": {
+          "version": "1.0.4",
+          "bundled": true,
+          "requires": {
+            "randombytes": "^2.0.5",
+            "safe-buffer": "^5.1.0"
+          }
+        },
+        "readable-stream": {
+          "version": "2.3.6",
+          "bundled": true,
+          "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"
+          },
+          "dependencies": {
+            "inherits": {
+              "version": "2.0.3",
+              "bundled": true
+            }
+          }
+        },
+        "ripemd160": {
+          "version": "2.0.2",
+          "bundled": true,
+          "requires": {
+            "hash-base": "^3.0.0",
+            "inherits": "^2.0.1"
+          }
+        },
+        "safe-buffer": {
+          "version": "5.1.2",
+          "bundled": true
+        },
+        "sha.js": {
+          "version": "2.4.11",
+          "bundled": true,
+          "requires": {
+            "inherits": "^2.0.1",
+            "safe-buffer": "^5.0.1"
+          }
+        },
+        "stream-browserify": {
+          "version": "2.0.1",
+          "bundled": true,
+          "requires": {
+            "inherits": "~2.0.1",
+            "readable-stream": "^2.0.2"
+          }
+        },
+        "stream-http": {
+          "version": "2.8.1",
+          "bundled": true,
+          "requires": {
+            "builtin-status-codes": "^3.0.0",
+            "inherits": "^2.0.1",
+            "readable-stream": "^2.3.3",
+            "to-arraybuffer": "^1.0.0",
+            "xtend": "^4.0.0"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "bundled": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        },
+        "timers-browserify": {
+          "version": "1.4.2",
+          "bundled": true,
+          "requires": {
+            "process": "~0.11.0"
+          }
+        },
+        "to-arraybuffer": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "tty-browserify": {
+          "version": "0.0.0",
+          "bundled": true
+        },
+        "url": {
+          "version": "0.11.0",
+          "bundled": true,
+          "requires": {
+            "punycode": "1.3.2",
+            "querystring": "0.2.0"
+          },
+          "dependencies": {
+            "punycode": {
+              "version": "1.3.2",
+              "bundled": true
+            }
+          }
+        },
+        "util": {
+          "version": "0.10.3",
+          "bundled": true,
+          "requires": {
+            "inherits": "2.0.1"
+          }
+        },
+        "util-deprecate": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "vm-browserify": {
+          "version": "0.0.4",
+          "bundled": true,
+          "requires": {
+            "indexof": "0.0.1"
+          }
+        },
+        "xtend": {
+          "version": "4.0.1",
+          "bundled": true
+        }
+      }
+    },
+    "micromatch": {
+      "version": "3.1.10",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+      "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+      "dev": true,
+      "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"
+      }
+    },
+    "mimic-fn": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+      "dev": true
+    },
+    "minimatch": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+      "requires": {
+        "brace-expansion": "^1.1.7"
+      }
+    },
+    "minimist": {
+      "version": "0.0.8",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+      "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+    },
+    "minipass": {
+      "version": "2.3.5",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
+      "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
+      "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==",
+      "dev": true,
+      "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==",
+          "dev": true,
+          "requires": {
+            "is-plain-object": "^2.0.4"
+          }
+        }
+      }
+    },
+    "mkdirp": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+      "requires": {
+        "minimist": "0.0.8"
+      }
+    },
+    "moment": {
+      "version": "2.24.0",
+      "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
+      "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==",
+      "optional": true
+    },
+    "mongodb": {
+      "version": "2.2.36",
+      "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.36.tgz",
+      "integrity": "sha512-P2SBLQ8Z0PVx71ngoXwo12+FiSfbNfGOClAao03/bant5DgLNkOPAck5IaJcEk4gKlQhDEURzfR3xuBG1/B+IA==",
+      "requires": {
+        "es6-promise": "3.2.1",
+        "mongodb-core": "2.1.20",
+        "readable-stream": "2.2.7"
+      },
+      "dependencies": {
+        "es6-promise": {
+          "version": "3.2.1",
+          "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz",
+          "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q="
+        },
+        "process-nextick-args": {
+          "version": "1.0.7",
+          "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+          "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
+        },
+        "readable-stream": {
+          "version": "2.2.7",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz",
+          "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=",
+          "requires": {
+            "buffer-shims": "~1.0.0",
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~1.0.6",
+            "string_decoder": "~1.0.0",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "1.0.3",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+          "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        }
+      }
+    },
+    "mongodb-core": {
+      "version": "2.1.20",
+      "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.20.tgz",
+      "integrity": "sha512-IN57CX5/Q1bhDq6ShAR6gIv4koFsZP7L8WOK1S0lR0pVDQaScffSMV5jxubLsmZ7J+UdqmykKw4r9hG3XQEGgQ==",
+      "requires": {
+        "bson": "~1.0.4",
+        "require_optional": "~1.0.0"
+      },
+      "dependencies": {
+        "bson": {
+          "version": "1.0.9",
+          "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.9.tgz",
+          "integrity": "sha512-IQX9/h7WdMBIW/q/++tGd+emQr0XMdeZ6icnT/74Xk9fnabWn+gZgpE+9V+gujL3hhJOoNrnDVY7tWdzc7NUTg=="
+        }
+      }
+    },
+    "ms": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+    },
+    "mute-stream": {
+      "version": "0.0.8",
+      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
+      "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
+      "dev": true
+    },
+    "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"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "6.0.4",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
+          "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+          "optional": true,
+          "requires": {
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "2 || 3",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "rimraf": {
+          "version": "2.4.5",
+          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
+          "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=",
+          "optional": true,
+          "requires": {
+            "glob": "^6.0.1"
+          }
+        }
+      }
+    },
+    "nan": {
+      "version": "2.13.2",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz",
+      "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw=="
+    },
+    "nanomatch": {
+      "version": "1.2.13",
+      "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+      "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+      "dev": true,
+      "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"
+      }
+    },
+    "natural-compare": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+      "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+      "dev": true
+    },
+    "ncp": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
+      "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=",
+      "optional": true
+    },
+    "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"
+      }
+    },
+    "nice-try": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+      "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+      "dev": true
+    },
+    "node-pre-gyp": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz",
+      "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==",
+      "requires": {
+        "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"
+      }
+    },
+    "nopt": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
+      "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
+      "requires": {
+        "abbrev": "1",
+        "osenv": "^0.1.4"
+      }
+    },
+    "normalize-package-data": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+      "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+      "dev": true,
+      "requires": {
+        "hosted-git-info": "^2.1.4",
+        "resolve": "^1.10.0",
+        "semver": "2 || 3 || 4 || 5",
+        "validate-npm-package-license": "^3.0.1"
+      }
+    },
+    "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"
+      }
+    },
+    "npm-path": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz",
+      "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==",
+      "dev": true,
+      "requires": {
+        "which": "^1.2.10"
+      }
+    },
+    "npm-run-path": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+      "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+      "dev": true,
+      "requires": {
+        "path-key": "^2.0.0"
+      }
+    },
+    "npm-which": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz",
+      "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=",
+      "dev": true,
+      "requires": {
+        "commander": "^2.9.0",
+        "npm-path": "^2.0.2",
+        "which": "^1.2.10"
+      }
+    },
+    "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="
+    },
+    "object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+    },
+    "object-copy": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+      "dev": true,
+      "requires": {
+        "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=",
+          "dev": true,
+          "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=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "object-keys": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+      "dev": true
+    },
+    "object-visit": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.1"
+      }
+    },
+    "object.values": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz",
+      "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.12.0",
+        "function-bind": "^1.1.1",
+        "has": "^1.0.3"
+      }
+    },
+    "once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+      "requires": {
+        "wrappy": "1"
+      }
+    },
+    "onetime": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
+      "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
+      "dev": true,
+      "requires": {
+        "mimic-fn": "^2.1.0"
+      }
+    },
+    "optionator": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+      "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+      "dev": true,
+      "requires": {
+        "deep-is": "~0.1.3",
+        "fast-levenshtein": "~2.0.4",
+        "levn": "~0.3.0",
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2",
+        "wordwrap": "~1.0.0"
+      }
+    },
+    "os": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/os/-/os-0.1.1.tgz",
+      "integrity": "sha1-IIhF6J4ZOtTZcUdLk5R3NqVtE/M="
+    },
+    "os-homedir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
+    },
+    "os-shim": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz",
+      "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=",
+      "dev": true
+    },
+    "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": {
+        "os-homedir": "^1.0.0",
+        "os-tmpdir": "^1.0.0"
+      }
+    },
+    "p-finally": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+      "dev": true
+    },
+    "p-limit": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+      "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+      "dev": true,
+      "requires": {
+        "p-try": "^1.0.0"
+      }
+    },
+    "p-locate": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+      "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+      "dev": true,
+      "requires": {
+        "p-limit": "^1.1.0"
+      }
+    },
+    "p-map": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
+      "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
+      "dev": true
+    },
+    "p-try": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+      "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+      "dev": true
+    },
+    "page": {
+      "version": "1.11.4",
+      "resolved": "https://registry.npmjs.org/page/-/page-1.11.4.tgz",
+      "integrity": "sha512-8JMZzcE5W4qk+/DtmogN57cI+Yscy7xTYCpfSO7s3Tx6LjZuAfHFQY1+cKIAy60NaXdzVD6nOc3objaVbE0HJg==",
+      "requires": {
+        "path-to-regexp": "~1.2.1"
+      }
+    },
+    "parent-module": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+      "dev": true,
+      "requires": {
+        "callsites": "^3.0.0"
+      }
+    },
+    "parse-json": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+      "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+      "dev": true,
+      "requires": {
+        "error-ex": "^1.2.0"
+      }
+    },
+    "pascalcase": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+      "dev": true
+    },
+    "path-exists": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+      "dev": true
+    },
+    "path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+    },
+    "path-is-inside": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+      "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+      "dev": true
+    },
+    "path-key": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+      "dev": true
+    },
+    "path-parse": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+      "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+      "dev": true
+    },
+    "path-to-regexp": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.2.1.tgz",
+      "integrity": "sha1-szcFwUAjTYc8hyHHuf2LVB7Tr/k=",
+      "requires": {
+        "isarray": "0.0.1"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+        }
+      }
+    },
+    "path-type": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+      "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+      "dev": true,
+      "requires": {
+        "pify": "^2.0.0"
+      }
+    },
+    "pify": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+      "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+      "dev": true
+    },
+    "pkg-dir": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+      "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+      "dev": true,
+      "requires": {
+        "find-up": "^2.1.0"
+      }
+    },
+    "please-upgrade-node": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
+      "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==",
+      "dev": true,
+      "requires": {
+        "semver-compare": "^1.0.0"
+      }
+    },
+    "pluralize": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+      "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "pre-commit": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/pre-commit/-/pre-commit-1.2.2.tgz",
+      "integrity": "sha1-287g7p3nI15X95xW186UZBpp7sY=",
+      "dev": true,
+      "requires": {
+        "cross-spawn": "^5.0.1",
+        "spawn-sync": "^1.0.15",
+        "which": "1.2.x"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^4.0.1",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
+          }
+        },
+        "which": {
+          "version": "1.2.14",
+          "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz",
+          "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        }
+      }
+    },
+    "precond": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz",
+      "integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw="
+    },
+    "prelude-ls": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+      "dev": true
+    },
+    "prettier": {
+      "version": "1.18.2",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz",
+      "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==",
+      "dev": true
+    },
+    "prettier-eslint": {
+      "version": "8.8.2",
+      "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-8.8.2.tgz",
+      "integrity": "sha512-2UzApPuxi2yRoyMlXMazgR6UcH9DKJhNgCviIwY3ixZ9THWSSrUww5vkiZ3C48WvpFl1M1y/oU63deSy1puWEA==",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.26.0",
+        "common-tags": "^1.4.0",
+        "dlv": "^1.1.0",
+        "eslint": "^4.0.0",
+        "indent-string": "^3.2.0",
+        "lodash.merge": "^4.6.0",
+        "loglevel-colored-level-prefix": "^1.0.0",
+        "prettier": "^1.7.0",
+        "pretty-format": "^23.0.1",
+        "require-relative": "^0.8.7",
+        "typescript": "^2.5.1",
+        "typescript-eslint-parser": "^16.0.0",
+        "vue-eslint-parser": "^2.0.2"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "5.7.3",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+          "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+          "dev": true
+        },
+        "acorn-jsx": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+          "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+          "dev": true,
+          "requires": {
+            "acorn": "^3.0.4"
+          },
+          "dependencies": {
+            "acorn": {
+              "version": "3.3.0",
+              "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+              "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+              "dev": true
+            }
+          }
+        },
+        "ansi-escapes": {
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+          "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+          "dev": true
+        },
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        },
+        "chardet": {
+          "version": "0.4.2",
+          "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+          "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
+          "dev": true
+        },
+        "cli-cursor": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+          "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+          "dev": true,
+          "requires": {
+            "restore-cursor": "^2.0.0"
+          }
+        },
+        "cross-spawn": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^4.0.1",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
+          }
+        },
+        "doctrine": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+          "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+          "dev": true,
+          "requires": {
+            "esutils": "^2.0.2"
+          }
+        },
+        "eslint": {
+          "version": "4.19.1",
+          "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz",
+          "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==",
+          "dev": true,
+          "requires": {
+            "ajv": "^5.3.0",
+            "babel-code-frame": "^6.22.0",
+            "chalk": "^2.1.0",
+            "concat-stream": "^1.6.0",
+            "cross-spawn": "^5.1.0",
+            "debug": "^3.1.0",
+            "doctrine": "^2.1.0",
+            "eslint-scope": "^3.7.1",
+            "eslint-visitor-keys": "^1.0.0",
+            "espree": "^3.5.4",
+            "esquery": "^1.0.0",
+            "esutils": "^2.0.2",
+            "file-entry-cache": "^2.0.0",
+            "functional-red-black-tree": "^1.0.1",
+            "glob": "^7.1.2",
+            "globals": "^11.0.1",
+            "ignore": "^3.3.3",
+            "imurmurhash": "^0.1.4",
+            "inquirer": "^3.0.6",
+            "is-resolvable": "^1.0.0",
+            "js-yaml": "^3.9.1",
+            "json-stable-stringify-without-jsonify": "^1.0.1",
+            "levn": "^0.3.0",
+            "lodash": "^4.17.4",
+            "minimatch": "^3.0.2",
+            "mkdirp": "^0.5.1",
+            "natural-compare": "^1.4.0",
+            "optionator": "^0.8.2",
+            "path-is-inside": "^1.0.2",
+            "pluralize": "^7.0.0",
+            "progress": "^2.0.0",
+            "regexpp": "^1.0.1",
+            "require-uncached": "^1.0.3",
+            "semver": "^5.3.0",
+            "strip-ansi": "^4.0.0",
+            "strip-json-comments": "~2.0.1",
+            "table": "4.0.2",
+            "text-table": "~0.2.0"
+          }
+        },
+        "eslint-scope": {
+          "version": "3.7.3",
+          "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz",
+          "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==",
+          "dev": true,
+          "requires": {
+            "esrecurse": "^4.1.0",
+            "estraverse": "^4.1.1"
+          }
+        },
+        "espree": {
+          "version": "3.5.4",
+          "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
+          "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
+          "dev": true,
+          "requires": {
+            "acorn": "^5.5.0",
+            "acorn-jsx": "^3.0.0"
+          }
+        },
+        "external-editor": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
+          "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
+          "dev": true,
+          "requires": {
+            "chardet": "^0.4.0",
+            "iconv-lite": "^0.4.17",
+            "tmp": "^0.0.33"
+          }
+        },
+        "figures": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+          "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+          "dev": true,
+          "requires": {
+            "escape-string-regexp": "^1.0.5"
+          }
+        },
+        "file-entry-cache": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+          "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+          "dev": true,
+          "requires": {
+            "flat-cache": "^1.2.1",
+            "object-assign": "^4.0.1"
+          }
+        },
+        "flat-cache": {
+          "version": "1.3.4",
+          "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz",
+          "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==",
+          "dev": true,
+          "requires": {
+            "circular-json": "^0.3.1",
+            "graceful-fs": "^4.1.2",
+            "rimraf": "~2.6.2",
+            "write": "^0.2.1"
+          }
+        },
+        "ignore": {
+          "version": "3.3.10",
+          "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+          "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
+          "dev": true
+        },
+        "inquirer": {
+          "version": "3.3.0",
+          "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
+          "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
+          "dev": true,
+          "requires": {
+            "ansi-escapes": "^3.0.0",
+            "chalk": "^2.0.0",
+            "cli-cursor": "^2.1.0",
+            "cli-width": "^2.0.0",
+            "external-editor": "^2.0.4",
+            "figures": "^2.0.0",
+            "lodash": "^4.3.0",
+            "mute-stream": "0.0.7",
+            "run-async": "^2.2.0",
+            "rx-lite": "^4.0.8",
+            "rx-lite-aggregates": "^4.0.8",
+            "string-width": "^2.1.0",
+            "strip-ansi": "^4.0.0",
+            "through": "^2.3.6"
+          }
+        },
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+          "dev": true
+        },
+        "mimic-fn": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+          "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+          "dev": true
+        },
+        "mute-stream": {
+          "version": "0.0.7",
+          "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+          "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+          "dev": true
+        },
+        "onetime": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+          "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+          "dev": true,
+          "requires": {
+            "mimic-fn": "^1.0.0"
+          }
+        },
+        "regexpp": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz",
+          "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==",
+          "dev": true
+        },
+        "restore-cursor": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+          "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+          "dev": true,
+          "requires": {
+            "onetime": "^2.0.0",
+            "signal-exit": "^3.0.2"
+          }
+        },
+        "slice-ansi": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+          "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+          "dev": true,
+          "requires": {
+            "is-fullwidth-code-point": "^2.0.0"
+          }
+        },
+        "string-width": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+          "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+          "dev": true,
+          "requires": {
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^4.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        },
+        "table": {
+          "version": "4.0.2",
+          "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
+          "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
+          "dev": true,
+          "requires": {
+            "ajv": "^5.2.3",
+            "ajv-keywords": "^2.1.0",
+            "chalk": "^2.1.0",
+            "lodash": "^4.17.4",
+            "slice-ansi": "1.0.0",
+            "string-width": "^2.1.1"
+          }
+        },
+        "write": {
+          "version": "0.2.1",
+          "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+          "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+          "dev": true,
+          "requires": {
+            "mkdirp": "^0.5.1"
+          }
+        }
+      }
+    },
+    "prettier-linter-helpers": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+      "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+      "dev": true,
+      "requires": {
+        "fast-diff": "^1.1.2"
+      }
+    },
+    "pretty-format": {
+      "version": "23.6.0",
+      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz",
+      "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "^3.0.0",
+        "ansi-styles": "^3.2.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        }
+      }
+    },
+    "process-nextick-args": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+    },
+    "progress": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+      "dev": true
+    },
+    "pseudomap": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+      "dev": true
+    },
+    "punycode": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+      "dev": true
+    },
+    "qs": {
+      "version": "6.8.0",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.8.0.tgz",
+      "integrity": "sha512-tPSkj8y92PfZVbinY1n84i1Qdx75lZjMQYx9WZhnkofyxzw2r7Ho39G3/aEvSUdebxpnnM4LZJCtvE/Aq3+s9w=="
+    },
+    "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="
+        }
+      }
+    },
+    "read-pkg": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+      "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+      "dev": true,
+      "requires": {
+        "load-json-file": "^2.0.0",
+        "normalize-package-data": "^2.3.2",
+        "path-type": "^2.0.0"
+      }
+    },
+    "read-pkg-up": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+      "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+      "dev": true,
+      "requires": {
+        "find-up": "^2.0.0",
+        "read-pkg": "^2.0.0"
+      }
+    },
+    "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"
+      }
+    },
+    "regenerator-runtime": {
+      "version": "0.13.3",
+      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
+      "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw=="
+    },
+    "regex-not": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+      "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^3.0.2",
+        "safe-regex": "^1.1.0"
+      }
+    },
+    "regexpp": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+      "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+      "dev": true
+    },
+    "repeat-element": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+      "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
+      "dev": true
+    },
+    "repeat-string": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+      "dev": true
+    },
+    "require-relative": {
+      "version": "0.8.7",
+      "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz",
+      "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=",
+      "dev": true
+    },
+    "require-uncached": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+      "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+      "dev": true,
+      "requires": {
+        "caller-path": "^0.1.0",
+        "resolve-from": "^1.0.0"
+      },
+      "dependencies": {
+        "caller-path": {
+          "version": "0.1.0",
+          "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+          "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+          "dev": true,
+          "requires": {
+            "callsites": "^0.2.0"
+          }
+        },
+        "callsites": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+          "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+          "dev": true
+        },
+        "resolve-from": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+          "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+          "dev": true
+        }
+      }
+    },
+    "require_optional": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
+      "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==",
+      "requires": {
+        "resolve-from": "^2.0.0",
+        "semver": "^5.1.0"
+      }
+    },
+    "resolve": {
+      "version": "1.12.0",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
+      "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
+      "dev": true,
+      "requires": {
+        "path-parse": "^1.0.6"
+      }
+    },
+    "resolve-from": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
+      "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
+    },
+    "resolve-url": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+      "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+      "dev": true
+    },
+    "restore-cursor": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+      "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+      "dev": true,
+      "requires": {
+        "onetime": "^5.1.0",
+        "signal-exit": "^3.0.2"
+      }
+    },
+    "ret": {
+      "version": "0.1.15",
+      "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+      "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+      "dev": true
+    },
+    "rimraf": {
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+      "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+      "requires": {
+        "glob": "^7.1.3"
+      }
+    },
+    "run-async": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+      "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+      "dev": true,
+      "requires": {
+        "is-promise": "^2.1.0"
+      }
+    },
+    "rx-lite": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+      "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
+      "dev": true
+    },
+    "rx-lite-aggregates": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+      "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+      "dev": true,
+      "requires": {
+        "rx-lite": "*"
+      }
+    },
+    "rxjs": {
+      "version": "6.5.2",
+      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz",
+      "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==",
+      "dev": true,
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "safe-buffer": {
+      "version": "5.1.2",
+      "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=",
+      "dev": true,
+      "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": "5.7.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+      "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+    },
+    "semver-compare": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+      "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "shebang-command": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+      "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+      "dev": true,
+      "requires": {
+        "shebang-regex": "^1.0.0"
+      }
+    },
+    "shebang-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+      "dev": true
+    },
+    "signal-exit": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+    },
+    "slice-ansi": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+      "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
+      "dev": true,
+      "requires": {
+        "ansi-styles": "^3.2.0",
+        "astral-regex": "^1.0.0",
+        "is-fullwidth-code-point": "^2.0.0"
+      },
+      "dependencies": {
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+          "dev": true
+        }
+      }
+    },
+    "snapdragon": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+      "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+      "dev": true,
+      "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": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "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=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+          "dev": true
+        }
+      }
+    },
+    "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==",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "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==",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "source-map": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "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-support": {
+      "version": "0.5.13",
+      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+      "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
+      "requires": {
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.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=",
+      "dev": true
+    },
+    "spawn-sync": {
+      "version": "1.0.15",
+      "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz",
+      "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=",
+      "dev": true,
+      "requires": {
+        "concat-stream": "^1.4.7",
+        "os-shim": "^0.1.2"
+      }
+    },
+    "spdx-correct": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
+      "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
+      "dev": true,
+      "requires": {
+        "spdx-expression-parse": "^3.0.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-exceptions": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
+      "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
+      "dev": true
+    },
+    "spdx-expression-parse": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+      "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+      "dev": true,
+      "requires": {
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-license-ids": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
+      "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "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=",
+      "dev": true
+    },
+    "staged-git-files": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.1.tgz",
+      "integrity": "sha512-H89UNKr1rQJvI1c/PIR3kiAMBV23yvR7LItZiV74HWZwzt7f3YHuujJ9nJZlt58WlFox7XQsOahexwk7nTe69A==",
+      "dev": true
+    },
+    "static-extend": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+      "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        }
+      }
+    },
+    "string-argv": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz",
+      "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=",
+      "dev": true
+    },
+    "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.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"
+      }
+    },
+    "stringify-object": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
+      "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
+      "dev": true,
+      "requires": {
+        "get-own-enumerable-property-symbols": "^3.0.0",
+        "is-obj": "^1.0.1",
+        "is-regexp": "^1.0.0"
+      }
+    },
+    "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-bom": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+      "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+      "dev": true
+    },
+    "strip-eof": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+      "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+      "dev": true
+    },
+    "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="
+    },
+    "supports-color": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+      "dev": true,
+      "requires": {
+        "has-flag": "^3.0.0"
+      }
+    },
+    "symbol-observable": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
+      "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==",
+      "dev": true
+    },
+    "table": {
+      "version": "5.4.5",
+      "resolved": "https://registry.npmjs.org/table/-/table-5.4.5.tgz",
+      "integrity": "sha512-oGa2Hl7CQjfoaogtrOHEJroOcYILTx7BZWLGsJIlzoWmB2zmguhNfPJZsWPKYek/MgCxfco54gEi31d1uN2hFA==",
+      "dev": true,
+      "requires": {
+        "ajv": "^6.10.2",
+        "lodash": "^4.17.14",
+        "slice-ansi": "^2.1.0",
+        "string-width": "^3.0.0"
+      },
+      "dependencies": {
+        "ajv": {
+          "version": "6.10.2",
+          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
+          "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+          "dev": true,
+          "requires": {
+            "fast-deep-equal": "^2.0.1",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.4.1",
+            "uri-js": "^4.2.2"
+          }
+        },
+        "ansi-regex": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+          "dev": true
+        },
+        "emoji-regex": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+          "dev": true
+        },
+        "fast-deep-equal": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+          "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+          "dev": true
+        },
+        "json-schema-traverse": {
+          "version": "0.4.1",
+          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+          "dev": true
+        },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^4.1.0"
+          }
+        }
+      }
+    },
+    "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-table": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+      "dev": true
+    },
+    "through": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+      "dev": true
+    },
+    "tmp": {
+      "version": "0.0.33",
+      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+      "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+      "dev": true,
+      "requires": {
+        "os-tmpdir": "~1.0.2"
+      }
+    },
+    "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=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "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==",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "requires": {
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1"
+      }
+    },
+    "tslib": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
+      "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
+      "dev": true
+    },
+    "type-check": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+      "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+      "dev": true,
+      "requires": {
+        "prelude-ls": "~1.1.2"
+      }
+    },
+    "type-fest": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz",
+      "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==",
+      "dev": true
+    },
+    "typedarray": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+      "dev": true
+    },
+    "typescript": {
+      "version": "2.9.2",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz",
+      "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==",
+      "dev": true
+    },
+    "typescript-eslint-parser": {
+      "version": "16.0.1",
+      "resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-16.0.1.tgz",
+      "integrity": "sha512-IKawLTu4A2xN3aN/cPLxvZ0bhxZHILGDKTZWvWNJ3sLNhJ3PjfMEDQmR2VMpdRPrmWOadgWXRwjLBzSA8AGsaQ==",
+      "dev": true,
+      "requires": {
+        "lodash.unescape": "4.0.1",
+        "semver": "5.5.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.5.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+          "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+          "dev": true
+        }
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "arr-union": "^3.1.0",
+        "get-value": "^2.0.6",
+        "is-extendable": "^0.1.1",
+        "set-value": "^2.0.1"
+      }
+    },
+    "unset-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+      "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "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=",
+              "dev": true,
+              "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=",
+          "dev": true
+        }
+      }
+    },
+    "uri-js": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+      "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+      "dev": true,
+      "requires": {
+        "punycode": "^2.1.0"
+      }
+    },
+    "urix": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+      "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+      "dev": true
+    },
+    "use": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+      "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+      "dev": true
+    },
+    "util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+    },
+    "validate-npm-package-license": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+      "dev": true,
+      "requires": {
+        "spdx-correct": "^3.0.0",
+        "spdx-expression-parse": "^3.0.0"
+      }
+    },
+    "vasync": {
+      "version": "1.6.4",
+      "resolved": "https://registry.npmjs.org/vasync/-/vasync-1.6.4.tgz",
+      "integrity": "sha1-3+k2Fq0OeugBszKp2Iv8XNyOHR8=",
+      "requires": {
+        "verror": "1.6.0"
+      },
+      "dependencies": {
+        "verror": {
+          "version": "1.6.0",
+          "resolved": "https://registry.npmjs.org/verror/-/verror-1.6.0.tgz",
+          "integrity": "sha1-fROyex+swuLakEBetepuW90lLqU=",
+          "requires": {
+            "extsprintf": "1.2.0"
+          }
+        }
+      }
+    },
+    "verror": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+      "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+      "requires": {
+        "assert-plus": "^1.0.0",
+        "core-util-is": "1.0.2",
+        "extsprintf": "^1.2.0"
+      }
+    },
+    "vue-eslint-parser": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz",
+      "integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==",
+      "dev": true,
+      "requires": {
+        "debug": "^3.1.0",
+        "eslint-scope": "^3.7.1",
+        "eslint-visitor-keys": "^1.0.0",
+        "espree": "^3.5.2",
+        "esquery": "^1.0.0",
+        "lodash": "^4.17.4"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "5.7.3",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+          "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+          "dev": true
+        },
+        "acorn-jsx": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+          "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+          "dev": true,
+          "requires": {
+            "acorn": "^3.0.4"
+          },
+          "dependencies": {
+            "acorn": {
+              "version": "3.3.0",
+              "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+              "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+              "dev": true
+            }
+          }
+        },
+        "eslint-scope": {
+          "version": "3.7.3",
+          "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz",
+          "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==",
+          "dev": true,
+          "requires": {
+            "esrecurse": "^4.1.0",
+            "estraverse": "^4.1.1"
+          }
+        },
+        "espree": {
+          "version": "3.5.4",
+          "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
+          "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
+          "dev": true,
+          "requires": {
+            "acorn": "^5.5.0",
+            "acorn-jsx": "^3.0.0"
+          }
+        }
+      }
+    },
+    "which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "dev": true,
+      "requires": {
+        "isexe": "^2.0.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"
+      }
+    },
+    "wordwrap": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+      "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+      "dev": true
+    },
+    "wrap-ansi": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz",
+      "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=",
+      "dev": true,
+      "requires": {
+        "string-width": "^2.1.1",
+        "strip-ansi": "^4.0.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+          "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+          "dev": true,
+          "requires": {
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^4.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        }
+      }
+    },
+    "wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+    },
+    "write": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
+      "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
+      "dev": true,
+      "requires": {
+        "mkdirp": "^0.5.1"
+      }
+    },
+    "xss": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.6.tgz",
+      "integrity": "sha512-6Q9TPBeNyoTRxgZFk5Ggaepk/4vUOYdOsIUYvLehcsIZTFjaavbVnsuAkLA5lIFuug5hw8zxcB9tm01gsjph2A==",
+      "requires": {
+        "commander": "^2.9.0",
+        "cssfilter": "0.0.10"
+      }
+    },
+    "yallist": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+      "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A=="
+    }
+  }
+}

+ 3 - 3
package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "wekan",
   "name": "wekan",
-  "version": "v3.20.0",
+  "version": "v3.35.0",
   "description": "Open-Source kanban",
   "description": "Open-Source kanban",
   "private": true,
   "private": true,
   "scripts": {
   "scripts": {
@@ -53,7 +53,7 @@
     "prettier-eslint": "^8.8.2"
     "prettier-eslint": "^8.8.2"
   },
   },
   "dependencies": {
   "dependencies": {
-    "@babel/runtime": "^7.5.4",
+    "@babel/runtime": "^7.5.5",
     "ajv": "^5.0.0",
     "ajv": "^5.0.0",
     "babel-runtime": "^6.26.0",
     "babel-runtime": "^6.26.0",
     "bcrypt": "^3.0.2",
     "bcrypt": "^3.0.2",
@@ -66,7 +66,7 @@
     "mongodb": "^2.2.19",
     "mongodb": "^2.2.19",
     "os": "^0.1.1",
     "os": "^0.1.1",
     "page": "^1.8.6",
     "page": "^1.8.6",
-    "qs": "^6.5.2",
+    "qs": "^6.8.0",
     "source-map-support": "^0.5.12",
     "source-map-support": "^0.5.12",
     "xss": "^1.0.6"
     "xss": "^1.0.6"
   }
   }

+ 2 - 2
public/api/wekan.html

@@ -1524,7 +1524,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
 	  	<ul class="toc-list-h1">
 	  	<ul class="toc-list-h1">
         
         
           <li>
           <li>
-            <a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v3.19">Wekan REST API v3.19</a>
+            <a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v3.34">Wekan REST API v3.34</a>
             
             
           </li>
           </li>
         
         
@@ -2017,7 +2017,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
     <div class="page-wrapper">
     <div class="page-wrapper">
       <div class="dark-box"></div>
       <div class="dark-box"></div>
       <div class="content">
       <div class="content">
-        <h1 id="wekan-rest-api">Wekan REST API v3.19</h1>
+        <h1 id="wekan-rest-api">Wekan REST API v3.34</h1>
 <blockquote>
 <blockquote>
 <p>Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.</p>
 <p>Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.</p>
 </blockquote>
 </blockquote>

+ 1 - 1
public/api/wekan.yml

@@ -1,7 +1,7 @@
 swagger: '2.0'
 swagger: '2.0'
 info:
 info:
   title: Wekan REST API
   title: Wekan REST API
-  version: v3.19
+  version: v3.34
   description: |
   description: |
     The REST API allows you to control and extend Wekan with ease.
     The REST API allows you to control and extend Wekan with ease.
 
 

+ 3 - 3
rebuild-wekan.bat

@@ -13,15 +13,15 @@ REM Install chocolatey
 
 
 choco install -y git curl python2 dotnet4.5.2 nano mongodb-3 mongoclient meteor
 choco install -y git curl python2 dotnet4.5.2 nano mongodb-3 mongoclient meteor
 
 
-curl -O https://nodejs.org/dist/v8.12.0/node-v8.12.0-x64.msi
-call node-v8.12.0-x64.msi
+curl -O https://nodejs.org/dist/v8.16.1/node-v8.16.1-x64.msi
+call node-v8.16.1-x64.msi
 
 
 call npm config -g set msvs_version 2015
 call npm config -g set msvs_version 2015
 call meteor npm config -g set msvs_version 2015
 call meteor npm config -g set msvs_version 2015
 
 
 call npm -g install npm
 call npm -g install npm
 call npm -g install node-gyp
 call npm -g install node-gyp
-call npm -g install fibers@2.0.0
+call npm -g install fibers
 cd C:\repos
 cd C:\repos
 git clone https://github.com/wekan/wekan.git
 git clone https://github.com/wekan/wekan.git
 cd wekan
 cd wekan

+ 1 - 1
rebuild-wekan.sh

@@ -79,7 +79,7 @@ do
 			curl -0 -L https://npmjs.org/install.sh | sudo sh
 			curl -0 -L https://npmjs.org/install.sh | sudo sh
 			sudo chown -R $(id -u):$(id -g) $HOME/.npm
 			sudo chown -R $(id -u):$(id -g) $HOME/.npm
 			sudo npm -g install n
 			sudo npm -g install n
-			sudo n 8.16.0
+			sudo n 8.16.1
 			#curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
 			#curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
 			#sudo apt-get install -y nodejs
 			#sudo apt-get install -y nodejs
 		elif [[ "$OSTYPE" == "darwin"* ]]; then
 		elif [[ "$OSTYPE" == "darwin"* ]]; then

+ 0 - 111
releases/virtualbox/rebuild-wekan.sh

@@ -1,111 +0,0 @@
-#!/bin/bash
-
-echo "Note: If you use other locale than en_US.UTF-8 , you need to additionally install en_US.UTF-8"
-echo "      with 'sudo dpkg-reconfigure locales' , so that MongoDB works correctly."
-echo "      You can still use any other locale as your main locale."
-
-function pause(){
-	read -p "$*"
-}
-
-echo
-PS3='Please enter your choice: '
-options=("Install Wekan dependencies" "Build Wekan" "Quit")
-select opt in "${options[@]}"
-do
-    case $opt in
-        "Install Wekan dependencies")
-
-		if [[ "$OSTYPE" == "linux-gnu" ]]; then
-	                echo "Linux";
-			echo "Ubuntu, Mint, Debian, or Debian on Windows Subsystem for Linux";
-                        sudo apt-get install -y build-essential git curl wget;
-			curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -;
-		elif [[ "$OSTYPE" == "darwin"* ]]; then
-		        echo "macOS";
-			pause '1) Install XCode 2) Install Node 8.x from https://nodejs.org/en/ 3) Press [Enter] key to continue.'
-		elif [[ "$OSTYPE" == "cygwin" ]]; then
-		        # POSIX compatibility layer and Linux environment emulation for Windows
-		        echo "TODO: Add Cygwin";
-			exit;
-		elif [[ "$OSTYPE" == "msys" ]]; then
-		        # Lightweight shell and GNU utilities compiled for Windows (part of MinGW)
-		        echo "TODO: Add msys on Windows";
-			exit;
-		elif [[ "$OSTYPE" == "win32" ]]; then
-		        # I'm not sure this can happen.
-		        echo "TODO: Add Windows";
-			exit;
-		elif [[ "$OSTYPE" == "freebsd"* ]]; then
-		        echo "TODO: Add FreeBSD";
-			exit;
-		else
-		        echo "Unknown"
-			echo ${OSTYPE}
-			exit;
-		fi
-
-	        ## Latest npm with Meteor 1.6
-	        sudo npm -g install npm
-	        sudo npm -g install node-gyp
-	        # Latest fibers for Meteor 1.6
-	        sudo npm -g install fibers@2.0.0
-	        # Install Meteor, if it's not yet installed
-	        curl https://install.meteor.com | bash
-	        mkdir ~/repos
-	        cd ~/repos
-	        git clone https://github.com/wekan/wekan.git
-	        cd wekan
-	        git checkout devel
-		break
-		;;
-        "Build Wekan")
-		echo "Building Wekan."
-		cd ~/repos/wekan
-		## REPOS BELOW ARE INCLUDED TO WEKAN
-		#mkdir -p ~/repos/wekan/packages
-		#cd ~/repos/wekan/packages
-		#git clone --depth 1 -b master https://github.com/wekan/flow-router.git kadira-flow-router
-		#git clone --depth 1 -b master https://github.com/meteor-useraccounts/core.git meteor-useraccounts-core
-		#git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-cas.git
-		#git clone --depth 1 -b master https://github.com/wekan/wekan-ldap.git
-		#git clone --depth 1 -b master https://github.com/wekan/wekan-scrollbar.git
-		#git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-oidc.git
-		#git clone --depth 1 -b master --recurse-submodules https://github.com/wekan/markdown.git
-                #mv meteor-accounts-oidc/packages/switch_accounts-oidc wekan_accounts-oidc
-                #mv meteor-accounts-oidc/packages/switch_oidc wekan_oidc
-                #rm -rf meteor-accounts-oidc
-		if [[ "$OSTYPE" == "darwin"* ]]; then
-			echo "sed at macOS";
-			sed -i '' 's/api\.versionsFrom/\/\/api.versionsFrom/' ~/repos/wekan/packages/meteor-useraccounts-core/package.js
-		else
-			echo "sed at ${OSTYPE}"
-			sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' ~/repos/wekan/packages/meteor-useraccounts-core/package.js
-		fi
-
-		cd ~/repos/wekan
-		rm -rf node_modules
-		meteor npm install
-		rm -rf .build
-		meteor build .build --directory
-		cp -f fix-download-unicode/cfs_access-point.txt .build/bundle/programs/server/packages/cfs_access-point.js
-		#Removed binary version of bcrypt because of security vulnerability that is not fixed yet.
-		#https://github.com/wekan/wekan/commit/4b2010213907c61b0e0482ab55abb06f6a668eac
-		#https://github.com/wekan/wekan/commit/7eeabf14be3c63fae2226e561ef8a0c1390c8d3c
-		#cd ~/repos/wekan/.build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt
-		#rm -rf node_modules/bcrypt
-		#meteor npm install bcrypt
-		cd ~/repos/wekan/.build/bundle/programs/server
-		rm -rf node_modules
-		meteor npm install
-		#meteor npm install bcrypt
-		cd ~/repos
-		echo Done.
-		break
-		;;
-        "Quit")
-		break
-            ;;
-        *) echo invalid option;;
-    esac
-done

+ 3 - 3
releases/virtualbox/start-wekan.sh

@@ -50,19 +50,19 @@
         #---------------------------------------------------------------
         #---------------------------------------------------------------
         # ==== BIGEVENTS DUE ETC NOTIFICATIONS =====
         # ==== BIGEVENTS DUE ETC NOTIFICATIONS =====
         # https://github.com/wekan/wekan/pull/2541
         # https://github.com/wekan/wekan/pull/2541
-        # Introduced a system env var BIGEVENTS_PATTERN default as "due",
+        # Introduced a system env var BIGEVENTS_PATTERN default as "NONE",
         # so any activityType matches the pattern, system will send out
         # so any activityType matches the pattern, system will send out
         # notifications to all board members no matter they are watching
         # notifications to all board members no matter they are watching
         # or tracking the board or not. Owner of the wekan server can
         # or tracking the board or not. Owner of the wekan server can
         # disable the feature by setting this variable to "NONE" or
         # disable the feature by setting this variable to "NONE" or
         # change the pattern to any valid regex. i.e. '|' delimited
         # change the pattern to any valid regex. i.e. '|' delimited
         # activityType names.
         # activityType names.
-        # a) Default
+        # a) Example
         #export BIGEVENTS_PATTERN=due
         #export BIGEVENTS_PATTERN=due
         # b) All
         # b) All
         #export BIGEVENTS_PATTERN=received|start|due|end
         #export BIGEVENTS_PATTERN=received|start|due|end
         # c) Disabled
         # c) Disabled
-        #export BIGEVENTS_PATTERN=NONE
+        export BIGEVENTS_PATTERN=NONE
         #---------------------------------------------------------------
         #---------------------------------------------------------------
         # ==== EMAIL DUE DATE NOTIFICATION =====
         # ==== EMAIL DUE DATE NOTIFICATION =====
         # https://github.com/wekan/wekan/pull/2536
         # https://github.com/wekan/wekan/pull/2536

+ 3 - 2
sandstorm-pkgdef.capnp

@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
     appTitle = (defaultText = "Wekan"),
     appTitle = (defaultText = "Wekan"),
     # The name of the app as it is displayed to the user.
     # The name of the app as it is displayed to the user.
 
 
-    appVersion = 322,
+    appVersion = 337,
     # Increment this for every release.
     # Increment this for every release.
 
 
-    appMarketingVersion = (defaultText = "3.20.0~2019-08-15"),
+    appMarketingVersion = (defaultText = "3.35.0~2019-08-29"),
     # Human-readable presentation of the app version.
     # Human-readable presentation of the app version.
 
 
     minUpgradableAppVersion = 0,
     minUpgradableAppVersion = 0,
@@ -240,6 +240,7 @@ const myCommand :Spk.Manifest.Command = (
     (key = "WITH_API", value = "true"),
     (key = "WITH_API", value = "true"),
     (key = "RICHER_CARD_COMMENT_EDITOR", value="true"),
     (key = "RICHER_CARD_COMMENT_EDITOR", value="true"),
     (key = "CARD_OPENED_WEBHOOK_ENABLED", value="false"),
     (key = "CARD_OPENED_WEBHOOK_ENABLED", value="false"),
+    (key = "BIGEVENTS_PATTERN", value="NONE"),
     (key = "MATOMO_ADDRESS", value=""),
     (key = "MATOMO_ADDRESS", value=""),
     (key = "MATOMO_SITE_ID", value=""),
     (key = "MATOMO_SITE_ID", value=""),
     (key = "MATOMO_DO_NOT_TRACK", value="true"),
     (key = "MATOMO_DO_NOT_TRACK", value="true"),

+ 15 - 9
server/publications/boards.js

@@ -3,13 +3,14 @@
 // 1. that the user is a member of
 // 1. that the user is a member of
 // 2. the user has starred
 // 2. the user has starred
 Meteor.publish('boards', function() {
 Meteor.publish('boards', function() {
+  const userId = this.userId;
   // Ensure that the user is connected. If it is not, we need to return an empty
   // Ensure that the user is connected. If it is not, we need to return an empty
   // array to tell the client to remove the previously published docs.
   // array to tell the client to remove the previously published docs.
-  if (!Match.test(this.userId, String)) return [];
+  if (!Match.test(userId, String) || !userId) return [];
 
 
   // Defensive programming to verify that starredBoards has the expected
   // Defensive programming to verify that starredBoards has the expected
   // format -- since the field is in the `profile` a user can modify it.
   // format -- since the field is in the `profile` a user can modify it.
-  const { starredBoards = [] } = Users.findOne(this.userId).profile || [];
+  const { starredBoards = [] } = (Users.findOne(userId) || {}).profile || {};
   check(starredBoards, [String]);
   check(starredBoards, [String]);
 
 
   return Boards.find(
   return Boards.find(
@@ -20,7 +21,7 @@ Meteor.publish('boards', function() {
           _id: { $in: starredBoards },
           _id: { $in: starredBoards },
           permission: 'public',
           permission: 'public',
         },
         },
-        { members: { $elemMatch: { userId: this.userId, isActive: true } } },
+        { members: { $elemMatch: { userId, isActive: true } } },
       ],
       ],
     },
     },
     {
     {
@@ -40,14 +41,15 @@ Meteor.publish('boards', function() {
 });
 });
 
 
 Meteor.publish('archivedBoards', function() {
 Meteor.publish('archivedBoards', function() {
-  if (!Match.test(this.userId, String)) return [];
+  const userId = this.userId;
+  if (!Match.test(userId, String)) return [];
 
 
   return Boards.find(
   return Boards.find(
     {
     {
       archived: true,
       archived: true,
       members: {
       members: {
         $elemMatch: {
         $elemMatch: {
-          userId: this.userId,
+          userId,
           isAdmin: true,
           isAdmin: true,
         },
         },
       },
       },
@@ -70,6 +72,13 @@ Meteor.publishRelations('board', function(boardId, isArchived) {
   check(boardId, String);
   check(boardId, String);
   check(isArchived, Boolean);
   check(isArchived, Boolean);
   const thisUserId = this.userId;
   const thisUserId = this.userId;
+  const $or = [{ permission: 'public' }];
+
+  if (thisUserId) {
+    $or.push({
+      members: { $elemMatch: { userId: thisUserId, isActive: true } },
+    });
+  }
 
 
   this.cursor(
   this.cursor(
     Boards.find(
     Boards.find(
@@ -78,10 +87,7 @@ Meteor.publishRelations('board', function(boardId, isArchived) {
         archived: false,
         archived: false,
         // If the board is not public the user has to be a member of it to see
         // If the board is not public the user has to be a member of it to see
         // it.
         // it.
-        $or: [
-          { permission: 'public' },
-          { members: { $elemMatch: { userId: this.userId, isActive: true } } },
-        ],
+        $or,
         // Sort required to ensure oplog usage
         // Sort required to ensure oplog usage
       },
       },
       { limit: 1, sort: { _id: 1 } },
       { limit: 1, sort: { _id: 1 } },

+ 2 - 2
snap-src/bin/config

@@ -104,8 +104,8 @@ DESCRIPTION_IMAGE_COMPRESS_RATIO="Image compress ratio: Allow to shrink attached
 DEFAULT_IMAGE_COMPRESS_RATIO=""
 DEFAULT_IMAGE_COMPRESS_RATIO=""
 KEY_IMAGE_COMPRESS_RATIO="image-compress-ratio"
 KEY_IMAGE_COMPRESS_RATIO="image-compress-ratio"
 
 
-DESCRIPTION_BIGEVENTS_PATTERN="Big events pattern: Notify always due etc regardless of notification settings. Default: due, All: received|start|due|end, Disabled: NONE"
-DEFAULT_BIGEVENTS_PATTERN=""
+DESCRIPTION_BIGEVENTS_PATTERN="Big events pattern: Notify always due etc regardless of notification settings. Default: NONE, All: received|start|due|end, Disabled: NONE"
+DEFAULT_BIGEVENTS_PATTERN="NONE"
 KEY_BIGEVENTS_PATTERN="bigevents-pattern"
 KEY_BIGEVENTS_PATTERN="bigevents-pattern"
 
 
 DESCRIPTION_NOTIFY_DUE_DAYS_BEFORE_AND_AFTER="Notify due days, default 2 days before and after. 0 = due notifications disabled. Default: 2"
 DESCRIPTION_NOTIFY_DUE_DAYS_BEFORE_AND_AFTER="Notify due days, default 2 days before and after. 0 = due notifications disabled. Default: 2"

+ 26 - 2
snap-src/bin/mongodb-control

@@ -16,6 +16,24 @@ fi
 
 
 export LC_ALL=C
 export LC_ALL=C
 
 
+# When starting MongoDB, if logfile exist, delete it, because now uses syslog instead of logfile,
+# because syslog usually already has log rotation.
+# https://github.com/wekan/wekan-snap/issues/92
+if test -f "$SNAP_COMMON/mongodb.log"; then
+   rm -f "$SNAP_COMMON/mongodb.log"
+fi
+
+# Alternative: When starting MongoDB, and using logfile, truncate log to last 1000 lines of text.
+# 1) If file exists:
+#if test -f "$SNAP_COMMON/mongodb.log"; then
+#    # 2) Copy last 1000 lines to variable loglast1000lines.
+#    loglast1000lines=$(tail -1000 "$SNAP_COMMON/mongodb.log")
+#    # 3) Copy variable to replace original MongoDB log.
+#    echo "$loglast1000lines" > "$SNAP_COMMON/mongodb.log"
+#    # 4) Set variable to be empty.
+#    loglast1000lines=""
+#fi
+
 if [ -z "$MONGO_URL" ]; then
 if [ -z "$MONGO_URL" ]; then
 
 
     # start mongo deamon
     # start mongo deamon
@@ -31,11 +49,17 @@ if [ -z "$MONGO_URL" ]; then
     fi
     fi
     echo "mongodb bind options: $BIND_OPTIONS"
     echo "mongodb bind options: $BIND_OPTIONS"
 
 
-    mongod --dbpath $SNAP_COMMON --logpath $SNAP_COMMON/mongodb.log --logappend --journal $BIND_OPTIONS --smallfiles
+    ## OLD: Logging to file.
+    #mongod --dbpath $SNAP_COMMON --logpath $SNAP_COMMON/mongodb.log --logappend --journal $BIND_OPTIONS --smallfiles
+    ## NEW: Logging to syslog, that usually has already log rotation.
+    mongod --dbpath $SNAP_COMMON --syslog --journal $BIND_OPTIONS --smallfiles
 
 
 else
 else
 
 
-    mongod --dbpath $SNAP_COMMON --logpath $SNAP_COMMON/mongodb.log --logappend --journal $MONGO_URL --smallfiles
+    ## OLD: Logging to file.
+    #mongod --dbpath $SNAP_COMMON --logpath $SNAP_COMMON/mongodb.log --logappend --journal $MONGO_URL --smallfiles
+    ## NEW: Logging to syslog, that usually has already log rotation.
+    mongod --dbpath $SNAP_COMMON --syslog --journal $MONGO_URL --smallfiles
 
 
 fi
 fi
 
 

+ 16 - 7
snapcraft.yaml

@@ -1,7 +1,6 @@
 name: wekan
 name: wekan
-version: 0
-version-script: git describe --dirty --tags |  cut -c 2-
-summary: The open-source kanban
+adopt-info: wekan
+summary: The Open-Source kanban
 description: |
 description: |
    Wekan is an open-source and collaborative kanban board application.
    Wekan is an open-source and collaborative kanban board application.
 
 
@@ -81,7 +80,7 @@ parts:
     wekan:
     wekan:
         source: .
         source: .
         plugin: nodejs
         plugin: nodejs
-        node-engine: 8.16.0
+        node-engine: 8.16.1
         node-packages:
         node-packages:
             - node-gyp
             - node-gyp
             - node-pre-gyp
             - node-pre-gyp
@@ -190,7 +189,7 @@ parts:
             #  git clone --depth 1 -b master --recurse-submodules https://github.com/wekan/markdown.git
             #  git clone --depth 1 -b master --recurse-submodules https://github.com/wekan/markdown.git
             #  cd ..
             #  cd ..
             #fi
             #fi
-            rm -rf package-lock.json .build
+            rm -rf .build
             meteor add standard-minifier-js --allow-superuser
             meteor add standard-minifier-js --allow-superuser
             meteor npm install --allow-superuser
             meteor npm install --allow-superuser
             meteor npm install --allow-superuser --save babel-runtime
             meteor npm install --allow-superuser --save babel-runtime
@@ -213,14 +212,24 @@ parts:
             cd ../../../..
             cd ../../../..
             cp -r .build/bundle/* $SNAPCRAFT_PART_INSTALL/
             cp -r .build/bundle/* $SNAPCRAFT_PART_INSTALL/
             cp .build/bundle/.node_version.txt $SNAPCRAFT_PART_INSTALL/
             cp .build/bundle/.node_version.txt $SNAPCRAFT_PART_INSTALL/
-            rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/wekan
+            # Delete phantomjs
             rm -f $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs
             rm -f $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs
+            rm -f $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/meteor/lucasantoniassi_accounts-lockout/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs
+            # Delete all .swp files at subdirectories
+            #find $SNAPCRAFT_PART_INSTALL -name \*.swp -type f -delete
+            # Delete each .swp file separately
+            #rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/wekan
+            rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/wekan/.build/bundle/programs/server/npm/node_modules/tar/lib/.mkdir.js.swp
+            rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/wekan/.build/bundle/programs/server/node_modules/node-pre-gyp/node_modules/tar/lib/.mkdir.js.swp
+            rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/wekan/node_modules/tar/lib/.mkdir.js.swp
             rm -f $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/tar/lib/.mkdir.js.swp
             rm -f $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/tar/lib/.mkdir.js.swp
             rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/node-pre-gyp/node_modules/tar/lib/.mkdir.js.swp
             rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/node-pre-gyp/node_modules/tar/lib/.mkdir.js.swp
             rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/node-gyp/node_modules/tar/lib/.mkdir.js.swp
             rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/node-gyp/node_modules/tar/lib/.mkdir.js.swp
             # Meteor 1.8.x additional .swp remove
             # Meteor 1.8.x additional .swp remove
             rm -f $SNAPCRAFT_PART_INSTALL/programs/server/node_modules/node-pre-gyp/node_modules/tar/lib/.mkdir.js.swp
             rm -f $SNAPCRAFT_PART_INSTALL/programs/server/node_modules/node-pre-gyp/node_modules/tar/lib/.mkdir.js.swp
-
+            # Wekan version
+            snapcraftctl set-version "$(git describe --dirty --tags | cut -c 2-)"
+            snapcraftctl build
         organize:
         organize:
             README: README.wekan
             README: README.wekan
         prime:
         prime:

+ 3 - 3
start-wekan.bat

@@ -45,19 +45,19 @@ REM SET ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15
 
 
 REM # ==== BIGEVENTS DUE ETC NOTIFICATIONS =====
 REM # ==== BIGEVENTS DUE ETC NOTIFICATIONS =====
 REM # https://github.com/wekan/wekan/pull/2541
 REM # https://github.com/wekan/wekan/pull/2541
-REM # Introduced a system env var BIGEVENTS_PATTERN default as "due",
+REM # Introduced a system env var BIGEVENTS_PATTERN default as "NONE",
 REM # so any activityType matches the pattern, system will send out
 REM # so any activityType matches the pattern, system will send out
 REM # notifications to all board members no matter they are watching
 REM # notifications to all board members no matter they are watching
 REM # or tracking the board or not. Owner of the wekan server can
 REM # or tracking the board or not. Owner of the wekan server can
 REM # disable the feature by setting this variable to "NONE" or
 REM # disable the feature by setting this variable to "NONE" or
 REM # change the pattern to any valid regex. i.e. '|' delimited
 REM # change the pattern to any valid regex. i.e. '|' delimited
 REM # activityType names.
 REM # activityType names.
-REM # a) Default
+REM # a) Example
 REM SET BIGEVENTS_PATTERN=due
 REM SET BIGEVENTS_PATTERN=due
 REM # b) All
 REM # b) All
 REM SET BIGEVENTS_PATTERN=received|start|due|end
 REM SET BIGEVENTS_PATTERN=received|start|due|end
 REM # c) Disabled
 REM # c) Disabled
-REM SET BIGEVENTS_PATTERN=NONE
+SET BIGEVENTS_PATTERN=NONE
 
 
 REM # ==== EMAIL DUE DATE NOTIFICATION =====
 REM # ==== EMAIL DUE DATE NOTIFICATION =====
 REM # https://github.com/wekan/wekan/pull/2536
 REM # https://github.com/wekan/wekan/pull/2536

+ 3 - 3
start-wekan.sh

@@ -51,19 +51,19 @@
       #---------------------------------------------------------------
       #---------------------------------------------------------------
       # ==== BIGEVENTS DUE ETC NOTIFICATIONS =====
       # ==== BIGEVENTS DUE ETC NOTIFICATIONS =====
       # https://github.com/wekan/wekan/pull/2541
       # https://github.com/wekan/wekan/pull/2541
-      # Introduced a system env var BIGEVENTS_PATTERN default as "due",
+      # Introduced a system env var BIGEVENTS_PATTERN default as "NONE",
       # so any activityType matches the pattern, system will send out
       # so any activityType matches the pattern, system will send out
       # notifications to all board members no matter they are watching
       # notifications to all board members no matter they are watching
       # or tracking the board or not. Owner of the wekan server can
       # or tracking the board or not. Owner of the wekan server can
       # disable the feature by setting this variable to "NONE" or
       # disable the feature by setting this variable to "NONE" or
       # change the pattern to any valid regex. i.e. '|' delimited
       # change the pattern to any valid regex. i.e. '|' delimited
       # activityType names.
       # activityType names.
-      # a) Default
+      # a) Example
       #export BIGEVENTS_PATTERN=due
       #export BIGEVENTS_PATTERN=due
       # b) All
       # b) All
       #export BIGEVENTS_PATTERN=received|start|due|end
       #export BIGEVENTS_PATTERN=received|start|due|end
       # c) Disabled
       # c) Disabled
-      #export BIGEVENTS_PATTERN=NONE
+      export BIGEVENTS_PATTERN=NONE
       #---------------------------------------------------------------
       #---------------------------------------------------------------
       # ==== EMAIL DUE DATE NOTIFICATION =====
       # ==== EMAIL DUE DATE NOTIFICATION =====
       # https://github.com/wekan/wekan/pull/2536
       # https://github.com/wekan/wekan/pull/2536

+ 60 - 0
torodb-postgresql/docker-compose.yml

@@ -211,6 +211,66 @@ services:
       # https://github.com/wekan/wekan-gogs
       # https://github.com/wekan/wekan-gogs
       # If you disable Wekan API with false, Export Board does not work.
       # If you disable Wekan API with false, Export Board does not work.
       - WITH_API=true
       - WITH_API=true
+      #---------------------------------------------------------------
+      # ==== PASSWORD BRUTE FORCE PROTECTION ====
+      #https://atmospherejs.com/lucasantoniassi/accounts-lockout
+      #Defaults below. Uncomment to change. wekan/server/accounts-lockout.js
+      #- ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE=3
+      #- ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD=60
+      #- ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW=15
+      #- ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE=3
+      #- ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60
+      #- ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15
+      #---------------------------------------------------------------
+      # ==== STORE ATTACHMENT ON SERVER FILESYSTEM INSTEAD OF MONGODB ====
+      # https://github.com/wekan/wekan/pull/2603
+      #- ATTACHMENTS_STORE_PATH = <pathname> # pathname can be relative or fullpath
+      #---------------------------------------------------------------
+      # ==== RICH TEXT EDITOR IN CARD COMMENTS ====
+      # https://github.com/wekan/wekan/pull/2560
+      - RICHER_CARD_COMMENT_EDITOR=true
+      #---------------------------------------------------------------
+      # ==== CARD OPENED, SEND WEBHOOK MESSAGE ====
+      # https://github.com/wekan/wekan/issues/2518
+      - CARD_OPENED_WEBHOOK_ENABLED=false
+      #---------------------------------------------------------------
+      # ==== Allow to shrink attached/pasted image ====
+      # https://github.com/wekan/wekan/pull/2544
+      #-MAX_IMAGE_PIXEL=1024
+      #-IMAGE_COMPRESS_RATIO=80
+      #---------------------------------------------------------------
+      # ==== BIGEVENTS DUE ETC NOTIFICATIONS =====
+      # https://github.com/wekan/wekan/pull/2541
+      # Introduced a system env var BIGEVENTS_PATTERN default as "NONE",
+      # so any activityType matches the pattern, system will send out
+      # notifications to all board members no matter they are watching
+      # or tracking the board or not. Owner of the wekan server can
+      # disable the feature by setting this variable to "NONE" or
+      # change the pattern to any valid regex. i.e. '|' delimited
+      # activityType names.
+      # a) Example
+      #- BIGEVENTS_PATTERN=due
+      # b) All
+      #- BIGEVENTS_PATTERN=received|start|due|end
+      # c) Disabled
+      - BIGEVENTS_PATTERN=NONE
+      #---------------------------------------------------------------
+      # ==== EMAIL DUE DATE NOTIFICATION =====
+      # https://github.com/wekan/wekan/pull/2536
+      # System timelines will be showing any user modification for
+      # dueat startat endat receivedat, also notification to
+      # the watchers and if any card is due, about due or past due.
+      #
+      # Notify due days, default 2 days before and after. 0 = due notifications disabled. Default: 2
+      #- NOTIFY_DUE_DAYS_BEFORE_AND_AFTER=2
+      #
+      # Notify due at hour of day. Default every morning at 8am. Can be 0-23.
+      # If env variable has parsing error, use default. Notification sent to watchers.
+      #- NOTIFY_DUE_AT_HOUR_OF_DAY=8
+      #-----------------------------------------------------------------
+      # ==== EMAIL NOTIFICATION TIMEOUT, ms =====
+      # Defaut: 30000 ms = 30s
+      #- EMAIL_NOTIFICATION_TIMEOUT=30000
       #-----------------------------------------------------------------
       #-----------------------------------------------------------------
       # ==== CORS =====
       # ==== CORS =====
       # CORS: Set Access-Control-Allow-Origin header. Example: *
       # CORS: Set Access-Control-Allow-Origin header. Example: *