Merge branch 'master' into filesystem_index

This commit is contained in:
A.Unger
2020-10-22 13:11:21 +02:00
223 changed files with 23589 additions and 3678 deletions

View File

@@ -7,7 +7,8 @@ exclude_paths:
- 'docs/**'
- '**/docs/**'
- '**/pkg/proto/**'
- 'konnectd/assets/identifier/**'
- 'konnectd/ui_config/**'
- 'konnectd/scripts/**'
- 'settings/rollup.config.js'
- 'accounts/rollup.config.js'
- 'ocis/docker/eos-ocis/Dockerfile'

View File

@@ -15,7 +15,7 @@ config = {
},
'apiTests': {
'coreBranch': 'master',
'coreCommit': '79fea80eece798d9cec7dadcc0cf02cf741cfbe6',
'coreCommit': '914992f5f6d4bb562534fa52273e5bd0bc11b208',
'numberOfParts': 6
},
'uiTests': {
@@ -342,8 +342,8 @@ def localApiTests(ctx, coreBranch = 'master', coreCommit = '', storage = 'ownclo
'pull': 'always',
'environment' : {
'TEST_SERVER_URL': 'https://ocis-server:9200',
'OCIS_REVA_DATA_ROOT': '%s' % ('/srv/app/tmp/ocis/owncloud/' if storage == 'owncloud' else ''),
'DELETE_USER_DATA_CMD': '%s' % ('' if storage == 'owncloud' else 'rm -rf /srv/app/tmp/ocis/storage/users/nodes/root/*'),
'OCIS_REVA_DATA_ROOT': '%s' % ('/srv/app/tmp/ocis/owncloud/data/' if storage == 'owncloud' else ''),
'DELETE_USER_DATA_CMD': '%s' % ('' if storage == 'owncloud' else 'rm -rf /srv/app/tmp/ocis/storage/users/nodes/root/* /srv/app/tmp/ocis/storage/users/nodes/*-*-*-*'),
'SKELETON_DIR': '/srv/app/tmp/testing/data/apiSkeleton',
'OCIS_SKELETON_STRATEGY': '%s' % ('copy' if storage == 'owncloud' else 'upload'),
'TEST_OCIS':'true',
@@ -396,8 +396,8 @@ def coreApiTests(ctx, coreBranch = 'master', coreCommit = '', part_number = 1, n
'pull': 'always',
'environment' : {
'TEST_SERVER_URL': 'https://ocis-server:9200',
'OCIS_REVA_DATA_ROOT': '%s' % ('/srv/app/tmp/ocis/owncloud/' if storage == 'owncloud' else ''),
'DELETE_USER_DATA_CMD': '%s' % ('' if storage == 'owncloud' else 'rm -rf /srv/app/tmp/ocis/storage/users/nodes/root/*'),
'OCIS_REVA_DATA_ROOT': '%s' % ('/srv/app/tmp/ocis/owncloud/data/' if storage == 'owncloud' else ''),
'DELETE_USER_DATA_CMD': '%s' % ('' if storage == 'owncloud' else 'rm -rf /srv/app/tmp/ocis/storage/users/nodes/root/* /srv/app/tmp/ocis/storage/users/nodes/*-*-*-*'),
'SKELETON_DIR': '/srv/app/tmp/testing/data/apiSkeleton',
'OCIS_SKELETON_STRATEGY': '%s' % ('copy' if storage == 'owncloud' else 'upload'),
'TEST_OCIS':'true',
@@ -546,22 +546,18 @@ def accountsUITests(ctx, phoenixBranch, phoenixCommitId, storage):
'detach': True,
'environment' : {
#'OCIS_LOG_LEVEL': 'debug',
'STORAGE_STORAGE_HOME_DRIVER': '%s' % (storage),
'STORAGE_STORAGE_HOME_DATA_DRIVER': '%s' % (storage),
'STORAGE_STORAGE_OC_DRIVER': '%s' % (storage),
'STORAGE_STORAGE_OC_DATA_DRIVER': '%s' % (storage),
'STORAGE_STORAGE_HOME_DATA_TEMP_FOLDER': '/srv/app/tmp/',
'STORAGE_HOME_DRIVER': '%s' % (storage),
'STORAGE_STORAGE_OCIS_ROOT': '/srv/app/tmp/ocis/storage/users',
'STORAGE_STORAGE_LOCAL_ROOT': '/srv/app/tmp/ocis/reva/root',
'STORAGE_STORAGE_OWNCLOUD_DATADIR': '/srv/app/tmp/ocis/owncloud/data',
'STORAGE_STORAGE_OC_DATA_TEMP_FOLDER': '/srv/app/tmp/',
'STORAGE_STORAGE_OWNCLOUD_REDIS_ADDR': 'redis:6379',
'STORAGE_OIDC_ISSUER': 'https://ocis-server:9200',
'STORAGE_LDAP_IDP': 'https://ocis-server:9200',
'PROXY_OIDC_ISSUER': 'https://ocis-server:9200',
'STORAGE_STORAGE_OC_DATA_SERVER_URL': 'http://ocis-server:9164/data',
'STORAGE_DATAGATEWAY_URL': 'https://ocis-server:9200/data',
'STORAGE_FRONTEND_URL': 'https://ocis-server:9200',
'STORAGE_HOME_EXPOSE_DATA_SERVER': 'true',
'STORAGE_HOME_DATA_SERVER_URL': 'http://ocis-server:9155/data',
'STORAGE_DATAGATEWAY_PUBLIC_URL': 'https://ocis-server:9200/data',
'STORAGE_FRONTEND_PUBLIC_URL': 'https://ocis-server:9200',
'PHOENIX_WEB_CONFIG': '/drone/src/accounts/ui/tests/config/drone/ocis-config.json',
'KONNECTD_IDENTIFIER_REGISTRATION_CONF': '/drone/src/accounts/ui/tests/config/drone/identifier-registration.yml',
'KONNECTD_ISS': 'https://ocis-server:9200',
@@ -788,7 +784,6 @@ def dockerEos(ctx):
},
'auto_tag': True,
'context': 'ocis/docker/eos-ocis',
'auto_tag_suffix': 'linux-amd64',
'dockerfile': 'ocis/docker/eos-ocis/Dockerfile',
'repo': 'owncloud/eos-ocis',
},
@@ -1407,22 +1402,20 @@ def ocisServer(storage):
'detach': True,
'environment' : {
#'OCIS_LOG_LEVEL': 'debug',
'STORAGE_STORAGE_HOME_DRIVER': '%s' % (storage),
'STORAGE_STORAGE_HOME_DATA_DRIVER': '%s' % (storage),
'STORAGE_STORAGE_OC_DRIVER': '%s' % (storage),
'STORAGE_STORAGE_OC_DATA_DRIVER': '%s' % (storage),
'STORAGE_STORAGE_HOME_DATA_TEMP_FOLDER': '/srv/app/tmp/',
'STORAGE_HOME_DRIVER': '%s' % (storage),
'STORAGE_USERS_DRIVER': '%s' % (storage),
'STORAGE_STORAGE_OCIS_ROOT': '/srv/app/tmp/ocis/storage/users',
'STORAGE_STORAGE_LOCAL_ROOT': '/srv/app/tmp/ocis/local/root',
'STORAGE_STORAGE_OWNCLOUD_DATADIR': '/srv/app/tmp/ocis/owncloud/data',
'STORAGE_STORAGE_OC_DATA_TEMP_FOLDER': '/srv/app/tmp/',
'STORAGE_METADATA_ROOT': '/srv/app/tmp/ocis/metadata',
'STORAGE_STORAGE_OWNCLOUD_REDIS_ADDR': 'redis:6379',
'STORAGE_LDAP_IDP': 'https://ocis-server:9200',
'STORAGE_OIDC_ISSUER': 'https://ocis-server:9200',
'PROXY_OIDC_ISSUER': 'https://ocis-server:9200',
'STORAGE_STORAGE_OC_DATA_SERVER_URL': 'http://ocis-server:9164/data',
'STORAGE_DATAGATEWAY_URL': 'https://ocis-server:9200/data',
'STORAGE_FRONTEND_URL': 'https://ocis-server:9200',
'STORAGE_HOME_DATA_SERVER_URL': 'http://ocis-server:9155/data',
'STORAGE_DATAGATEWAY_PUBLIC_URL': 'https://ocis-server:9200/data',
'STORAGE_USERS_DATA_SERVER_URL': 'http://ocis-server:9158/data',
'STORAGE_FRONTEND_PUBLIC_URL': 'https://ocis-server:9200',
'PHOENIX_WEB_CONFIG': '/drone/src/ocis/tests/config/drone/ocis-config.json',
'KONNECTD_IDENTIFIER_REGISTRATION_CONF': '/drone/src/ocis/tests/config/drone/identifier-registration.yml',
'KONNECTD_ISS': 'https://ocis-server:9200',

5
.gitignore vendored
View File

@@ -10,3 +10,8 @@ node_modules/
*/assets
.idea
*/yarn-error.log
# Konnectd
konnectd/assets/identifier

View File

@@ -5,6 +5,7 @@
* Bugfix - Add missing env vars to docker compose: [#392](https://github.com/owncloud/ocis/pull/392)
* Bugfix - Don't enforce empty external apps slice: [#473](https://github.com/owncloud/ocis/pull/473)
* Bugfix - Fix button layout after phoenix update: [#625](https://github.com/owncloud/ocis/pull/625)
* Bugfix - Use micro default client: [#718](https://github.com/owncloud/ocis/pull/718)
* Bugfix - Fix director selection in proxy: [#521](https://github.com/owncloud/ocis/pull/521)
* Bugfix - Build docker images with alpine:latest instead of alpine:edge: [#416](https://github.com/owncloud/ocis/pull/416)
* Change - Accounts UI shows message when no permissions: [#656](https://github.com/owncloud/ocis/pull/656)
@@ -18,8 +19,10 @@
* Change - Switch over to a new custom-built runtime: [#287](https://github.com/owncloud/ocis/pull/287)
* Change - Account management permissions for Admin role: [#124](https://github.com/owncloud/product/issues/124)
* Change - Update phoenix to v0.18.0: [#651](https://github.com/owncloud/ocis/pull/651)
* Change - Default apps in ownCloud Web: [#688](https://github.com/owncloud/ocis/pull/688)
* Change - Make ocis-settings available: [#287](https://github.com/owncloud/ocis/pull/287)
* Change - Start ocis-proxy with the ocis server command: [#119](https://github.com/owncloud/ocis/issues/119)
* Change - Bring oC theme: [#698](https://github.com/owncloud/ocis/pull/698)
* Change - Update phoenix to v0.20.0: [#674](https://github.com/owncloud/ocis/pull/674)
* Change - Update reva config: [#336](https://github.com/owncloud/ocis/pull/336)
* Change - Settings and accounts appear in the user menu: [#656](https://github.com/owncloud/ocis/pull/656)
@@ -40,6 +43,7 @@
* Enhancement - Add glauth fallback backend: [#649](https://github.com/owncloud/ocis/pull/649)
* Enhancement - Launch a storage to store ocis-metadata: [#602](https://github.com/owncloud/ocis/pull/602)
* Enhancement - Simplify tracing config: [#92](https://github.com/owncloud/product/issues/92)
* Enhancement - Update reva to dd3a8c0f38: [#725](https://github.com/owncloud/ocis/pull/725)
## Details
@@ -71,6 +75,15 @@
https://github.com/owncloud/ocis/pull/625
* Bugfix - Use micro default client: [#718](https://github.com/owncloud/ocis/pull/718)
Tags: glauth
We found a file descriptor leak in the glauth connections to the accounts service. Fixed it by
using the micro default client.
https://github.com/owncloud/ocis/pull/718
* Bugfix - Fix director selection in proxy: [#521](https://github.com/owncloud/ocis/pull/521)
Tags: proxy
@@ -210,6 +223,15 @@
https://github.com/owncloud/phoenix/releases/tag/v0.18.0
https://github.com/owncloud/owncloud-design-system/releases/tag/v1.12.1
* Change - Default apps in ownCloud Web: [#688](https://github.com/owncloud/ocis/pull/688)
Tags: web
We changed the default apps for ownCloud Web to be only files and media-viewer.
Markdown-editor and draw-io have been removed as defaults.
https://github.com/owncloud/ocis/pull/688
* Change - Make ocis-settings available: [#287](https://github.com/owncloud/ocis/pull/287)
Tags: settings
@@ -229,6 +251,14 @@
https://github.com/owncloud/ocis/issues/119
https://github.com/owncloud/ocis/issues/136
* Change - Bring oC theme: [#698](https://github.com/owncloud/ocis/pull/698)
Tags: konnectd
We've styled our konnectd login page to reflect ownCloud theme.
https://github.com/owncloud/ocis/pull/698
* Change - Update phoenix to v0.20.0: [#674](https://github.com/owncloud/ocis/pull/674)
Tags: web
@@ -1250,3 +1280,10 @@
https://github.com/owncloud/product/issues/92
https://github.com/owncloud/ocis/pull/329
https://github.com/owncloud/ocis/pull/409
* Enhancement - Update reva to dd3a8c0f38: [#725](https://github.com/owncloud/ocis/pull/725)
* fixes etag propagation in the ocis driver
https://github.com/owncloud/ocis/pull/725
https://github.com/cs3org/reva/pull/1264

View File

File diff suppressed because one or more lines are too long

View File

@@ -206,12 +206,11 @@ func (r CS3Repo) DeleteGroup(ctx context.Context, id string) (err error) {
func (r CS3Repo) authenticate(ctx context.Context) (token string, err error) {
u := &user.User{
Id: &user.UserId{},
Id: &user.UserId{
OpaqueId: r.cfg.ServiceUser.UUID,
},
Groups: []string{},
}
if r.cfg.ServiceUser.Username != "" {
u.Id.OpaqueId = r.cfg.ServiceUser.UUID
}
return r.tm.MintToken(ctx, u)
}

View File

@@ -28,7 +28,7 @@ const navItems = [
name: 'accounts',
path: `/${appInfo.id}/`
},
menu: 'user'
menu: 'apps'
}
]

View File

@@ -1467,9 +1467,9 @@ binary-extensions@^2.0.0:
integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==
bl@^4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.2.tgz#52b71e9088515d0606d9dd9cc7aa48dc1f98e73a"
integrity sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==
version "4.0.3"
resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489"
integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==
dependencies:
buffer "^5.5.0"
inherits "^2.0.4"
@@ -4163,9 +4163,9 @@ lodash.union@^4.6.0:
integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=
lodash@^4.15.0, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4:
version "4.17.15"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
version "4.17.20"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
log-symbols@2.2.0:
version "2.2.0"

View File

@@ -0,0 +1,7 @@
Bugfix: Use micro default client
Tags: glauth
We found a file descriptor leak in the glauth connections to the accounts service. Fixed it by using the micro default client.
https://github.com/owncloud/ocis/pull/718

View File

@@ -0,0 +1,7 @@
Change: Default apps in ownCloud Web
Tags: web
We changed the default apps for ownCloud Web to be only files and media-viewer. Markdown-editor and draw-io have been removed as defaults.
https://github.com/owncloud/ocis/pull/688

View File

@@ -0,0 +1,7 @@
Change: Bring oC theme
Tags: konnectd
We've styled our konnectd login page to reflect ownCloud theme.
https://github.com/owncloud/ocis/pull/698

View File

@@ -0,0 +1,6 @@
Enhancement: Update reva to dd3a8c0f38
* fixes etag propagation in the ocis driver
https://github.com/owncloud/ocis/pull/725
https://github.com/cs3org/reva/pull/1264

View File

@@ -26,20 +26,12 @@ It uses the port range 9140-9179 to preconfigure several services.
| 9149 | authbearer debug |
| 9150 | sharing |
| 9151 | sharing debug |
| 9152 | storage root |
| 9153 | storage root debug |
| 9154 | storage home |
| 9155 | storage home debug |
| 9156 | storage home data |
| 9157 | storage home data debug |
| 9158 | storage eos |
| 9159 | storage eos debug |
| 9160 | storage eos data |
| 9161 | storage eos data debug |
| 9162 | storage oc |
| 9163 | storage oc debug |
| 9164 | storage oc data |
| 9165 | storage oc data debug |
| 9155 | storage home data |
| 9156 | storage home debug |
| 9157 | storage users |
| 9158 | storage users data |
| 9159 | storage users debug |
| 9166-9177 | reserved for s3, wnd, custom + data providers |
| 9178 | storage public link |
| 9179 | storage public link data |
| 9179 | storage public link debug |

View File

@@ -45,7 +45,7 @@ Then run the api acceptance tests with the following command:
make test-acceptance-api \
TEST_SERVER_URL=https://localhost:9200 \
TEST_OCIS=true \
OCIS_REVA_DATA_ROOT=/var/tmp/reva/ \
OCIS_REVA_DATA_ROOT=/var/tmp/ocis/owncloud/ \
SKELETON_DIR=apps/testing/data/apiSkeleton \
BEHAT_FILTER_TAGS='~@notToImplementOnOCIS&&~@toImplementOnOCIS'
```
@@ -59,13 +59,14 @@ To run a single test add `BEHAT_FEATURE=<feature file>`
### use existing tests for BDD
As a lot of scenarios are written for oC10, we can use those tests for Behaviour driven development in ocis.
Every scenario that does not work in OCIS with OC storage, is listed in `tests/acceptance/expected-failures-on-OC-storage.txt` with a link to the related issue.
Every scenario that does not work in OCIS with "owncloud" storage, is listed in `ocis/tests/acceptance/expected-failures-on-OWNCLOUD-storage.txt` with a link to the related issue.
Every scenario that does not work in OCIS with "ocis" storage, is listed in `ocis/tests/acceptance/expected-failures-on-OCIS-storage.txt` with a link to the related issue.
Those scenarios are run in the ordinary acceptance test pipeline in CI. The scenarios that fail are checked against the
expected failures. If there are any differences then the CI pipeline fails.
Similarly, scenarios that do not work in OCIS with EOS storage are listed in `tests/acceptance/expected-failures-on-EOS-storage.txt`.
Similarly, scenarios that do not work in OCIS with EOS storage are listed in `ocis/tests/acceptance/expected-failures-on-EOS-storage.txt`.
Additionally, some issues have scenarios that demonstrate the current buggy behaviour in ocis(reva).
Those scenarios are in this ocis repository in `tests/acceptance/features/apiOcisSpecific`.
Those scenarios are in this ocis repository in `ocis/tests/acceptance/features/apiOcisSpecific`.
Have a look into the [documentation](https://doc.owncloud.com/server/developer_manual/testing/acceptance-tests.html#writing-scenarios-for-bugs) to understand why we are writing those tests.
If you want to work on a specific issue
@@ -77,7 +78,7 @@ If you want to work on a specific issue
'apiTests': {
'coreBranch': 'master',
'coreCommit': 'a06b1bd5ba8e5244bfaf7fa04f441961e6fb0daa',
'numberOfParts': 2
'numberOfParts': 6
}
}
@@ -88,7 +89,7 @@ If you want to work on a specific issue
make test-acceptance-api \
TEST_SERVER_URL=https://localhost:9200 \
TEST_OCIS=true \
OCIS_REVA_DATA_ROOT=/var/tmp/reva/ \
OCIS_REVA_DATA_ROOT=/var/tmp/ocis/owncloud/ \
BEHAT_FEATURE='tests/acceptance/features/apiComments/comments.feature:123'
```
@@ -99,9 +100,3 @@ If you want to work on a specific issue
7. run each of the local tests that were demonstrating the **buggy** behavior. They should fail.
8. delete each of the local tests that were demonstrating the **buggy** behavior.
9. make a PR that has the fixed code, relevant lines removed from the expected failures file and bug demonstration tests deleted.
If the changes also affect the `ocis-reva` repository make sure the changes get ported over there.
### Notes
- in a normal case the test-code cleans up users after the test-run, but if a test-run is interrupted (e.g. by CTRL+C) users might have been left on the LDAP server. In that case rerunning the tests requires wiping the users in the ldap server, otherwise the tests will fail when trying to populate the users.
- the tests usually create users in the OU `TestUsers` with usernames specified in the feature file. If not defined in the feature file, most users have the password `123456`, defined by `regularUserPassword` in `behat.yml`, but other passwords are also used, see [`\FeatureContext::getPasswordForUser()`](https://github.com/owncloud/core/blob/master/tests/acceptance/features/bootstrap/FeatureContext.php#L386) for mapping and [`\FeatureContext::__construct`](https://github.com/owncloud/core/blob/master/tests/acceptance/features/bootstrap/FeatureContext.php#L1668) for the password definitions.

View File

@@ -17,7 +17,6 @@ import (
glauthcfg "github.com/glauth/glauth/pkg/config"
"github.com/micro/cli/v2"
"github.com/micro/go-micro/v2"
"github.com/micro/go-micro/v2/client"
"github.com/oklog/run"
openzipkin "github.com/openzipkin/zipkin-go"
@@ -192,11 +191,7 @@ func Server(cfg *config.Config) *cli.Command {
}
}
as, gs, err := getAccountsServices()
if err != nil {
return err
}
as, gs := getAccountsServices()
server, err := glauth.Server(
glauth.AccountsService(as),
glauth.GroupsService(gs),
@@ -312,19 +307,7 @@ func Server(cfg *config.Config) *cli.Command {
}
// getAccountsServices returns an ocis-accounts service
func getAccountsServices() (accounts.AccountsService, accounts.GroupsService, error) {
service := micro.NewService()
// parse command line flags
service.Init()
err := service.Client().Init(
client.ContentType("application/json"),
)
if err != nil {
return nil, nil, err
}
return accounts.NewAccountsService("com.owncloud.api.accounts", service.Client()),
accounts.NewGroupsService("com.owncloud.api.accounts", service.Client()),
nil
func getAccountsServices() (accounts.AccountsService, accounts.GroupsService) {
return accounts.NewAccountsService("com.owncloud.api.accounts", client.DefaultClient),
accounts.NewGroupsService("com.owncloud.api.accounts", client.DefaultClient)
}

5
konnectd/.env Normal file
View File

@@ -0,0 +1,5 @@
PORT=3001
HOST=127.0.0.1
BROWSER=none
INLINE_RUNTIME_CHUNK=false
EXTEND_ESLINT=true

3
konnectd/.eslintignore Normal file
View File

@@ -0,0 +1,3 @@
build/*
node_modules/*

30
konnectd/.eslintrc.json Normal file
View File

@@ -0,0 +1,30 @@
{
"plugins": ["react-intl-format"],
"extends": ["plugin:react/recommended", "plugin:jest/recommended"],
"settings": {
"react": {
"version": "detect"
}
},
"parser": "babel-eslint",
"rules": {
"react-intl-format/missing-formatted-message": [
"error",
{
"noTrailingWhitespace": false,
"ignoreLinks": false
}
],
"react-intl-format/missing-attribute": [
"error",
{
"noTrailingWhitespace": false,
"noSpreadOperator": true
}
],
"react-intl-format/missing-values": [
"error"
],
"react/display-name": "off"
}
}

View File

@@ -24,6 +24,10 @@ GENERATE ?= $(PACKAGES)
TAGS ?=
# Assets
LOGO_URL = https://raw.githubusercontent.com/owncloud/assets/main/logo.svg
FAVICON_URL = https://raw.githubusercontent.com/owncloud/assets/main/favicon.ico
ifndef OUTPUT
ifneq ($(DRONE_TAG),)
OUTPUT ?= $(subst v,,$(DRONE_TAG))
@@ -77,9 +81,15 @@ lint:
for PKG in $(PACKAGES); do go run golang.org/x/lint/golint -set_exit_status $$PKG || exit 1; done;
.PHONY: generate
generate:
generate: assets
go generate $(GENERATE)
.PHONY: assets
assets:
mkdir -p assets/identifier/static
curl -o assets/identifier/static/logo.svg ${LOGO_URL}
curl -o assets/identifier/static/favicon.ico ${FAVICON_URL}
.PHONY: changelog
changelog:
go run github.com/restic/calens >| CHANGELOG.md

View File

@@ -1,22 +0,0 @@
{
"identifier-app.js": "./static/js/identifier-app.b36b0d07.chunk.js",
"identifier-app.js.map": "./static/js/identifier-app.b36b0d07.chunk.js.map",
"identifier-container.js": "./static/js/identifier-container.569688ae.chunk.js",
"identifier-container.js.map": "./static/js/identifier-container.569688ae.chunk.js.map",
"main.css": "./static/css/main.ed0ebb7d.chunk.css",
"main.js": "./static/js/main.c5511071.chunk.js",
"main.js.map": "./static/js/main.c5511071.chunk.js.map",
"runtime~main.js": "./static/js/runtime~main.766bf48a.js",
"runtime~main.js.map": "./static/js/runtime~main.766bf48a.js.map",
"static/js/4.f92d7884.chunk.js": "./static/js/4.f92d7884.chunk.js",
"static/js/4.f92d7884.chunk.js.map": "./static/js/4.f92d7884.chunk.js.map",
"static/js/5.b1222fed.chunk.js": "./static/js/5.b1222fed.chunk.js",
"static/js/5.b1222fed.chunk.js.map": "./static/js/5.b1222fed.chunk.js.map",
"index.html": "./index.html",
"precache-manifest.ea8b619599c55ba5f128f51d796152cd.js": "./precache-manifest.ea8b619599c55ba5f128f51d796152cd.js",
"service-worker.js": "./service-worker.js",
"static/css/main.ed0ebb7d.chunk.css.map": "./static/css/main.ed0ebb7d.chunk.css.map",
"static/media/kopano-logo.svg": "./static/media/kopano-logo.10e256c7.svg",
"static/media/fancy-background.css": "./static/media/loginscreen-bg.cc3ef0e4.jpg",
"static/media/index.css": "./static/media/roboto-latin-900italic.bc833e72.woff"
}

View File

@@ -1 +0,0 @@
<!DOCTYPE html><html lang="en"><head data-kopano-build="0.28.1-3-gabe57b2-dirty"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name="theme-color" content="#ffffff"><link rel="shortcut icon" href="./static/favicon.ico" type="image/x-icon"><meta property="csp-nonce" content="__CSP_NONCE__"><title>Kopano Sign in</title><link href="./static/css/main.ed0ebb7d.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="bg"><div id="bg-thumb"></div><div id="bg-enhanced"></div></div><div id="root" data-path-prefix="__PATH_PREFIX__"></div><div id="font-preloader"><span>aA</span>Bb</div><script src="./static/js/runtime~main.766bf48a.js"></script><script src="./static/js/main.c5511071.chunk.js"></script></body></html>

View File

@@ -1,142 +0,0 @@
self.__precacheManifest = [
{
"revision": "7aa085561004b3906a54",
"url": "./static/js/identifier-app.b36b0d07.chunk.js"
},
{
"revision": "086f2ac22fca8d45f2f1",
"url": "./static/js/identifier-container.569688ae.chunk.js"
},
{
"revision": "ec7a9d03e50fe60db0c9",
"url": "./static/css/main.ed0ebb7d.chunk.css"
},
{
"revision": "ec7a9d03e50fe60db0c9",
"url": "./static/js/main.c5511071.chunk.js"
},
{
"revision": "9987e5e6817f0b1d1511",
"url": "./static/js/runtime~main.766bf48a.js"
},
{
"revision": "de913ae19ba466b785d7",
"url": "./static/js/4.f92d7884.chunk.js"
},
{
"revision": "435f63f2b0ecc59d0119",
"url": "./static/js/5.b1222fed.chunk.js"
},
{
"revision": "d704bb3d579b7d5e40880c75705c8a71",
"url": "./static/media/roboto-latin-100italic.d704bb3d.woff"
},
{
"revision": "55536c8e9e9a532651e3cf374f290ea3",
"url": "./static/media/roboto-latin-300.55536c8e.woff2"
},
{
"revision": "a1471d1d6431c893582a5f6a250db3f9",
"url": "./static/media/roboto-latin-300.a1471d1d.woff"
},
{
"revision": "6232f43d15b0e7a0bf0fe82e295bdd06",
"url": "./static/media/roboto-latin-100italic.6232f43d.woff2"
},
{
"revision": "d69924b98acd849cdeba9fbff3f88ea6",
"url": "./static/media/roboto-latin-300italic.d69924b9.woff2"
},
{
"revision": "210a7c781f5a354a0e4985656ab456d9",
"url": "./static/media/roboto-latin-300italic.210a7c78.woff"
},
{
"revision": "987b84570ea69ee660455b8d5e91f5f1",
"url": "./static/media/roboto-latin-100.987b8457.woff2"
},
{
"revision": "e9dbbe8a693dd275c16d32feb101f1c1",
"url": "./static/media/roboto-latin-100.e9dbbe8a.woff"
},
{
"revision": "5d4aeb4e5f5ef754e307d7ffaef688bd",
"url": "./static/media/roboto-latin-400.5d4aeb4e.woff2"
},
{
"revision": "bafb105baeb22d965c70fe52ba6b49d9",
"url": "./static/media/roboto-latin-400.bafb105b.woff"
},
{
"revision": "d8bcbe724fd6f4ba44d0ee6a2675890f",
"url": "./static/media/roboto-latin-400italic.d8bcbe72.woff2"
},
{
"revision": "9680d5a0c32d2fd084e07bbc4c8b2923",
"url": "./static/media/roboto-latin-400italic.9680d5a0.woff"
},
{
"revision": "285467176f7fe6bb6a9c6873b3dad2cc",
"url": "./static/media/roboto-latin-500.28546717.woff2"
},
{
"revision": "de8b7431b74642e830af4d4f4b513ec9",
"url": "./static/media/roboto-latin-500.de8b7431.woff"
},
{
"revision": "510dec37fa69fba39593e01a469ee018",
"url": "./static/media/roboto-latin-500italic.510dec37.woff2"
},
{
"revision": "ffcc050b2d92d4b14a4fcb527ee0bcc8",
"url": "./static/media/roboto-latin-500italic.ffcc050b.woff"
},
{
"revision": "037d830416495def72b7881024c14b7b",
"url": "./static/media/roboto-latin-700.037d8304.woff2"
},
{
"revision": "cf6613d1adf490972c557a8e318e0868",
"url": "./static/media/roboto-latin-700.cf6613d1.woff"
},
{
"revision": "010c1aeee3c6d1cbb1d5761d80353823",
"url": "./static/media/roboto-latin-700italic.010c1aee.woff2"
},
{
"revision": "19b7a0adfdd4f808b53af7e2ce2ad4e5",
"url": "./static/media/roboto-latin-900.19b7a0ad.woff2"
},
{
"revision": "846d1890aee87fde5d8ced8eba360c3a",
"url": "./static/media/roboto-latin-700italic.846d1890.woff"
},
{
"revision": "8c2ade503b34e31430d6c98aa29a52a3",
"url": "./static/media/roboto-latin-900.8c2ade50.woff"
},
{
"revision": "7b770d6c53423deb1a8e49d3c9175184",
"url": "./static/media/roboto-latin-900italic.7b770d6c.woff2"
},
{
"revision": "bc833e725c137257c2c42a789845d82f",
"url": "./static/media/roboto-latin-900italic.bc833e72.woff"
},
{
"revision": "cc3ef0e44832d84dcdb8fce769840ecd",
"url": "./static/media/loginscreen-bg.cc3ef0e4.jpg"
},
{
"revision": "6f9a3fb01c61fa1d416601814b69f57a",
"url": "./static/media/loginscreen-bg-overlay.6f9a3fb0.svg"
},
{
"revision": "10e256c785b6ad2fe0a337b2aa9e6da6",
"url": "./static/media/kopano-logo.10e256c7.svg"
},
{
"revision": "02abc6e9f1d6def38abd7f6b448b00f0",
"url": "./index.html"
}
];

View File

File diff suppressed because one or more lines are too long

View File

File diff suppressed because one or more lines are too long

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

View File

File diff suppressed because one or more lines are too long

View File

File diff suppressed because one or more lines are too long

View File

File diff suppressed because one or more lines are too long

View File

File diff suppressed because one or more lines are too long

View File

File diff suppressed because one or more lines are too long

View File

File diff suppressed because one or more lines are too long

View File

File diff suppressed because one or more lines are too long

View File

File diff suppressed because one or more lines are too long

View File

@@ -1,2 +0,0 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[2],[function(n,o,i){n.exports=i(6)},function(n,o,i){},function(n,o,i){},function(n,o,i){},function(n,o,i){},function(n,o,i){},function(n,o,i){"use strict";i.r(o);i(1),i(2),i(3),i(4),i(5);console.info("Kopano Identifier build version: ".concat("0.28.1-3-gabe57b2-dirty")),console.info("Kopano Kpop build version: ".concat("0.24.5")),Promise.all([i.e(4),i.e(0)]).then(i.bind(null,552))}],[[0,3]]]);
//# sourceMappingURL=main.c5511071.chunk.js.map

View File

@@ -1 +0,0 @@
{"version":3,"sources":["index.js","version.js","../node_modules/kpop/es/version.js"],"names":["console","info","concat","process","Promise","all","__webpack_require__","e","then","bind"],"mappings":"gPAUAA,QAAQC,KAAR,oCAAAC,OCRcC,4BDSdH,QAAQC,KAAR,8BAAAC,OEVA,WFaAE,QAAAC,IAAA,CAAAC,EAAAC,EAAA,GAAAD,EAAAC,EAAA,KAAAC,KAAAF,EAAAG,KAAA","file":"static/js/main.c5511071.chunk.js","sourcesContent":["import 'kpop/static/css/base.css';\nimport 'kpop/static/css/scrollbar.css';\nimport 'typeface-roboto';\nimport './app.css';\nimport './fancy-background.css';\n\nimport * as kpop from 'kpop/es/version';\n\nimport * as version from './version';\n\nconsole.info(`Kopano Identifier build version: ${version.build}`); // eslint-disable-line no-console\nconsole.info(`Kopano Kpop build version: ${kpop.build}`); // eslint-disable-line no-console\n\n// NOTE(longsleep): Load async, this enables code splitting via Webpack.\nimport(/* webpackChunkName: \"identifier-app\" */ './identifier');\n","/*global process: true*/\n\nconst build = process.env.REACT_APP_KOPANO_BUILD || '0.0.0-no-proper-build';\n\nexport {\n build\n};\n","/*global process: true*/\nvar build = \"0.24.5\" || '0.0.0-no-proper-build';\nexport { build };"],"sourceRoot":""}

View File

@@ -1,2 +0,0 @@
!function(e){function r(r){for(var n,u,a=r[0],c=r[1],f=r[2],p=0,s=[];p<a.length;p++)u=a[p],o[u]&&s.push(o[u][0]),o[u]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(l&&l(r);s.length;)s.shift()();return i.push.apply(i,f||[]),t()}function t(){for(var e,r=0;r<i.length;r++){for(var t=i[r],n=!0,a=1;a<t.length;a++){var c=t[a];0!==o[c]&&(n=!1)}n&&(i.splice(r--,1),e=u(u.s=t[0]))}return e}var n={},o={3:0},i=[];function u(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,u),t.l=!0,t.exports}u.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise(function(r,n){t=o[e]=[r,n]});r.push(t[2]=n);var i,a=document.createElement("script");a.charset="utf-8",a.timeout=120,u.nc&&a.setAttribute("nonce",u.nc),a.src=function(e){return u.p+"static/js/"+({0:"identifier-app",1:"identifier-container"}[e]||e)+"."+{0:"b36b0d07",1:"569688ae",4:"f92d7884",5:"b1222fed"}[e]+".chunk.js"}(e),i=function(r){a.onerror=a.onload=null,clearTimeout(c);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),i=r&&r.target&&r.target.src,u=new Error("Loading chunk "+e+" failed.\n("+n+": "+i+")");u.type=n,u.request=i,t[1](u)}o[e]=void 0}};var c=setTimeout(function(){i({type:"timeout",target:a})},12e4);a.onerror=a.onload=i,document.head.appendChild(a)}return Promise.all(r)},u.m=e,u.c=n,u.d=function(e,r,t){u.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},u.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},u.t=function(e,r){if(1&r&&(e=u(e)),8&r)return e;if(4&r&&"object"===typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(u.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)u.d(t,n,function(r){return e[r]}.bind(null,n));return t},u.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return u.d(r,"a",r),r},u.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},u.p="./",u.oe=function(e){throw console.error(e),e};var a=window.webpackJsonp=window.webpackJsonp||[],c=a.push.bind(a);a.push=r,a=a.slice();for(var f=0;f<a.length;f++)r(a[f]);var l=c;t()}([]);
//# sourceMappingURL=runtime~main.766bf48a.js.map

View File

File diff suppressed because one or more lines are too long

View File

@@ -1,75 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1432.3 334.7" style="enable-background:new 0 0 1432.3 334.7;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;}
.st1{fill:#414042;}
.st2{fill:#00B3F0;}
</style>
<g id="Layer_1">
<g>
<g>
<path class="st1" d="M512.2,333.7h-37V145.5c0-14.7,2.8-28.9,8.3-42.3c5.5-13.4,13.5-25.5,24-35.9c10.2-10.2,22.1-18.2,35.5-23.8
c13.4-5.6,27.6-8.5,42.4-8.5c14.7,0,29,2.9,42.4,8.5c13.4,5.6,25.3,13.6,35.5,23.8c10.4,10.4,18.5,22.5,24,35.9
c5.5,13.4,8.3,27.6,8.3,42.3c0,14.4-2.8,28.6-8.3,41.9c-5.5,13.4-13.6,25.5-24,35.9c-10.2,10.2-22.1,18.2-35.5,23.8
c-13.4,5.6-27.6,8.5-42.4,8.5c-14.7,0-29-2.9-42.4-8.5c-11.4-4.8-21.7-11.3-30.7-19.3V333.7z M585.3,72c-10,0-19.6,1.9-28.4,5.7
c-8.9,3.8-16.7,9.1-23.3,15.7c-6.6,6.6-11.9,14.5-15.7,23.4c-3.8,9-5.8,18.6-5.8,28.6s1.9,19.6,5.7,28.4
c3.8,8.9,9.1,16.7,15.7,23.3c6.6,6.6,14.4,11.9,23.3,15.7c8.8,3.8,18.4,5.7,28.4,5.7c10,0,19.6-1.9,28.4-5.7
c8.9-3.8,16.7-9.1,23.3-15.7c6.6-6.6,11.8-14.4,15.7-23.3c3.8-8.8,5.7-18.4,5.7-28.4c0-10-1.9-19.7-5.8-28.6
c-3.8-9-9.1-16.9-15.7-23.4c-6.6-6.6-14.4-11.8-23.3-15.7C604.9,74,595.3,72,585.3,72z"/>
</g>
</g>
<g>
<g>
<path class="st1" d="M832.7,255.6c-14.7,0-29-2.9-42.4-8.5c-13.4-5.6-25.3-13.6-35.5-23.8c-10.4-10.4-18.5-22.5-24-35.9
c-5.5-13.4-8.3-27.5-8.3-41.9c0-14.7,2.8-28.9,8.3-42.3c5.5-13.4,13.6-25.5,24-35.9c10.2-10.2,22.1-18.2,35.5-23.8
c13.4-5.6,27.6-8.5,42.4-8.5c14.7,0,29,2.9,42.4,8.5c13.4,5.6,25.3,13.6,35.5,23.8c10.4,10.4,18.5,22.5,24,35.9
c5.5,13.4,8.3,27.6,8.3,42.3v101.2h-37v-20c-2.8,2.9-5.8,5.6-8.8,7.9c-6.5,5-13.4,9.1-20.5,12.2c-7.1,3.1-14.5,5.3-22.1,6.7
C846.9,254.9,839.7,255.6,832.7,255.6z M832.7,72c-10,0-19.6,1.9-28.4,5.7c-8.9,3.8-16.7,9.1-23.3,15.7
c-6.6,6.6-11.8,14.4-15.7,23.4c-3.8,9-5.8,18.6-5.8,28.6c0,10,1.9,19.6,5.7,28.4c3.8,8.9,9.1,16.7,15.7,23.3
c6.6,6.6,14.4,11.9,23.3,15.7c8.8,3.8,18.4,5.7,28.4,5.7c10,0,19.6-1.9,28.4-5.7c8.9-3.8,16.7-9.1,23.3-15.7
c6.6-6.6,11.9-14.4,15.7-23.3c3.8-8.8,5.7-18.4,5.7-28.4c0-10-1.9-19.7-5.8-28.6c-3.8-9-9.1-16.9-15.7-23.4
c-6.6-6.6-14.4-11.8-23.3-15.7C852.3,74,842.8,72,832.7,72z"/>
</g>
</g>
<g>
<g>
<path class="st1" d="M1321.4,255.7c-14.7,0-28.9-2.9-42.2-8.5c-13.2-5.6-25.2-13.6-35.6-23.7c-10.2-10.5-18.2-22.6-23.8-35.9
c-5.6-13.4-8.5-27.5-8.5-42c0-14.7,2.8-29,8.5-42.4c5.6-13.4,13.6-25.4,23.7-35.8c10.5-10.2,22.5-18.2,35.7-23.8
c13.3-5.6,27.5-8.5,42.2-8.5c14.7,0,29,2.9,42.4,8.5c13.3,5.6,25.4,13.6,35.8,23.7c10.2,10.5,18.2,22.6,23.8,35.9
c5.6,13.4,8.5,27.6,8.5,42.4c0,14.5-2.8,28.6-8.5,42c-5.6,13.4-13.6,25.4-23.7,35.8c-10.5,10.2-22.6,18.2-35.9,23.8
C1350.4,252.8,1336.1,255.7,1321.4,255.7z M1321.4,72.1c-10,0-19.6,1.9-28.4,5.7c-8.9,3.8-16.7,9.1-23.3,15.7
c-6.6,6.6-11.9,14.5-15.7,23.4c-3.8,8.9-5.8,18.6-5.8,28.6c0,10,1.9,19.6,5.7,28.4c3.8,8.9,9.1,16.7,15.7,23.3
c6.6,6.6,14.4,11.9,23.3,15.7c8.8,3.8,18.4,5.7,28.4,5.7c10,0,19.6-1.9,28.4-5.7c8.9-3.8,16.8-9.1,23.5-15.7
c6.7-6.6,12-14.4,15.8-23.2c3.8-8.8,5.8-18.4,5.8-28.4c0-10-1.9-19.7-5.8-28.6c-3.8-9-9.2-16.8-15.8-23.4
c-6.7-6.6-14.6-11.9-23.5-15.7C1341,74,1331.5,72.1,1321.4,72.1z"/>
</g>
</g>
<g>
<g>
<path class="st1" d="M37,290.9H0V0h37V290.9z"/>
</g>
</g>
<g>
<g>
<path class="st1" d="M192.4,291.2L70.7,169.4c-6.4-6.4-9.9-14.8-9.9-23.9c0-9,3.5-17.5,9.9-23.9L192.4,0l26.2,26.2L106.1,138.7
c-1.8,1.8-2.8,4.3-2.8,6.9c0,2.6,1,5,2.8,6.9L218.6,265L192.4,291.2z"/>
</g>
</g>
<path class="st2" d="M334,145.6c0-2.6-1-5-2.8-6.9l-3.5-3.5c0,0,0,0,0,0l-70-70l-2.3,2.4c-10.1,10.4-18,22.4-23.6,35.6
c-5.6,13.4-8.5,27.6-8.5,42.4c0,14.5,2.9,28.6,8.5,42c5.6,13.3,13.6,25.4,23.8,35.8l2.3,2.4l69.8-69.8l0,0l3.5-3.5
C333,150.6,334,148.2,334,145.6z"/>
<path class="st1" d="M435.4,103.2L435.4,103.2c-5.6-13.4-13.6-25.4-23.8-35.9c-10.4-10.2-22.5-18.1-35.8-23.7
c-13.4-5.6-27.6-8.5-42.4-8.5c-14.7,0-28.9,2.9-42.2,8.5c-0.7,0.3-1.3,0.6-2,0.9l29.2,29.2c4.9-1,9.9-1.6,15-1.6
c10,0,19.6,1.9,28.4,5.7c8.9,3.8,16.8,9.1,23.5,15.7c6.7,6.6,12,14.4,15.8,23.4c3.8,9,5.8,18.6,5.8,28.6c0,10-1.9,19.6-5.8,28.4
c-3.8,8.9-9.2,16.7-15.8,23.2c-6.7,6.6-14.6,11.9-23.5,15.7c-8.8,3.8-18.4,5.7-28.4,5.7c-5,0-9.9-0.5-14.7-1.5l-29.2,29.2
c0.6,0.3,1.1,0.5,1.7,0.8c13.3,5.6,27.5,8.5,42.2,8.5c14.7,0,29-2.9,42.4-8.5c13.4-5.6,25.4-13.6,35.9-23.8
c10.1-10.4,18.1-22.5,23.7-35.8c5.6-13.4,8.5-27.5,8.5-42C443.9,130.9,441,116.6,435.4,103.2z"/>
<path class="st1" d="M1082,35c-55.4,0-100.3,44.9-100.3,100.3h-0.1v44.2v68h37h0.1V135.3c0-35,28.3-63.3,63.3-63.3
c35,0,63.3,28.3,63.3,63.3h-0.1v112.2h37c0,0,0.1-111.6,0.1-112.2C1182.3,79.9,1137.4,35,1082,35z"/>
<rect id="_x3C_Slice_x3E_" x="-0.7" y="-0.3" class="st0" width="1433" height="335"/>
</g>
<g id="Layer_2">
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.9 KiB

View File

@@ -1,95 +0,0 @@
<svg enable-background="new 0 0 7680 4320" version="1.1" viewBox="0 0 7680 4320" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<style type="text/css">
.st0{fill:#00B3F0;}
</style>
<path class="st0" d="m2294.4 2255.6c12.4-21.7 7.4-36.7-11.4-54.5-33.2-31.4-45-74.5-52.3-118.8-0.6-5-1.3-10-1.9-15 0-9.1-0.2-18.3-0.3-27.5l2.3-15c5-33.7 14.4-65.9 35.8-93.3 18.1-23.3 43.2-40.1 71.6-48.1 5.7-1.7 13.7 0 16-8.4h47.1c26 7.8 52.6 13.7 76 28.4 120.8 75.7 124.5 218.4 7.8 301-19.6 13.9-19.6 13.9-3.9 30.7 3.9 4.3 7.6 9 11.8 13 20.3 18.8 37.5 37.9 69.4 43.4 53.1 9.2 104.4 28.3 156.6 43.2 13.3 3.7 24.7 12.5 31.7 24.4 49.4 76.9 83.6 161.1 119.4 244.6 5.4 12.5-1 18.5-9.7 23.9-6.4 3.9-9.6 6.8-5.5 15.1 15 30.1 22.4 62.8 27.7 95.7 1.2 7.8 2.6 11.6 12.5 12.7 33.2 3.6 54.6 31.8 50.5 64.8-4.5 35.8-20.1 64.7-53.4 81.8-10.9 6.4-24.3 7.2-35.9 2.2-3.6-1.7-7.1-3.9-6.6-8.7s4.8-5.3 8.7-6c45.6-7.3 77.3-56.4 64.3-99.5-1.9-6.4-27.7-20.2-33-17.3-6.3 3.5-3.7 9.1-1.6 13.7 5.6 11.9 8.2 25 7.4 38.1-0.3 6.5-2 12.3-9.7 12.1-7.6-0.2-9.7-6.2-9.3-12.6 3.3-55.4-19.6-105.4-31.9-157.7-3.1-13.7-7.8-19.6-21.7-7.8-16.6 14.8-36.5 25.4-58 30.8 57.6 86.9 71.3 207 28.5 255-5.1-14.1-3.1-27.5-1.6-40.8 4.5-41.9 5.3-83.6-6-124.6-3.2-12-7.4-23.7-12.6-35-16.7-35.5-26.4-41.6-65.7-37.1-209.3 23.9-419.2 15.3-629 12.8-49.2-0.5-98.4-2-146.5 10.9-13.3 3.4-26.2 8-38.6 13.8-44.6 21.2-57.7 46.9-52.5 96 4.5 41 14.7 81.1 30.4 119.2 2.4 5.9 8.6 14.4-1.3 18.6-8.5 3.6-12.7-4.7-16.4-10.7-16.6-27.2-24.1-57.7-31-88.3-3.7-33.6-11.8-67.2 0-100.7 27.5-48.3 73.5-65.5 124.1-74.5 17.8-3.2 36.1-3.5 54.3-5.2 2.6 0.3 4.8 0 4.7-3.4-0.6-10.4-1.3-20.8-2-31.4l-0.8-8.6-2.1-46.2 0.9-51c3-18.1 4-36.6 3-54.9l0.5-7.8c9.2-13.6 10.9-29.9 15.7-45 2.5-7.8-0.4-6 3.5-13.8 3.3-5.7 7.2-10.9 11.8-15.7 55.9-30.6 90.7-52.8 146.7-83.1 23.5-12.7 47.1-24.8 73.1-31.9 3.9 2.4 10-1.1 13.9 3.9-6 5.1-12.4 9.8-19 14-63.8 34.3-125.2 73.2-190.5 104.9-4.8 2.3-9.7 4.3-11.8 9.8-10.2 28.2-22.1 56-25.2 86.3-5.3 50.8-3.7 101.8-4.8 152.7-0.5 24.1 0.7 25 25 24.5 39.9-0.9 79.7-2.1 119.5-2.2 157.4-0.5 314.9 3.9 472.1-7.5 64.1-4.6 125.2-18 180.5-52.3 32-19.9 32.1-20.8 16.8-55.2-32-72.2-59.8-146.4-102.4-213.5-6-10.1-15.8-17.5-27.2-20.5-43.2-12.4-86.3-25.5-129.5-38.6-15.5-4.8-32.2-4-47.1 2.4-72.5 27.5-145.7 35.8-218.1-0.9-8.1-3.9-21-0.5-23.8-13.7 9.4-12 4.8-27.3 10-40.1zm169.5-37.8c-44.9 19.6-90.2 35.3-139.3 14.4-6.5-2.7-9.3 0.4-9.7 7.3-1.2 18.3-7.8 35.3-14.4 50.5 71.4 32.8 142.9 28.9 218.3 4.2-19.6-14.7-35.6-28.6-48.1-46.1-5.3-7.3-12.1-14.3-6.9-24.6 2.1-0.6 4.9-0.9 3.9-3.9 0.1-0.9-2.3-1.2-3.8-1.8zm-212.6-167.5c-0.5 29.3 4.9 58.3 15.7 85.5 23.9 62.2 73.5 95.7 128.5 86.3 37-6.1 71.5-22.4 99.7-47.1 76.1-66.2 72.7-176.6-7-238.3-29-3-47.7-27.5-74.8-35.3-64.1-18.4-123.7 9.9-148.3 71.9-9.8 24.4-14.6 50.7-13.8 77z"/>
<path class="st0" d="m2005.1 2490.1-0.4 7.8"/>
<path class="st0" d="m5923.4 3168.7c0.5 2.6 1.1 5.3 1.6 7.8-2.1 20.9-2 41.9 0.4 62.8-3.9 39.7-1.6 79.6-2.7 119.4-0.4 16.9 12.4 10.2 19.6 9.2 42.6-5.9 85.3-12.6 127.8-19.4 194.7-31.4 388.9-65.5 581.2-109.4 148.4-33.9 296.2-70.2 439.8-121.6 39.2-14.1 78.2-29.7 114.4-51 12-6.8 23.1-14.9 33.2-24.2 25.4-24.3 26.2-45.4 1.8-71-34.3-35.9-78.5-56.4-123.2-74.5-110.6-45-226.4-71.9-342.6-97.5-33.1-7.3-66.3-13.9-99.4-21.2-6-1.3-13.2-0.7-18.4-7.5 10.9-5.7 21 0 30.4 2 130.6 26.7 261.4 52.9 387.8 96.3 58.9 20.2 116.4 43.2 164.3 85.1 41.2 36.1 41.6 71.4-1.1 106.2-31.8 25.9-68.9 42.7-106.5 57.8-153 60.9-312.2 100.1-472.1 136.7-237.6 54.3-477.7 95.4-718.8 130.2-14.5 2.1-19.6 7.8-19.2 22.7 0.7 24.2-0.9 48.4-1.5 72.5 0.3 12.4-2.4 24.8-7.8 36-3.9 7.8-6.6 17.2-1.2 26.1 2.7 4.4 7.8 9.3 2 13.6-4.8 3.7-9.9-1.3-14.3-3.6-31.4-16.3-62.6-32.8-93.7-49.4-40.9-21.9-82.1-43.4-122.4-66.3-13.5-8-29.4-10.9-44.9-8.2-26.4 4.1-52.9 8.2-79.5 11-11 1.1-14.6 5.2-14.4 15.7 0.5 22.9 0.3 45.8 0.2 68.7 0 16.3-0.3 32.2-7.3 47.9-3.9 9.4-6.7 21.3 2 31.4 2.7 3.2 5.6 8.4 0.6 12-3.7 2.7-7.5-0.5-10.7-2.6-24.7-16-49.4-32-73.9-48.3-41.9-27.8-83.9-55.6-125.6-83.8-7.9-5.7-17.8-8.1-27.5-6.5-134.1 17.1-268.2 34.4-402.4 50.4-121.3 14.5-242.7 27.8-364.1 41-88.3 9.6-176.6 18.3-265.1 26.9-10.6 1-13.5 3.4-10.1 14.1 10.4 33 20.4 66.2 29.7 99.5 5.7 20.7 25.5 16.6 38.8 23.1 18.2 9 40.5 6.7 60.5 20.5-31.9 0-60.4-9.5-90.9-11.5 5.2 18.8 11.8 35.3 13.6 54.4-18.5-11.3-20.7-29.9-26.4-46.2-2.3-8.9-10-15.4-19.1-16.3-150.3-27.9-299.4-61.2-449-92.4-13.4-3.1-27.3-2.7-40.5 1.1-20.4 5.7-41.2 10.3-62.1 13.9 32.8-13.7 64.3-30.3 98.1-42.4 59.6-21.5 117.7-46.5 176.8-70 64.9-25.9 128.5-55.4 194.8-77.7 8.6-3.2 17.4-5.7 26.4-7.4 9.1-1.4 20.2-2 8.5 12.2-4.9 5.9 0 11.2 1.6 16.5 8.3 25.5 17.6 50.7 25.1 76.4 3.2 11.1 8.3 14.6 19.3 13.4 70.2-7.3 140.4-13.9 210.6-21.3 101.3-10.8 202.6-22 303.9-33.5 114.8-13.2 229.6-27 344.4-40.8 48-5.8 95.9-11.8 143.9-18 6.3-0.8 13.2 0.4 20-6.4-27.5-19-54.5-38.3-82.4-56.1-10-6.4-14.3-12.8-14.6-24.8-3.5-163.4 1.2-326.9-5.3-490.5-1-24.3 0.6-25.3 23.8-17.8 63.4 20.6 126.1 43.2 189.2 64.9 21.9 7.5 32.8 20.4 42.8 37.7 33.4 57.8 62.5 117.7 90.6 178.2 9.3 20 7.4 40.8 7.8 61.3 2 66.7 2.9 133.4 3.5 200.1 0 13.2 1.9 18.7 17.3 15.4 21.6-4.5 43.9-6.1 67.8-13.7-17.1-9.5-33.8-20-51.6-28.1-11.5-5.2-14.4-11.8-14.6-24.1-3.1-159.5 1.1-319.1-6.1-478.5-0.7-15.3 3.6-20.3 19.1-15.7 68.1 21 135.4 44.7 203.5 65.3 30.6 9.3 44.6 28.3 58.1 51.9 32.4 56.7 63.4 114.3 88.4 174.7-13.1-0.6-16.2-12.2-20.9-20.7-28.8-52.4-56.7-105.3-85.4-157.7-3.9-6.8-4.4-16.8-14.8-18.5 0-2.8-0.9-3.2-3.1-1.6l2.9 1.7c6.8 46.9 2.9 93.7-2.7 140.2-1.3 11.1 0.5 16.3 11.4 20.2 25.2 8.9 50.1 18.6 74.5 29.1 13.4 5.6 28.2 8.8 36.1 22.5zm-496.2-198.2c-0.5-3.9-2.4-9.5-5.3-8.6-5.7 1.6-1.6 6.9-1.2 10.7-1.7 46.1 2.9 92.6-4.6 138.5-1.5 9.5 5.6 10.4 11.3 12.9 26.2 11.8 52.4 23.5 78.5 34.7 7.8 3.4 13.9 12.1 26.1 8.4-23-38.7-42.5-78.5-62.4-117.7-13.3-26.7-25.1-54.3-42.4-78.9zm89 601.4c0.8-2.1 1.4-4.4 1.8-6.6-2.4-120.1 6.6-240.2 4.4-360.3 0-11.1-4.3-15.7-14-20-30-12.9-59.4-27.1-89.1-40.6-14.7-6.7-22.9-18.8-22.6-33.9 0.9-49.6 2.6-99.2 5.8-148.7 0.6-9.4 0-11.5-8.6-14.4-56.8-19.6-113.4-39.8-169.9-60-20.8-7.5-20.5-7.8-20.4 14.4 0.7 150.2 3.9 300.5 0.7 450.7-0.3 13.1 3.9 19.6 14.6 26.4 60.2 37.9 120.1 76.2 179.7 115 39.4 25.3 78 51.5 117.6 78zm60.2-451.8h0.5c0 73.8 0.3 147.7-0.3 221.6 0 10.8 3.3 16.3 12.8 21.1 97.4 49.2 194.7 98.6 289.6 152.4 11.2 6.3 15.4 6.6 15.7-8.4 0.4-51.4 1.7-102.6 6.8-154 5.3-53.2 3.5-107 5.4-160.6 0.4-10.4-3.4-14.7-12.8-18.3-30-11.3-59.4-23.8-89.2-35.7-14.9-5.9-24.5-16.7-23.9-32.5 2-47.6 4.8-95.3 9-142.7 0.8-8.6 0.6-10.4-7.3-12.9-62.8-20.3-125.6-40.8-187.9-62.2-13.9-4.7-18.8-5.1-18.6 12.6 1 73.2 0.4 146.4 0.4 219.6h-0.2zm-1747.2 502c30.2 5.7 55.2 9.9 80.2 15.1 114.4 23.9 228.7 47.9 343.1 72.1 11.8 2.5 22.8 5.9 16.6-14.2-21.1-68.7-41.6-137.5-61.6-206.5-3.6-12.6-7.8-14.8-20-9.4-45.4 20.1-91.3 39.2-137.1 58.4-71.1 30-142.9 57.4-221.2 84.5zm1588-667c-1-0.3-2.2-1.1-3-0.9-1.8 0.6-1.6 1.7 0 2.5 0.5 0.2 1.5 0.8 1.6 0.7 0.6-0.8 1.1-1.6 1.5-2.5v0.2z"/>
<path class="st0" d="m6045.9 2501.3c8.9-7.5 12.8-15.9 10.2-27.8-1.5-7.7-1.3-15.7 0.6-23.3 1.9-8.7 9.7-12.8 15.9-5.7 16.9 19.2 15.7-3.5 17.6-8.5 2.8-8.2 0.5-18.1 1.6-27.2 0.8-6.2 5.6-16.8 11.4-8.4 11.5 16.8 13.3 1.3 17.7-3.5 7.4-7.8 4.4-18.6 5.5-28.2 0.7-6.5 2-15.3 11.1-10.7 6 3.1 9 6.4 13.1-1.2 5.3-10-3.6-13.9-7.8-19.6-3.9-5.1-8.8-5.1-13.2-0.2s-9.6 10.7-14 16.4c-17.5 22.8-34.6 45.9-52.5 68.5-4.8 6-9 18.9-18.1 13.4-11.3-6.9-1-16.2 3.9-23.2 19.3-28.7 39.2-56.9 61.2-84 3.9-4.7 0.8 0.9 4.7-6.9 2.1-4.2 4.8-8.2 7.8-11.8 2.4-2.8 5-5.5 7.8-7.8 3.5-3.2-0.8 0 3.9-3 33.7-21 49.6-59.9 40.6-100.8-8.6-39.2-45.7-51.7-76.6-25.9-52.3 43.5-106.4 84.5-162.4 123.2-4.8 3.4-9.8 6.6-14.9 9.5-3.9 2.1-8.4 6-12.3 1.5-4.6-5.3 0-9.8 3.5-13.5 4.3-4.9 9.2-9.3 14.5-13.1 54.3-36.4 102.6-81.2 158.9-114.7 7.8-4.7 10.9-8.9 3-16-0.9-0.9-1.7-2-2.6-2.9-20.7-21.7-28.5-60.5-54.1-69-29.5-9.7-51.5-29-78.5-41-6.8-3-20.4-7-15.7-15.7s15.1 0.5 22.2 3.9c23.9 11.8 46.3 26.3 67 43.2 6.9-5.6-3.7-16.9 6.4-18.6 7.8-1.3 11 7.8 14.9 13.8 14 20.7 27.7 41.6 44.1 66.3 7.8-26.8-2.8-46.1-6.9-65.6-1.2-6-14.5 0-21.1-7.8-11.8-14-26-25.8-38.6-39-14.9-15.7-12.6-32.8 6.1-44.1s39.2-12.9 62-13.2c-6.4-10.5-18.4-12.2-23.5-21.3-2.6-4.6-6.5-3.1-10-0.6-24.6 17.4-52.8 24.6-83.7 27.1 3.1 9.7 11.1 12.6 15.9 18.2 3.1 3.7 8.8 6.4 3.9 13-4.1 5.7-9 4.8-13.9 2.7-16.1-7.1-31.4-16.1-48.6-20.8-2.3-1.1-4.2-3-5.2-5.4-4.4-8.9 2.6-44.3 9.8-51.3 28.6-27.5 96.5-33.8 125.9-7.8 21 18.8 44.3 35 63.4 55.9 8.6 9.4 15.7 14 27.5 4.2 10.9-9.1 20.4-5.7 26.6 7.3 5.4 11.3 11.3 22.3 26 23.9 4.2 0.1 7.6 3.6 7.6 7.8 0 6.1-5.5 6.5-9.9 7.3-7.8 1.5-15.7 2.5-23.1 4.2-33.5 7.1-55.2 26.6-59.9 61.3-1.8 13.3-14.2 25.9-2.9 41 3.9 5.3-3.4 7.8-7.8 7-5.6-1.3-11-3.1-16.2-5.5 0 21.6 2.2 23.3 22.2 17.9 37-10 65.4 5.8 74.5 43.2s9.7 72.5-22.8 100.5c-4.9 4.2-8.3 10.2-13 14.6-14.4 13.4-7.6 21.7 5.9 29.3 4.7-4.9 2.4-10.4 2.9-15.2s0.7-10.9 6-13.7c6.2-3.3 8.5 2.2 12.5 5.6 15.7 13.5 16.4 13.4 3.5 32.8-5.3 8.1-6.6 14 0.4 22.4 86.1 103.8 159.6 216.9 237.8 326.4 15.2 22 32.3 42.8 51 62 11.8 11.8 21.1 10.6 29.8-3.6 18.7-30.8 31.8-64.4 48-96.5 10-19.9 20.6-39.4 29.9-59.6 5.1-10.9 12.4-13.3 23.5-12.1 7.8 0.9 11.3 2.1 6.5 10.3-30.9 53.2-54.9 109.9-83.9 164.1-8.4 15.7-19.9 28.5-43.2 31 12.2 7.5 21.1 5.7 29.8 3.6 18.4-4.3 36.8-9 55.2-13.7 11.8-3 24.1-3.9 26.8-20.5 1.2-7 11.3-11.8 17.5-9.3 9.1 3.5 15.9 11.4 17.9 21 1.2 7.8-5.6 11.1-12.1 13.3-35.8 12.3-71.4 25.3-109.2 31.1-9.9 1.5-21.5 3.3-28.8-2.2-16.7-12.6-31.7-5.5-47.6-0.6-19 5.8-38.3 9.7-57.6 1.9-16.2-6.5-20.9-19.6-14.4-37 6.7-18.1 20.7-25.9 36.6-20.5 4.4 1.5 9.5 3.1 8.9 8.7-0.4 4.6-5.1 5.7-9.1 5.8-11.3 0-18.1 5.9-16.4 16.9 1.6 11 12.2 7.8 19.3 7.8 17.3 0.4 33.4-5.2 49.5-10.8 8.4-2.9 12.3-6.7 4.9-15.3-87.1-102.3-153-220-234.7-326.1-15.2-19.6-30.4-39.2-44.7-59.6-7.6-10.8-12.1-10.5-19.6 0.3-31.4 45.9-63.1 91.5-95.3 136.8-6.9 9.8-13.9 26-27 21.2-9.5-3.5-12.9-19.8-13-32 0-10.3-7.5-26.6 5.5-29.7 15.7-3.7 5.5 17.6 16.3 23.5zm107.3-491.6c-16.9-8.1-31.7-20-43.2-34.8-3.9-5-7-8.5-14.4-5.6-15.7 6.2-31.9 11.3-47.8 17.1-11.4 4.2-13.3 10.9-5.1 20.6 12.2 14.4 25.7 27.7 35.3 44.1 1.6 1.9 3.5 3.5 5.5 4.8 13.2-17.4 15.7 4.6 25.2 7.8 6.1-24.2 21.6-40.3 44.3-54h0.2zm-173.2-62.7c24.2-0.9 47.8-8.2 68.3-21.1 3.1-2 7.8-3.7 6.8-8.4s-5.4-5.3-9.1-5.6c-24.1-2.3-48.3-4.2-71.4 4.8-11.2 4.3-29.5 7.8-27.2 20.4s20.7 8.1 32.5 9.8h0.1z"/>
<path class="st0" d="m6698.2 2409.1c22.4-31.4 42.9-61.6 65.3-90.2 9.7-12.3 12.9-28.9 27-38.1 2.9-1.4 4.1-4.8 2.7-7.6-0.8-1.6-2.2-2.7-3.9-3.1-12-4.9-23.9-14.2-36.5-12.4s-17.1-3.6-22.8-12.5c-17.2-27-24.1-58.6-40.3-86-6.6-11-9.6-23.9-20.8-32.2-7.2-5.4-10.4-15.7 0.6-18 25.3-5.8 30.6-28.2 41.9-45.6 8.9-13.8 10.8-30.5 17.8-45.4 8.7-19 22.8-35.1 40.5-46.1 12.2-7.8 26.2-14.5 26.8-32.6 0.1-5.6 4.8-10 10.4-9.9 5.8 0.3 6.8 5.3 7.3 10-0.1 5.5 4.2 10.1 9.7 10.4 36.4 5.2 71.8 17.7 109.9 7.8 15.1-3.9 31.9-1.9 47.8-5.6 6.1-1.4 16.3 0.9 20 5.5 16.3 19.8 36.1 11.5 55.2 8.9 25.4-3.5 32.5 3.9 27.8 28.9-3.2 15.4-8.6 30.2-16.2 43.9-13.6 25-16.6 54.3-8.4 81.6 4.2 15.1 7 30.5 8.4 46.1 2.2 22.6 7 43 22.6 61 12 13.9 6 31.1-11.1 40.6-8.8 4.3-18.5 6.8-28.3 7.3-29.2 3-54.3 15-77.5 32.8-11.8 9-27.5 2.7-41.2 3.3-34.6 2-69.3-3-102-14.6-12.3-4.6-20.6-1.6-28.2 9.5-19.9 29.1-41.9 56.8-60.9 86.3-10.7 16.3-22.2 22.8-43.6 16zm75.3-182c7-0.6 13.1-5.2 15.7-11.8 1.2-0.3 3.9 0.4 1.3-2.2-0.3 0.8-0.6 1.6-1 2.5-9.9-2.5-13.3 3.9-16 11.5l-3.2 0.7c0.5 0.7 0.9 1.4 1.4 2.1l1.8-2.8zm240.6 16.6c5.4-1.7 11.3-4.2 11.5-10.2 0.1-5.9-5.6-1.4-8.5-2.4 0.9-12.3 10.8-15.7 19.6-19.9 2.4 8.6-11.3 10.3-8.8 19.9 11 1 16.5-13.1 29.4-9.5-18.3 19.9-41.9 31.4-60.4 49.2 5.5 3.9 9.1 1.2 12.8 1.1 18.7-0.6 29.1-18.9 46.7-21.4 0 4.6-7.2 5.5-5.8 11.3 7.8 1.4 11.5-3.9 14.6-9.7l3.9-3.9c13.4-4.6 18-11.2 6.2-23.1-4.6-4.5-8.2-9.8-10.6-15.7-3.9-9.6-9.8-8.1-16.8-5.3-0.6-5.3-3.1-7.8-8.8-7.3-10.3 1.5-20.7 2.2-31.1 2.1-15.7-0.9-15.7 11.1-10.6 16.8 7.2 7.8 3.6 13.9 0.5 21.1 8.2-0.5 11.3-10 19-5.6l-6.1 10.2c-0.8 1.3-2.7 3.5-2.4 3.9 2.7 2.1 4.3 0.3 5.7-1.6zm3.9-244.4c1.2 9.9-18.7 11.8-8.7 26 7.8-8.4 18.2-13.6 22.5-26.5l-14.1 0.9c3.9-4.5 10.2-13.5 13.7-7.4 6.7 11.8 10.7 2.7 14.2 0 5.2-4.2 12.5-7.2 14-16.3l-38.8 4.6c-1.9 0.2-3.9 0.7-5.7 0.9-10.9 0.9-9.5 8.7-8.5 15.7 1.7 9.7 7.5 1.4 11.4 2.1zm-286 80.2c16.2-11.8 32.4-23.6 48.7-35.3 5.5-3.8 8.3-10.5 6.9-17.1-0.7-4.4-3.7-8.1-7.8-4.2-17.8 17.1-42.5 27.8-50.4 54.1l-1.5 4.4 4.1-1.9zm333.1-60.7c-20.6 7.4-31.7 27.5-50.3 37.6-7.8 4.2-14.2 10.6-11.8 21.7 1.2 6.1 4.4 7.8 9.2 6.9 11.3-2.4 28.1 4.3 32.5-9.9 5.9-19.2 15.3-36.9 20.8-56.1 1.8-0.2 3.1-1.8 2.9-3.6 0-0.2-0.1-0.5-0.2-0.7 0-0.4-1.1-0.6-1.6-0.9-0.5 1.7-1 3.4-1.5 5zm-215.1-41.3-2.4-2.2c-4.3-3.9-10-1.9-14.5-3.3-5.4-1.8-15.3 22.1-15.9-2.6-2.4 0.5-5.3 0.3-6.9 1.6-2.2 1.9-7.8 5-1.1 7.8 5.6 2.4 5.5 4.8 1.4 7.8-2.8 2.1-7.8 5.8-9.2 0-1.8-8.2-5-5.6-8.9-2.7-10.2 7.8-20.4 15.7-30.6 23.5l1.6 4.5c42.6-18 94.2-2.6 131.9-39.7-14.9 6.7-30.4 3.8-45.4 5.3zm89.7 125.5c-4.8-0.7-7.1-1.3-9.5-1.4-7-0.3-16 1.5-18-7.5-1.7-7.7 4.7-12.9 11.1-16.9 8.3-5.2 16.5-10.6 25-15.4 7.1-3.9 14.9-12.3 22.9-6.2 6.7 5.1 1.5 14.7 1.7 22.3 0.4 13-4.3 21-18.2 22.2-4.4 0.4-10 0.7-12.2 5.3-15.1 31.2-41.2 54.9-56.7 86-1.4 2.7-3.9 7.3 0.6 7.6 18.1 1.1 11.4 14.8 11.8 23.5 0.5 14.3-1.7 28.6-2.4 43-0.3 5.4-2.8 12.6 6.7 13.1 21.5 1.1 43.2 2.8 64.5 2.9 11.5 0 17.5-6.7 16.2-19.3-1.1-11-0.9-22.1-1.1-33.2-0.7-39.2-0.6-39.2 39.2-40.8 1.3-0.1 2.6-0.1 3.9 0 10.8 1 13.8-3.6 11.8-14-3.9-18-3.2-36.4-2.8-54.7 0.6-27.5 0.4-28.4-25.9-24.6-13.6 2-15.3-2.6-15-14.3 0.5-20.2-1.5-40.5-0.5-60.6 0.6-12.6-3.9-14.5-14.6-12.9-23.2 3.6-46.6 6.3-69.8 10-39.2 6.2-39.2 6.4-39.2 45.8-0.4 40.6-0.3 41.2-39.2 49.8-9.8 2.2-12.9 5.2-12.5 15.1 0.9 20.2 0.5 40.5 0.7 60.7 0 4.5-1.2 10.2 5.6 10.2 15.7 0 31.4 5.2 44.5-11.5 21.1-28.6 45.8-54.8 71.4-84.2zm-192.4 59.8c0.5 8.4 0.5 16.9 0 25.3-1.3 11.8 2.6 15.7 15 15.4 44.4-1.7 44.4-1.3 44.5-45.8 0-9.1-0.5-18.3 0.3-27.5 1.1-11.3-3.3-14.2-14.4-13.9-45.3 1.5-45.3 1.1-45.4 46.5zm113.8-64.7c-6.4-14.2-5.2-26-5.2-37.6 0-39.9 0-39.6-40.3-41.4-11.5-0.5-16.6 1.5-15.3 14.6 1.6 17.5 2.2 35.1 1.7 52.7 0 9.9 3.7 12.2 12.6 11.8 14.2-0.6 28.6-0.2 46.5-0.1zm23.5 122.5c1.2-4.2 5.9-9.5 0.4-12.5-4.2-2.2-9.4-0.6-11.8 3.6-13.4 18.4-27.2 36.7-39.6 55.8-3.9 6.4-6.9 15.7 8.4 12.8 9.7-1.6 19.5-2.1 29.2-1.4 10 0.4 14.1-3 13.7-13.3-0.7-15.1-0.3-30.1-0.3-45zm-111.6 20.6c12.8 5.8 25.3 16.8 35.3 14.8 16-3.4 6.8-22 10-33.7s-4.4-13-11.8-7.8c-11.7 7.7-22.1 17.3-33.5 26.7zm-60.1-133.1c29.2 0.5 73.9-36.1 71.7-56.6l-71.7 56.6zm361.8-130.6c-23.5 20.4-42.5 39.9-65 55.6-5.1 3.6-5.6 9.4-2.4 15.2 45.7-34.9 65.3-54.4 67.4-70.8zm-346.1 188.9c3.4-52.5-1.4-57.7-34.1-44.1 17.1 9.1 29.6 25.1 34.1 44.1zm151.9 129.5c29.6 1.7 59.9 13 91.9-4.7-33.1-3.7-62.4 2.8-92 4.6l0.1 0.1zm122.5-321.8c-26.6-16.6-39.9-14.5-51.6 5.7 16.5 1.6 31.8-3.6 51.5-5.7h0.1zm46.4 150.5v53.2c0 3.9-0.6 8.6 4.7 8.8 5.4 0.3 6.5-3.9 5.5-8-4-16.1 0.2-33.5-10.4-54h0.2zm-265.2-44.7-26.2 22.3c11.2-3.6 36.2 8.9 26.1-22.4l0.1 0.1zm60.5 129.8c-19.6 0-20.4 1.3-12.4 19.1 5.3-5.6 11.7-10.5 12.3-19.1h0.1zm-83.3 29.3 4.8-5.3c-1.3-0.8-3-2.6-3.9-2.2-2 1.2-3.9 2.7-5.6 4.4l4.7 3.1zm244.4 10.1c-0.9-0.5-2.1-1.5-2.4-1.3-0.8 0.7-1.4 1.6-1.6 2.7 0 0.4 1.4 1 2.1 1.5l1.9-2.9z"/>
<path class="st0" d="m3988.7 1677.5c-104.4 4.9-213.1 0.9-321.7-4.2-17.6-0.9-30.3 0.5-27.1 19.2 1.2-15.4-7.8-21.3-26.3-21.8-86.3-1.8-172.5-4.4-258.7-7.8-19.3-0.8-31.4 2.6-32.8 24.2-0.3 4.7-0.5 10.7-6.3 13.7-6.9-1.5-6.3-7.5-6.8-12.2-2-19.1-7.4-36.3-5.4-57.7 6-64.8 2-130.5 2.6-195.9 0.6-78.5 1.9-157.3 2.9-236 0-3.3 0.5-6.6 0.4-9.8-1.2-24.1-1.3-23.8 23.9-17.9 139.8 33.2 279.8 65.1 419.2 99.8 56.9 14.2 114.8 24.1 171.4 39.2 9.5 2.5 19 7.3 29.6-0.4 6.3-4.6 10.6 1.6 10.7 8.6 0.2 8.5-0.2 16.9 0 25.4 0.4 100.4 0.8 200.9 1.2 301.4-0.3 28.8-0.3 28.8 23.2 32.2zm-658-142.5h-1.9c0 31.4 0.8 62.8-0.4 94.2-0.5 15.1 3.2 19.6 19.1 20 91.4 1.8 182.8 2.8 274 9.1 11.8 0.8 14.9-3 14-14.1-4.6-56.7-5.7-113.5-4.9-170.3 0-9.5-2.7-13.9-12.8-15.2-88.7-11.8-177.3-23.5-265.9-36.1-18.4-2.7-22.3 3.5-21.7 20.5 1.2 30.5 0.5 61.2 0.5 91.9zm97.3-136.2c-1.5-15-0.5-18.5 15-29.3 6.5-4.5 6.9-6 2.6-12.9-14.9-23.8-9.7-63.7 9.3-83.8 4.3-4.5 8.4-8.6 15-6.3 17.9 6.2 33.6 15.7 41.1 33.7 7.1 17 0 32-10.4 45.4-3.8 4.5-8.1 8.4-12.8 11.8-5.3 3.9-6.7 6.5-1.1 11.8 14.1 13.9 22.7 32.5 24.3 52.2 0.8 8.1 3.6 11.4 11.5 12.4 30.4 3.9 60.9 7.6 91.2 12.2 12.9 2 17.5-1.8 16.7-15.2-2.7-52.2-2.5-104.5 0.5-156.7 0.7-12.9-3.6-17.9-16.4-20.9-84.5-19.6-168.7-40.3-253.2-60.9-35.5-8.7-34.8-9-33.9 27.5 1.3 56.2 2 112.4 2 168.7 0 14.9 2.5 22.1 19.6 22.9 26 1.3 51.8 6.4 77.6 9.7 24.7 3.2 49.4 6.1 75.5 9.3-21.7-63.4-29.6-66.5-74.4-31.6h0.3zm215.4 159.7h-1c0 26.1 1.1 52.3-0.4 78.5-1 16.6 4.5 20.4 20.5 21.1 91.4 3.7 182.7 8.3 274 13.9 13.1 0.8 13.9-4.2 13.7-14.2-0.6-47.7-1.2-95.4-0.9-143.1 0-12.2-3.5-17.6-16.1-18.7-91.7-8.3-182.9-20.7-274-33.2-15.1-2.1-16.1 3.9-15.7 15.7 0.2 26.6-0.2 53.4-0.2 80.2l0.1-0.2zm305.7-153h0.4c0-22.2-0.7-44.4 0.3-66.7 0.5-12.9-3.9-18.6-16.6-20.8-92.6-16-184.4-35.7-276.1-56.6-14.3-3.3-16.6 1.3-16.2 14.2 1.3 51.6 2.3 103.2 1.9 154.7 0 14.9 6 19.1 18.9 20.7 90.9 11.8 181.8 23.8 272.7 36 11 1.5 15.4-1.3 15-13.1-0.9-22.6-0.4-45.5-0.4-68.4h0.1zm-447-90.3c0.3-14.4-20.6-38.8-34.8-37.3-15.7 1.6-14.8 17.2-17.9 28.6-1.8 5.6-2.7 11.5-2.6 17.3 0.6 11.2-3 26.1 10.8 30.6s25.2-3.9 34.1-14.4c6.1-6.9 9.7-15.6 10.3-24.8h0.1z"/>
<path class="st0" d="m4899.7 2372.2c-12.1 15.7-3.3 25.2 8.9 35.7 29 25 56.9 51.3 87.9 76.4-18.4-37.5-32.9-74.5-3.6-113.8 8.4 8.2 2.9 14.4 1.7 20-6.1 25.2-0.4 51.8 15.7 72.2 38.7 51.6 125.1 90.2 194.3 29 10.7-9.5 15.5-18.2 13.3-33.4-5.8-42.2-12-84.1-30.6-123-10-20.9-23.1-39.2-43.5-51.6-10-6.4-22.2-8.7-33.9-6.3-18.4 3.6-20.6 10.1-8.6 24.4 16.4 19.6 16.2 40.7 5.3 62.2-10.6 20.7-26.6 33.5-51.4 32.3-13.9-0.6-26.8-7.6-35.1-18.8-14.7-18.5-13.7-47.8 1.8-71.8 12.3-19 29.2-25.4 54.3-19.6 7.1 1.6 8.8 0 13.9-6.5 12-16 26.3-31.7 48.3-35.3 52.2-8.6 103.9-19.6 155.3-32.4 2.5-0.6 5.1-1 7.8-1.6 47.4-12.4 62.8-6.8 87.9 35.5 7.8 12.9 14.9 18.6 31.4 17.9 70.2-3 70.2-2.1 124.3 43.6 4.8 3.6 8.1 8.7 9.5 14.4 4.7 26.3 9.1 52.7 13 79.1 0.9 6.2-3.1 11.4-7.5 15.4-7.8 7.1-15 15.3-24 20-38 20-43.2 51.3-33.6 89 1.3 4.8 2.6 8.2 7.5 10.1 22.8 9 39.9 27 61 38.5 15.4 8.5 13.1 20.8 13.2 33.5 0 4.9-1.6 9.5-7.3 9.9-4.1 0.4-7.8-2.6-8.2-6.8-0.1-0.7 0-1.5 0.1-2.2 2.1-17.9-10.4-23.5-23.1-29.3-18.1-8.4-30.8-25.6-51-30.7-4.9-1.2-5.8-8.6-6.5-13.6-2.6-20.7-6.3-41.4-5.6-62.4 0.2-5.8 2.1-11.4 5.7-16 6.9-9.5 15-18.1 24.2-25.5 12.5-10.4 34.7-16.4 36.3-30.6 2.7-23.3-4.6-47.7-7.8-71.6-1.2-4.5-4.2-8.3-8.3-10.5-5.3-3.9-11.8-6.8-15.7-11.8-26.5-33-63.3-27-98.7-27.2-9.8 0-8.8 5.2-6.6 11.3 10.4 27.4 17.8 55.8 21.8 84.8 9.8 76.5 18.3 153 24.7 229.8 1.1 13.3 3.9 27.5-5.4 41-11.8-11.8-10.7-27-12.2-40.3-10-89.5-17-179.5-29.4-268.7-6-43.5-31.8-80.1-61.8-112.3-5.1-6.4-13.6-9.1-21.5-6.7-60.1 22.2-122.8 33.2-185.8 42.7-1.6 0.2-2.9 1.9-6.6 4.5 74.5 36.1 88.8 105.2 99.3 175.8 7.1 50.5 9.9 101.4 8.4 152.4-0.3 14.2-1.3 28.3-14.5 45.3-1.7-18.9-3.4-32.6-3.9-46.4-1.3-26.8-1.8-53.6-2.9-80.3-0.4-11.3-4.6-12.2-12.6-4.7-66.7 62.5-147.7 34.7-195.8-10-3-2.9-9-26-18.3-2-1.6 4.2-10.8-1.2-15.7-3.9-28.8-14.8-53-35.9-76.9-57.2-72.1-64.5-140.2-133.2-209.9-200.1-4.3-4.2-12.7-9.2-7.8-15.7s11.8 0.4 16.7 3.9c12.8 9 25.1 18.8 36.6 29.5 13.7 13.4 27.3 23 46.5 11.2-4.4 36.6 19.6 60.7 51 51 4.5 3.9 5.6 10.5 2.7 15.7-1.2 2.8-3.4 7.5-2.3 8.7 11 12.4 22.8 24.1 35.3 35.1 7.7 6.4 10.9-6.6 17.7-7.3l9.5-1.1-0.4-0.3 1.5 7.5zm159.1-71.8c-18.9-0.7-31.8 16.1-32.8 42.5-0.8 21 12.5 36.6 31.8 37.2 19.9 0.5 39.2-20.6 39.8-43.4 0.4-19.2-17-35.4-38.8-36.3z"/>
<path class="st0" d="m6038.9 992.7c-79-12-152.3-23.9-225.8-34.1-89.4-12.4-179.5-17.6-269.5-22.2-162.7-8.3-325.7-8.2-488.3-3.6-228.7 6.4-457.1 18.5-682.7 58.9-202.2 36.1-399.1 89.6-588.3 169.9-19.6 8.3-39.7 14.9-57.5 26.8-5.1 3.4-12.1 10.5-16.4 4.5s4.4-10.5 9.7-14c31.1-20.5 65-35.6 99.3-49.5 167.7-68 341-116.6 518.8-149.7 168.7-31.4 338.5-49.6 509.6-59.5 201.8-11.7 403.6-17.5 605.5-10.7 139.2 4.7 278.3 12.3 415.2 39.2 55.7 10.7 112.5 19.8 170.4 44z"/>
<path class="st0" d="m2093.6 2167c-26.2-43.8-43.4-89-64.4-132.4-47.1-97.1-103.8-187.7-181.9-263.2-54.3-52.5-115.5-94.2-190.9-110.6-97.6-21.2-188.8 19.2-238.6 105.7-23.8 41.3-37.5 86.1-46.2 132.5-0.7 3.9-1 7.8-1.9 11.8-0.9 3.9-1.4 8.7-6.1 8.8-6.4 0-6.7-6.1-6.4-10.2 1-15.6 2.9-31.2 5.7-46.6 7.9-41.2 23.3-80.5 45.5-116.1 56-89.1 159.8-128.8 264.6-101.5 70.3 18.3 129.8 55.7 181.1 105.3 114.1 110.1 187.3 245.1 234.8 395.1 2 6 2.7 12.4 4.7 21.4z"/>
<path class="st0" d="m4504.1 1611.7c41.6 15.3 87.7-7.8 133.8 0.8 9.3 1.8 14.1 4.6 16.7 12.8 10.5 33.5 17.9 68.2 36.1 99 6 10.1-5.2 12.9-9.7 18.4-8.2 10.1-27.5 11.1-28.6 23.9-1.1 11.8 9.3 23.9 12.4 36.5 2 11 10.1 19.9 20.8 23 3.9 1.5 8.8 5 7.1 10.3s-7.3 5-11.8 4.4c-12.9-1.6-25.4-5.8-38.6-5.7-30.4 0.4-43.8 11.5-49 41.6-0.9 5.1 0 11.8-7.3 11.8s-7.4-6.5-8.1-11.8c-2.2-16 2.4-31 14.4-40.8 17.5-14.3 2-26.6-1.6-38-3.1-10-13.3-0.5-19.6 1.3-24.8 7.1-33.4 3.6-41.5-21-15.7-47.7-31-95.5-46.1-143.5-5.7-17.6-0.9-23.5 20.6-23zm171 123.5c-19.2-32.3-32.6-67.7-39.7-104.6-1.7-8.1-4.6-8.9-11.8-7-12.2 3.2-22 6.3-11.2 21.5 3.4 5.6 6 11.6 7.8 17.9 2 5.1 2.9 10.8-3.2 13.6s-9.9-2.1-12.3-6.7c-4.8-9.3-8.6-19-13.3-28.3-6.4-12.7-17.4-6.9-25.8-4.5-11.1 3.2-2.3 10.6-0.6 15.7 3.5 10.5 8.1 20.6 12.1 31 2.2 5.6 4.8 12.2-2.8 15-6.2 2.3-9.3-3.9-11.5-8.3-6.3-12.9-11.8-26.1-16.7-39.6-6.2-18.8-20.6-10.6-31.1-9-13.9 2-4.4 12.7-2.8 18.4 10.9 38.3 22.9 76.2 34.4 114.3 2.5 8.3 3.9 13.2 15.7 7.8 36.3-17 72.5-35.2 112.8-47.2zm-42.6 82.4c3.9-4.3 19 5.8 15-7.8-3.9-12.6-1.3-31.8-18.4-35.7-5-1.1-21.9 1.8-21.9 16.5-0.1 16 10.8 27.8 25.3 27z"/>
<path class="st0" d="m5636.5 2643.6c-13.8-41.7-13.1-81.2-15.9-120-5.6-77.5-10.5-154.9-20.2-232-1.2-9.6-5.6-9.9-12.7-9.8-15 0-30.1 0-45.1-0.4-5 0-11.8 0-12-7s5.7-7.8 11.1-8.2c3.9-0.6 7.8-0.9 11.8-0.8 30.7 2.9 57 0.2 73.6-32.7 8.9-17.5 27.8-18.8 46.1-7.1 38.6 24.5 78.5 46.4 118.8 68.3 36.3 19.8 50.4 54.7 54.9 93.7 6.5 57.8 8 116.1 4.4 174.1-0.6 10-2 20.3-12.7 30-3.9-15.8-5.8-32.1-5.8-48.3-0.9-47.1-0.9-94.2-3.1-141-1.5-31.4-14.6-58.4-24.6-86.8-1.9-5.4-8.8-4.5-13.7-5.7-47.3-11.2-90.6-35.2-125-69.4-9.1-9.1-15.7-6.4-23.5 0-20.8 16.9-32.7 57.3-25.6 83.5 10.9 39.9 13.3 81.1 16.6 122.1 4.3 54 6.7 108.2 9.6 162.3 0.5 10.5 0.9 21.7-7 35.2z"/>
<path class="st0" d="m6309.2 1252.1c0.4 27.5 1.6 54.9-5.7 81.8-1.4 5.3-1.6 13-8.8 13.8-6.1 0.7-5.4-6.3-7.1-10.2-2.4-5.5-7.3-4.9-11.8-5.3-15.2-1.2-29.6-7.1-41.2-16.8-14.7-12.8-29.4-13.2-46.8-9.1-41.9 9.6-85.4 10.5-126.6 24.6-22 7.5-35.1-3.6-36.1-26.7-0.9-20.9-1.8-41.8-2.4-62.8-0.7-22.2 19.1-41.8 45.4-45.7 67.2-9.9 132.8-28.7 200.1-37.7 3.2-0.5 6.3-1.7 8.9-3.5 14.9-10 21.9-2.1 25.2 11.8 6.8 28.2 6.4 57.1 6.9 85.8zm-21 71.4c-0.9-51 0.5-96.7-3.9-142.3-0.9-9.8-4.2-11.8-13.6-9.5-27.8 7.1-55.7 14-83.8 19.6-43.9 8.9-86.7 23.1-131.8 26-10.8 0.7-16.6 9.8-16 21.2 1.1 21.5 2.2 43.2 3.9 64.5 0.9 12.1 7.6 16.6 18.5 10 6.6-4.1 14.1-6.8 21.8-7.8 46.5-6.4 93.1-13.2 139.6-19.6 6.3-0.9 14.2-3.9 18.4 2.4 10.9 16.1 30 19.7 46.9 35.5z"/>
<path class="st0" d="m6708.1 2436.2c26.8 1.4 53.5 2.7 80.3 4.2 5.7 0.4 14.9 1.3 7 9.5-30.6 31.4-52.9 69.6-80.5 103.4-15.7 19.6-34.1 28.7-58.1 20.4-33.3-11.5-67.9-12.6-102.4-14.7-30.2-1.9-36.4-13.5-19-38.5 15.1-21.3 31.3-41.8 48.5-61.4 13.7-16.3 34.3-25.1 55.5-23.9 22.8 0.7 45.7 0 68.6 0v1zm41.4 41.5c-10.2 0.7-16.8 9.1-25.8 12.4-19.6 7.2-18.9 19.2-7.8 35.3 13.2-15.4 25.8-29.7 34-47.3 1.6-0.6 4.3-0.9 1.3-3.3l-1.7 2.9zm18.8-22.4c-45.4-5.7-87.8-2.4-130-5-3.9-0.2-8.9-0.8-9.7 3.9-2.4 14.9 2.8 28.8 9.9 41 6.2 10.8 17.5 6.7 26.5 3.1 33.6-13.5 67-27.7 103.3-43zm-208.5 80.6c41.3 2.3 77.4 3.9 113 10.8 8 1.5 18.1 9.2 23.5 3.1 6.6-7.1-6.6-13.6-7.1-21.9-1.3-17.3-9.2-17.8-23.9-11.8-17.2 6.9-36.6 14.1-50.3-7.8-2.1-3.3-5.5-2.7-8.6-0.9l-46.6 28.5zm57.8-87.5c-16 0.9-51.7 46.5-54.3 69.4 3.9-1.8 7.4-3.2 10.8-5.1 18.7-10.8 44.9-16 35.1-48-1.9-6.7 7.9-9.6 8.6-16.3h-0.2z"/>
<path class="st0" d="m2774 2211.3c45.5-58.1 97.6-110.1 149.4-162.4 96.1-96.9 192.9-193.2 293-286 6.8-6.3 16.7-19.6 23.5-12.6 8.9 9.3-5.9 17.6-12.2 24.4-125.2 133.4-256.5 260.7-386 389.7-18.3 18.3-41.2 31.4-58.3 51-4.1 0.7-7.8 0.8-9.4-4.1z"/>
<path class="st0" d="m6148.4 1387.9c-3.6 13.2-15.7 12.5-25.2 13.7-47.9 6.2-96 12.3-144.2 16-15.7 1.2-21.5 7.5-21.7 20.7-0.5 37 0 74 1.4 112.9 24.1-36.3 62.1-30.3 96-33.2 44.2-3.9 88.8-3.9 133.4-5.5 19.6-0.7 26.7-6.6 25.1-26.1-2-23.5-3.1-47.1-3.5-70.6-0.3-18.1-12-25.3-35.3-23.3-7.8 0.7-15.7 4.4-20.5-5.4 15.4-17 34.3-13.7 52.4-7.3s23.5 21.4 22.8 39.2c-0.9 26.1-1.8 52.1-2.9 78.2-0.7 18.1-11.5 29.5-30.9 31.4-58.5 5.7-117.2 9.8-176 9.8-15.7 0-28.3 3.1-37.1 16.4-8.1 12.2-24.8 16.5-28.3 33.5-1.5 7.3-11.8 5.4-16.7 3.3-5.5-2.3-1.1-8.7 1.3-11.8 8.7-10.9 7-23.1 6.9-35.3-0.4-37.9-0.7-75.8 0-113.8 0.4-24.8 6.8-28 31.7-29.5 31.4-2 62.2-7.8 93.3-11 26-2.3 51.8-7.3 78-2.3z"/>
<path class="st0" d="m5935.4 1225.3c-4.9-3.9-4.6-9.3-4.6-14.3 0.3-39.2 1.6-78.5 1.1-117.5-0.4-21.2 14.1-31.4 28.9-36.5 86.3-29.7 174.1-55.4 262.9-77.7 10.2-2.6 14.8 0.7 14.7 11.3 0 26.6 0.5 53.3 0.2 80 0 22.4-11.6 36.2-33.9 41.4-71.2 16.6-142.3 33.6-213.8 49.3-10.8 2.4-14.9 9-19.9 16.6-10.8 16.4-16.4 37-35.6 47.4zm280.9-230.1c-46.2 13.4-91.2 26.4-136.2 39.2-32 9.1-64.3 17.5-96 27.2-16.9 5.2-37 12-38.8 31.6-3.1 31.8-0.8 64.1-0.8 96.2l4.3 2.9c12.5-40.6 46.5-46 79.7-53.7 57.2-13.2 114.2-27.5 171.2-41.2 8.2-2 18.1-3.7 17-15.2-2.8-28.4 0.3-57-0.4-87z"/>
<path class="st0" d="m6337.6 1435.3c11.4 9.3 10.7 20.2 11.4 30.1 3.9 54.9-8.6 106.6-32.4 155.5-43.9 90.2-103.9 167.4-188.1 223.6-20.6 14.8-45 23.1-70.4 23.9 157.1-106.2 270.9-235.2 279.5-433.1z"/>
<path class="st0" d="m1787.9 1563.9c5.4-5.4 12.4-1.4 17.7-2.7 21.5-5.3 37.2-6.4 37.3 23.2 0 4.9 10.7 11.3 19.2 3 4.6-4.5 10.7-8.7 17.5-4.4s4.6 11.5 1.6 17.5c-5.4 10.9 3.9 13.4 9.7 17.9 20.7 16.2 21.2 20.9 4.4 40.7-3.9 4.5-7.8 8.9-11.4 13.5-33.9 41.3-46.4 42.9-86.8 6.9-14-12.8-28.8-24.6-44.3-35.3-11.8-7.8-15.3-16.9-6.4-29.7 10-14.4 19.3-29.5 28.7-44.3 2.8-4.5 7.9-7.1 13.2-6.6-8.9 22 3.2 33.4 20.3 44.5 19.1 12.4 36.6 27.5 54.6 41.5 5 3.9 9.6 8.3 14.5 1.3 3.9-5.5 17.1-9 8.6-17.9-5.8-6-12.4-17.8-26.1-8.1-11.8 8.3-18.1 3.1-17-11.4 1.2-15.7-5.4-20-20-12.9-11.8 5.8-19.6 1.4-17.7-10.4 2.4-15.7-7.7-20.3-17.6-26.3zm49.8 86.9c-6.6 4.4-11.8 11.4-11.5 17.1 0.5 10 10.9 15.1 19 16.5 7 1.2 13.7-8.6 13.4-14.1-0.6-10.6-13.8-11.5-20.9-19.5zm-18.5-8.6c-2-7.7-8.4-13.5-16.3-14.8-8.3-0.9-11 9.1-11.4 15-0.5 8.9 9 13.3 15.7 14.3 8.5 1.5 7.9-9.3 12-14.5zm-32-25.7c-1.6-6.4-6.6-12.6-10-11.8-8.8 2.3-11.8 11.8-13.6 19.6-1.1 5.5 5.9 9.9 10.5 9 8.4-1.9 9.6-11 13.1-16.8z"/>
<path class="st0" d="m5985.4 2425.3c-9.2 16.2-15.4 35.5-34.9 32.3-16.1-2.6-21.1-21.1-28-34.4-8.1-15.9-10.6-34.1-7.3-51.6 2.3-12.8-1.1-20.5-11.8-27.8-14.3-9.8-29-17.5-46.5-19-3.7-0.3-9.1 0.4-9.4-4.6-0.4-6 5.3-6.7 9.8-7.1 23.9-1.8 43.6 7.8 59.5 24.6 7.8 8.2 14.8 12.6 26.6 11.5 13.6-1.2 31.4 17.7 37.2 37.2 2.9 9.8 5.8 17.5 16 24.5 17.2 11.8 17.4 32.7 15.2 51.9-5.6 49.7-66.9 102.5-117.2 101.5-2.6 0.1-5.3 0-7.8-0.5-7.2-1.7-18.5-0.6-18-10.7 0.5-8.9 11.1-6.8 17.9-7.1 46.3-2.2 78-26.6 99-66.2 9.8-16.9 9.7-37.8-0.3-54.5zm-17.5-18.1c-2.6-18.5-5.3-36.8-22.8-47.6-8.2-5.1-15.7-5.1-14.2 7.8 1.6 15.7 2.3 31.4 9.1 45.9 3.9 8.4 7.1 22.2 18.2 19.4 9.7-2.3 7.8-16.3 9.7-25.5z"/>
<path class="st0" d="m6181.1 2085.7c-8.7-19.3 7.6-44.3 30.5-46.8 55.2-6 102.8 42.3 96 97-4.6 37.1-20 72-44.3 100.4-5.2 5.8-11.1 10.9-17.5 15.3-7.4 5.5-13.9-1.5-19.9-3.7-7.1-2.5-1.5-8.7 0.4-13.1 15.7-37.2 8.6-69.6-21.5-99.2-6.2-6.1-21.3-12-0.4-20.5 6.4-2.6 3.9-13.1 1.1-19.6-4.9-10.5-14-12.4-24.6-10.1l0.2 0.3zm74.5 129.5c15.4-15.3 21.3-35.3 26.6-55.4 15.1-56.3-8.4-91.3-66.3-100.5-4.6-0.7-9.5-2.2-11.8 3.3s2.4 6.6 5.5 8.7c13.9 9.6 15.7 22.6 12.2 38.1-1.8 7.8-5.4 16.7 2 24.1 22.5 22.7 28.8 51.8 32.1 82-2.6-0.6-2.9 1.1-2.9 3 0 0.5 0.7 0.9 1 1.4 0.2-1.7 0.7-3.1 1.3-4.8l0.3 0.1z"/>
<path class="st0" d="m4453.9 1706.8c-103.7-28.6-204.3-65.5-305.1-102-35.7-12.9-71.1-26.4-106.4-40.1-6.8-2.6-17.5-4.9-13.5-15.3 3.6-9.2 12.5-3.9 19-1.9 129 40.7 258.1 81.7 379.1 143.6 9.2 4.8 18 10.6 26.9 15.7z"/>
<path class="st0" d="m4210.7 1445c26.8 9.4 63.5 13 82.8 37 12.8 15.7 19.1 21.6 38 19.2 10.4-1.3 10.4 11 7.1 17.9-10 21.2-20.8 42.1-32.5 62.3-6.8 11.8-17.1 9.8-23.5-0.2-7.8-12.7-15.7-16.8-31.2-11.4-16.6 5.8-72.2-21.5-80.7-36.8-3.5-6.3-2.5-12.6-0.9-19 5.8-23 21.1-41.9 27.8-64.5 1.4-4.3 5.2-5.6 13.1-4.5zm103.5 80.9c-5.9-3.4-11-0.7-16.1-0.4-22.2 1.1-26.1-3.3-18-23.9 3.3-8.4 0.3-10.3-6.4-12.1-7.5-2-15-4.4-22.4-6.9-43.6-14.3-43.6-14.4-60.9 28.3l-0.9 1.8c-4.4 7.3-2.4 11.6 5.7 14.6 15.7 6.4 30.6 14.8 44.3 24.8 6.3 4.4 9.8 6.2 15.1-2.3 9-14.8 17.3-14.5 28-1.3 3.9 4.9 5.5 11.8 13.4 14.8 5.7-12.7 15.6-23.3 18.2-37.4z"/>
<path class="st0" d="m1590.3 1509c21.2 4.1 43 4.3 64.3 0.6 16.1-2.6 23.5 4.9 24.8 19.6 2 23.5-1.8 46.8-4.5 70-0.6 8.1-7 14.6-15.1 15.3-36.8 7-73.8 5.7-110.9 3.9-11 0.3-20.4-7.8-21.8-18.7-5-25.2-3.6-50.6-2.8-76 0.4-10.9 8.5-15.1 19.2-14.9 15.6 0.4 31.2 0.2 46.8 0.2zm-53.5 15.4c1.4 20.5 2.6 40.1 3.9 59.6 0.8 10.4 4.9 16.3 17.3 15.7 29.4-1.1 58.9-0.9 88.2-1.1 5.4 0 10.5 0.4 10.9-7.4 0.8-15.4 2-30.7 3.2-47.4-24.2 6.8-41.4 28.3-66.7 24.8-26.1-3.7-37.8-27.8-56.8-44.2zm22.1 2.7c32.4 35.9 38.1 35.7 92.2 0h-92.2z"/>
<path class="st0" d="m2965.8 1823.3c5.1-7.8 4.6-15.7 6.1-23.5 2.7-14.1 11.1-18.4 21.8-8.9 17.9 16.2 33.7 34.5 47.4 54.4 8.1 11.5 0.6 19.9-10.2 21.2-16.6 2-19.8 11-21.1 25.6-1.5 17.4-48.1 59.5-64.6 60.7-9.2 0.7-16.2-4.7-22.3-10.6-14.9-14.6-29.1-29.7-43.9-44.3-6-5.9-3-10.6 0.6-15.3 17.5-21.9 36.6-42.4 57.1-61.5 10.2-9.6 19.9-4.8 29.1 2.2zm24.9-11.5c-3 11.3-4.4 18.9-7.1 25.9-4.8 12.6-14.2 17.7-23.2 5.8-10.2-13.2-14.8-6.9-21 2.3-3.3 4.8-7.1 9.3-10.9 13.9-28.9 34.3-29 34.3 3 66 1 0.9 1.9 1.8 2.7 2.8 5.3 6.9 9.7 6.3 15.4 0 11-12.1 23.7-22.6 37.7-31.2 7.8-4.9 12-8.7 3.5-17.6-10.7-11.1-3.3-19 7.5-24.1 6.3-3 14.2-1.8 21.6-7.8l-29.2-36z"/>
<path class="st0" d="m4987.4 2233.2c-19.6 1.2-34.4-6.9-49.1-13.3-66.5-29.5-130-64-185.8-111.3-5-5.2-12.8-6.6-19.3-3.4-30.6 11.8-46.3 34.6-50 66.7-0.7 5.6 1.5 13.3-7.2 13.3-8.7 0.1-10.1-7.1-11.2-13.8-6.4-39.2 37.5-88.8 77.5-87.8 4.6-0.2 9 1.2 12.7 3.9 60.1 47.9 130.3 79.4 195.7 118.6 12.2 7.2 25.5 12.9 36.7 27.1z"/>
<path class="st0" d="m4705 1843.8c11.8 7.3 15.3 17.9 19 28 20.5 57 40.7 114.3 61.3 171.3 2.2 6.2 2.6 11.8-1.7 16.4-5.2 5.5-9.1-1.2-13.7-2.4-25.7-6.8-51.2-8.6-75.8 4.8-4.6 2.5-9.8 9.7-14.8 1.8-3.7-5.9 0.9-11.2 5.5-15.1 15.7-13.8 35.3-17.1 54.9-15.9s18.3-5.3 12.4-19.6c-18.8-45.8-34-93-45.3-141.2-1.9-8.2-5.1-16.5-1.8-28.1z"/>
<path class="st0" d="m4784.3 2262.5c7.1-10.8-4.4-13.7-8.5-19.6-6.4-9.2-22.5-19.9-13.7-28.4s17 9.3 24.5 16c54.9 49.1 109.6 98.6 163.9 148.5 7.8 7.1 23.5 16 16.8 24.6s-19.6-3.9-28.5-9.5c-10.4-6.6-20-14.6-30-21.9-2-4.5-6.2-7.5-11.1-8l0.4 0.3c-18.6-22.4-40.9-40.9-62.8-59.7-13-13.4-25.7-27-39.2-40-2.9-2.9-6.6-9-12.1-2.5l0.3 0.2z"/>
<path class="st0" d="m4713.2 2001c10.1 6.1 27.5 1.6 25.1 13.5-2.6 13-17.5 3.9-27 4.2-19.6 0.9-26.5-10.6-31.2-27.5-6.8-25-9.1-51-17.6-75.6-3.9-11.2 6.6-14.9 15.1-15.1 11 0 24.7-2.3 26.8 14.8 2.3 22.6 9.7 44.5 21.4 64 9.6 14.8-2.9 16.8-12.6 21.7zm-9.2 0.3c1.3-0.7 3.9-1.1 4.3-2.4 1.6-3.6-2.2-3.9-3.9-4.3-1.7-0.3-3.4 0.3-4.6 1.5-1.7 3.5 1.7 3.8 4.2 5.2z"/>
<path class="st0" d="m4646.3 2147.6c1.1 7.3 1.6 11-2.4 12.2s-6.2-1.9-7.6-4.7c-3.1-5.8-5.7-11.8-7.8-17.9-23.8-73.4-41.7-148.3-58-223.6-1.4-6.2-6.2-16.5 3.1-18.5 7.8-1.7 10.4 8.7 12 15.5 14.7 58.2 29 116.6 43.7 174.8 5.5 22.1 11.9 44.1 17 62.2z"/>
<path class="st0" d="m6180.8 2085.5c11.2 20.8 7.3 36-11.8 45.7-9.5 4.8-19.3 5.2-26.8-3.1-10.5-11.8-5.3-24.3 0.8-36 4.7-9 10.8-13.8 21.9-7.4 3.9 2.4 10.6 5.2 16.3 1.1l-0.4-0.3z"/>
<path class="st0" d="m5497 2387.1c-19.3-0.7-30-14.8-24.8-30.7 3.4-10.5 9.7-15.7 20.7-9.1 3.3 1.9 5.6 5.3 10 5.4 11.5 0 17.1 6.7 15.3 17.7-2 12.4-11.7 16-21.2 16.7zm-1.4-15.1c3.9-0.6 7.8-1.8 5.8-7.1-1.5-4.1-3.5-8.5-9.1-8-3.6 0.2-6.3 3.2-6.2 6.8 0 0.4 0.1 0.7 0.1 1.1 0.6 5.6 4.5 7.1 9.4 7.2z"/>
<path class="st0" d="m5804.4 2956.9-2.9-1.7c2.2-1.6 3.3-1.2 3.1 1.6l-0.2 0.1z"/>
<path class="st0" d="m6790.8 1997.1c2-1 4.2-2 6.1-3.2 0 0-0.4-2.5-1-2.7-3.6-1-5.7 0.9-7.1 3.9-1.8 0.5-3.5 1.3-2.1 3.5 1.4-0.3 2.8-0.8 4.1-1.5zm67.6-10 1.4-1.3c-0.8-0.5-1.7-0.9-2.6-1.1-0.3 0-0.9 0.7-1.3 1.1l2.5 1.3z"/>
<path class="st0" d="m6094.4 1442c12.5 1.3 28.7-2.6 29.3 10.7 0.5 10.1-15.7 7.5-25 8.4-30.4 2.9-60.8 5.1-91.3 7.2-6.7 0.5-16.7 3.4-17.9-6-1.3-10.2 9.6-8.7 15.7-9.6 30.6-4 60.9-7.3 89.2-10.7z"/>
<path class="st0" d="m5250.9 3085.2c2.1-11.2-1.9-28.5 11.8-32.1 14.5-3.9 26.3 8.3 34.7 20.7 3 3.5 5 7.7 6 12.2 2.7 36.8 30.2 59.4 49.4 86.7 6.4 9.1 13.3 17.8 19.6 26.9s12.6 17.7 26.5 19.6c17.4 2.6 39.2 34.1 39.2 52.2 0.5 13.5-7.6 25.9-20.2 30.8-12.2 5.3-21.3-1.1-29.4-9.6-1.5-1.2-2.8-2.8-3.6-4.6-11.3-38.8-41.8-24.1-66.9-24.1-9.1 0-12.2 4.5-11.1 13.9 0.6 6.5-0.3 13-2.4 19.2-4.2 12.3-12.7 16-24.6 9.8-20.7-10.5-36.5-44.7-31-67.2 3.9-16.1 12.4-20.9 24.5-10.3 28.8 25.4 61.1 5.3 91.5 8.5 8.7 0.9 11.8-11 5.1-19.6-19.9-25.9-40-51.6-60.1-77.4-2.6-3.3-4.4-8.8-10.3-3.5-14.9 13.5-25.1 3.1-34.3-7.8-11-12.3-14.3-27.5-14.4-44.3zm43.2 19.2c-0.6-3.1-1.1-6.2-2-9.4-3.2-11.8-11-21.9-23-20s-4.9 15-6.5 23c-0.5 3.9 0.1 7.9 1.8 11.5 3.7 8.1 6.6 19.3 18 17.5s9.3-13.9 11.7-22.6zm91.7 153.1c-0.4 12.9 9.3 26.4 18 25.7 8.9-0.2 16.1-7.4 16.3-16.3 1-9.3-17.1-30.3-25.5-28.4-10.6 2.5-3 14.8-8.8 19zm-126.2-0.9c0.4 14.4 14 34.1 22.9 33s8.7-8.6 8.9-14.8c0.4-12.2-15.4-31.4-25.3-31-8.9 0.4-5.4 8.2-6.5 12.8z"/>
<path class="st0" d="m5798.7 3338.1c-0.7 8.7 6.1 23.5-2.2 27.9-10.4 5.6-17.3-10.8-27.1-14.6-26.5-10.3-36.7-33.3-48.6-56.4-28.9-56.3-56.5-113.3-81.4-171.5-4.2-9.8-14.8-20.3 2.3-29.7 19.9-10.9 35.1-11.1 45.9 2.3 4 5.2 7.5 10.7 10.4 16.5 32.9 63 65.7 126.1 98.3 189.2 5.8 11.2 1.5 23.3 2.4 36.3zm-101.5-196.2c-9.9 4.4-21.6 7-29.5 13.9-5.2 4.6 3 12.8 6 19 19.4 39.9 39.2 79.5 58.9 119.4 13.9 28.8 13.4 28.6 42.9 16.3 8.6-3.6 11.1-5.9 6.2-15.1-25.5-47.7-50.3-95.9-75.5-143.8-2-4-2.7-9.2-8.8-9.9l-0.2 0.2z"/>
<path class="st0" d="m6788.8 1995.2c1.4-3.1 3.5-5 7.1-3.9 0.5 0 1.2 2.6 1 2.7-1.9 1.2-3.9 2.2-6.1 3.2l-2-2z"/>
<path class="st0" d="m6827.9 1987.2c1.3-2.8 4-4.7 7.1-4.8l3.4 3.9c-1.7 2.7-4.7 4.1-7.8 3.6-0.8-0.9-1.7-1.8-2.7-2.7z"/>
<path class="st0" d="m6835 1982.4 7.7-3.9 2.8 2.9-7.1 4.9-3.4-3.9z"/>
<path class="st0" d="m6826.3 1993.5-4.8 2.8-2.2-2.2 4.4-3.4 2.6 2.8z"/>
<path class="st0" d="m6823.6 1990.7 4.3-3.5c0.9 0.8 1.8 1.7 2.7 2.6l-4.4 3.7-2.6-2.8z"/>
<path class="st0" d="m6858.4 1987.1-2.5-1.3c0.4-0.4 1-1.2 1.3-1.1 0.9 0.3 1.8 0.7 2.6 1.1l-1.4 1.3z"/>
<path class="st0" d="m6842.7 1978.5 4.8-3.1 2.4 2.2-4.4 3.9-2.8-3z"/>
<path class="st0" d="m6821.4 1996.4c-1.2 1-3.2 3.1-3.5 2.8-3.2-2.4-0.3-3.6 1.3-5.1l2.2 2.3z"/>
<path class="st0" d="m6790.8 1997.1c-1.3 0.7-2.6 1.2-3.9 1.6-1.4-2.2 0.4-2.9 2.1-3.5l1.8 1.9z"/>
<path class="st0" d="m7067.3 2246.3-4.3 3.4-7.2 1.1c-1-6.5 3.7-9 8.5-10 3-0.7 2.6 3.2 3 5.5z"/>
<path class="st0" d="m7036.2 2211.5c0.8-3.2 4-5.3 7.3-4.5 0.3 0.1 0.7 0.2 1 0.3-1.6 3.8-4.1 5.6-8.3 4.2z"/>
<path class="st0" d="m7044.1 2207.6c-0.3-3.1 1.3-4.4 4.2-4.3 0 2.3-1.9 4.2-4.2 4.3z"/>
<path class="st0" d="m7011.1 2078.7c7.1-12.6 19.1-21.7 33.1-25.1-8.3 13.4-17.7 19.3-33.1 25.1z"/>
<path class="st0" d="m7016.9 2211.5c-1.1 2.2-2.6 3.9-5.4 3.3-0.3 0-0.7-1.3-0.5-1.6 1.3-2.1 4.1-2.7 6.2-1.5l-0.3-0.2z"/>
<path class="st0" d="m7017.3 2211.7c0.3-0.7 0.5-1.5 0.7-2.2v0.9c-0.3 0.4-0.7 0.7-1.1 1.1l0.4 0.2z"/>
<path class="st0" d="m3478.6 1593.8c23.8 7.3 42.3 20 49.4 47.1-12.1 0-16-7.8-21.3-12.9-22.2-21.6-39.2-24.1-66.7-8.6-5.1 2.9-9.8 6.5-15.1 9.1-2.2 1-4.8 1-7.1 0-3.7-2.4-1.4-5.7 0.4-8.4 6.7-10.1 18.5-14.1 27.5-21.5-25.5-25.1-30.5-57.4-13.2-83.8 13-19.9 31.4-21.1 46.5-3 21.9 26 21.8 44.9-0.4 82zm6-37.2c0.4-19.1-15.7-45.1-27.7-45.3-13-0.2-24 21-23 44.4 0 1.3 0 2.6 0.3 3.9 2.4 14.5 7.8 26.8 25 27.5 11.5 0.6 25.1-16.6 25.4-30.5z"/>
<path class="st0" d="m3772 1530.5c-12 10.2-18.4 25.5-17 41.2 0.1 10.8 7.2 20.3 17.5 23.5 8.8 3.6 18.9 1.3 25.2-5.7 8.2-8.7 7.5-18.9 3.9-29.3-4.6-12.5-17.6-18.6-24.4-30.4 19.5 1.9 35 17 37.5 36.4 1.8 17.5-1.6 33-22.5 37.2-10.5 2.2-7.8 6.9-2 11.4 8.7 6.5 18.3 12 21.7 31.7-31.4-31.4-56.8-27.5-78.8 5.5-1.5-22.4 8.6-33.2 36.8-42.1-9-8.2-20.8-13.1-25-25.5-3.9-11.2-3.5-23.5 1.2-34.5 4.2-10.1 7.6-23 25.9-19.4z"/>
<path class="st0" d="m3747 1376.9c-0.2-24 13.5-47.8 28-48.4 19.6-0.8 40.2 21.3 40.3 43.2s-15.9 39.2-35.3 39.2-32.8-14.1-33-34zm54.4-2.8c0-15.3-17.1-37.2-27.7-33.8-17 5.4-14.9 22.7-16.2 36.1-1.3 13.3 6.3 22.7 20.7 22.6 16.4-0.2 21.3-12 23.3-24.8h-0.1z"/>
<path class="st0" d="m3738.8 1454.6c4.9-20 18.6-30 36.2-30 24.8 0 40.4 16.4 52.1 38.1-28.4-15.8-54.7-46.8-88.3-8.1z"/>
<path class="st0" d="m6232.2 1214.9c-12.1 9.2-26.5 12.5-40.7 15.7-28.7 6.3-57.6 12-86.3 17.7-4.5 0.9-9.7 1.3-12.2-3.6-2.4-5 1.6-7.8 5.2-8.8 44.1-10.4 87.6-24.2 134-21z"/>
<path class="st0" d="m6122.1 1082.1-135.3 36.1c-3.1 0.8-7.5 1.7-8.2-2.3-1.3-6.8 4.9-8.6 9.5-10.2 28.9-10.4 58.5-18.6 88.6-24.8 14.7-2.8 29.6-4.7 45.4 1.2z"/>
<path class="st0" d="m882.9 2707c-11.3-30.4-1.1-63.4-10.6-93.5-92 37.3-188.3 44.3-286.2 39.9-9.1-0.4-24 0.9-23.8-10.8 0.2-11.6 15.5-9.8 24.2-10.3 52.2-2.9 104.5-4.6 156.2-13.1 38.1-5.9 75.8-14.6 112.6-26.1 12.8-4.2 16.7-10.6 15.9-24.2-14.1-250.4-44-498.6-103.3-742.7-5.2-22.9-12.1-45.5-20.6-67.4-3.5-8.6-6.9-10.8-15.4-4.4-48.1 36.3-112.8 4.5-136.7-39.7-2.7-5-7.4-11.8-1.2-15.7s10.3 3.4 14 7.4c12.5 13.6 25.9 25.9 42.9 33.6 28.4 12.9 54.5 10.1 78.5-10.7 4.3-3.9 7.6-9 14.4-10.4 46.3 71.3 59.9 153.7 78.1 234.2 31.9 141.2 50.7 284.3 63.5 428.3 0.9 9.5 2.3 18.9 3.9 31.4 35.7-32.5 68.8-62.8 102-93 47.8-43.6 98.9-83.6 143.7-130.5 6.1-6.4 12.9-14.2 21.1 0 3.9 6.7 13.3 2.2 20.1 1.2 49.9-7.5 88.6-33.3 117.9-73.9 1.4-2.2 3.1-4.2 4.9-6.1 6.4-6.1 10.4-21.7 21.4-13.4 11 8.4 2.7 20.5-4.4 29.3-43.6 54.1-96.2 90.2-169.7 83-4.6-0.6-9.1 1.4-11.8 5.1-63.1 71.2-137.6 130.3-207.3 194.4-28.8 26.4-38.3 51.9-34.2 89.7 6.3 58.6 6.5 117.6 0.9 176.2-1.2 11.8-10 20.5-11 32.2z"/>
<path class="st0" d="m372.7 2809c-36.7-76.6-58.4-153.6-71.3-232.9-29.3-179-48-358.8-39.1-540.6 3.6-73.8 9.1-147.4 27.5-219.4 11.1-44.1 27.9-85.9 60.7-119 28.2-28.5 61.7-47.5 102.5-46.6 66.7 1.5 105-35.1 130.5-91.1 2.2-4.7 3.4-9.9 5.6-14.6 3.9-8.7 2.7-25.9 16.5-21.4 11.4 3.6 4.3 18.3 2.3 27.9-16 77.4-70.3 123.6-147.8 125.6-54.9 1.3-91.8 30.3-117.6 75.8-26.6 47.1-35.3 99.4-42.1 152-21 164.6-13.1 328.6 5.1 492.8 12.1 109.2 26.4 217.8 53 324.6 3.9 16.4 6 33.2 12.7 49.1 5.3 11.9 5.8 25.5 1.5 37.8z"/>
<path class="st0" d="m1008.3 1400.2c-4.3 91.3-32.2 171.3-115 220.8-37.8 22.6-78.7 39.2-125.6 29.9-48.8-9.6-84.2-37.4-108.8-78.9-42.1-70.6-47.1-145.2-17.5-222.1 25.6-66.7 68.8-118.1 133-150.2 38.3-19.1 78.7-16.8 115.5 1.8 74.9 37.9 112.9 101.3 117.2 184.9 0.3 4.7 0.8 9.3 1.2 13.8zm-19.6 19.4c0.9-36.7-6.4-73.2-21.3-106.8-17.4-39.3-44.2-69.4-87.4-81.3-58.1-16.2-151.5 15.5-188 63.4-57.7 76-65.4 186.1-15.8 267.7 39.9 65.7 82.6 80.1 146.3 73.9 35.3-3.4 65.7-25.4 93.1-47.8 53-43.5 71.7-102.8 73.1-169.1z"/>
<path class="st0" d="m441.9 2465.3c-2.6-21.1 2.7-38.6 7.4-55.9 31.3-113.3 55.7-228.4 73.3-344.6 4.2-28.4 8.4-56.8 12.9-85.2 1-6.3 1.6-14.9 10-14.4 10.1 0.6 6.2 10 5.9 15.7-7.8 147.5-34.2 293.4-78.5 434.4-7.8 24.3-15.7 35.6-31 50z"/>
<path class="st0" d="m1298.7 2011.1c-14.8 22.4-37.4 31.6-60.3 36.8-27.2 6.3-47.1 20.5-69 37.7-69.8 54.9-145.8 100.9-230.4 130.8-13.6 4.8-27.5 8.4-42.1 6.7-5.3-0.6-10.9-1.8-10.8-8.7 0-5.7 5-6.7 9.6-7.8 103.1-29.2 190.6-88 274.1-151.5 40.1-30.5 85.8-30 128.9-44z"/>
<path class="st0" d="m544.3 3002.1c-13-1.9-28.2-2.5-41.9-9.7-6.8-3.6-11.8-9.3-9.3-17.5 2.4-8.2 9.4-5.8 15-5.5 9.8 0.4 19.5 1.3 29.2 2.8 16 2.6 21-2.6 17.3-19-8.2-35.8-20.3-70.3-31.9-105-5.4-16-6.3-39.2-17.5-46.3-11.8-7.6-31 7.8-47.1 12.3-6.4 1.7-15.4 7.4-18.3-2.8-2.3-7.8 7.1-9.8 12.8-12.1 18-7.6 36.3-14.7 54.5-21.9 9.8-3.9 17.1-0.5 20 9.3 17.4 57.5 42.6 112.6 54.9 171.7 5.9 30-6.5 44.7-37.7 43.7z"/>
<path class="st0" d="m853.8 3144.6c11.8-65.2 20.7-130.8 28.6-196.6 7.6-63.5 13.8-127.1 18.6-190.8 0.4-5.5-1.6-12 5.3-15.7 6.9 5.3 4.8 13.1 5.1 19.6 4.2 83.9-8.4 166.5-20.6 249.1-6.5 43.8-16.1 87.1-28.8 129.5-0.5 1.6 0.8 3.9 1.3 5.7l-9.5-0.8z"/>
<path class="st0" d="m1439.5 1985.4c-0.7 7.8-6.2 12.8-12.2 16.8-39.6 27.8-81.2 52.7-124.4 74.5-7.4 3.6-16.6 9.4-22.3-1.2-5.5-9.9 3.3-15.7 10.2-20.4 40.5-26.4 81.1-52.8 122-78.5 13.7-8.6 26.9-3.5 26.7 8.8z"/>
<path class="st0" d="m443.9 3004.4c17.1 36.8 77.1 294.5 76.5 321.1-36.7-104.4-65.8-210.8-76.5-321.1z"/>
<path class="st0" d="m1161.9 1139.1c16.7-13.9 38.1-15.3 57.7-19.9 122.5-28.4 247.2-41.6 372.4-50.5 150.7-10.8 301.6-15.6 452.7-14.4 236.2 1.5 471.7 15.7 706.5 40.5 110.5 11.8 221 23.5 329.6 47.9 12.8 2.9 25.4 6 37.9 10 5.3 1.7 15.9 0.4 13.1 10.1-1.8 6.5-10.4 3.5-15.7 2.7-24.5-3.9-48.8-8.7-73.2-12.6-177.7-28-356.5-45.8-535.8-59.2-227.8-17.1-455.8-22.8-684-17.4-160.9 3.9-321.3 11.8-480.8 34.4-56.1 8-111.8 18.1-167.1 30.3-4.6 1-8.7 2.8-12.6-1.3l-0.7-0.6z"/>
<path class="st0" d="m1241 1055.3c4.9-39.2 14.7-77.8 37.3-111.8 16.4-24.6 36-23 48 4.2 11.7 27.1 20 55.5 24.8 84.6 1.9 11.5 6.6 22.5 9.9 33.8 1.5 4.9 4.4 10.8-1.8 13.9-6.9 3.4-10.8-2.5-13.9-7.4-7.4-13.2-12.2-27.6-14.3-42.5-2.2-11.5-7.6-15.7-18.9-12.6-4.5 1.1-9 1.8-13.5 2.3-35.3 4.4-35.1 4.4-41.7 37.7-1.2 6.1-0.5 15.9-8.3 15.7-10.4-0.4-6-10.9-7.6-17.9zm39.5-50.3c40.9 1 48.1-10 30.7-47.1-0.5-1.2-1.1-2.4-1.7-3.5-5.3-10.5-10.8-9.7-16.8-0.5-8.1 12.6-14.6 26.2-19.4 40.4-2.1 6.6-2 12 7.2 10.7z"/>
<path class="st0" d="m2625.3 1018.6c-1.2 7.8-2.2 17.7-3.9 27.5-1 5.1-3 10.9-9.8 9.8s-7.2-7.2-6.9-12.4c0.8-10.4 2.8-20.7 3.3-31.2 0.4-6.7 2.3-16.7-7.2-17.6s-15.1 6.7-16.9 15.7c-1.8 8.9-2.9 19.3-4.7 28.9-0.3 4.7-4.3 8.2-9 7.9-0.2 0-0.4 0-0.6-0.1-6.1-0.9-6.6-6.2-6.1-10.8 1.1-12.4 2.9-24.6 3.9-37 0.4-5.1 0.4-11.8-5.2-13.7s-9.3 3.6-13.1 6.9c-7.8 6.7-8.2 15.7-8.6 25.1 0.1 3.9-0.2 7.9-0.9 11.8-1.8 6.9 0.4 18.8-10.7 17.3-10.4-1.4-7.3-12.3-6.4-19.6 1.7-15.7 3.9-31 6.7-46.5 1.1-6.4 2.7-14.7 11.8-5.7 5.3 5.2 7.8-0.9 11.5-2.7 10.3-5.1 18.8-3.9 25.5 5.9 2.3 3.4 2.6 7.8 9.8 5.8 25.6-7.3 38.7 4.6 37.5 34.7z"/>
<path class="st0" d="m2657 1014.5c1.7 9.4-5.9 27.2 6 29.7 10.5 2.2 10.5-16.6 14.4-26.4 2.3-5.9 2.5-14.9 10.5-14.4 9.5 0.6 8.4 10 9.1 17 0.2 2.6 0 5.3 0.2 7.8 0.9 8.8-1 21.9 10.2 22.3s15.3-12.2 16.9-22.8c0.9-5.8 0-11.8 0.5-17.6 0.3-4.8 2-9.3 7.8-8.9 4.1 0.1 7.5 3.3 7.8 7.5 0.7 18 4.3 36.7-13.1 50.1-12 9.3-23.3 15-34.6-0.7-4.5-6.2-8.2-7.1-15.3-1.1-14.6 12.2-29 7.2-33.7-11.2-3.5-16-3.3-32.6 0.6-48.6 1-4.9 2.4-12 8.9-11.1 7.1 1 4.2 8.3 4.4 13.1 0.2 4.7-0.3 9-0.6 15.3z"/>
<path class="st0" d="m1546.7 968.8c-21.2 4.5-45.9 4.3-50.5 33.4-1.5 7.3 2.4 14.7 9.3 17.6 14.4 6.9 28.9 9 47.9-1.8-12.7-1-20.4-1.3-28-2.4-4.7-0.7-8.9-3.3-8.6-8.9 0.3-4.7 4.3-6.2 8.3-6.7 11.6-1.7 23.5-0.6 34.6 3.3 9.5 3.2 9.6 11.5 6.2 19.6-7.6 18.6-39.2 25-64.4 13.1-22.4-10.7-27.5-30.3-14-53.8s36.9-31.4 57-18c1.1 0.5 1.2 2.3 2.2 4.6z"/>
<path class="st0" d="m2113.2 977.9c9.4-2.9 19.5-2.8 28.8 0.4 8.6 2.6 15.7 7.8 16.2 17.3 0.3 8.1-4.5 15.6-12 18.8-15.4 7.3-31.4 9.7-46.1-1.5-13.1-9.9-16.8-29.1-8.9-48.2 6.9-16.5 18.2-28.4 37.3-30.1 6-0.5 13.1 0.8 14 7.6 1.5 10.4-7.6 5.3-12.2 6.5-14.8 3.9-22.8 13.9-25 28.8-1.2 23 10.1 33.5 29.6 27.5 3.9-1.1 7.8-2.3 7.5-7.3-0.3-3.9-4.3-4.4-7.4-4.9-5.1-0.8-10.4-1.3-15.7-2-8.3-1.2-12-4.7-6.1-12.9z"/>
<path class="st0" d="m1610.4 954c8.7-7.4 18.5-5.8 24.4 1.6 8.9 11.4 13.1 5.6 20.4-1.3 15.7-14.6 30.6-10.8 37.7 9.2 5.3 15.5 7.5 31.9 6.5 48.3-0.2 5.1-0.8 11.8-7.4 12.2-7.2 0.6-7.5-6.2-8.1-11.1-1.3-9.1-1.4-18.2-2.6-27.3-1.3-9 1.6-23.9-11.1-22.4-11.8 1.4-20.5 13-19.1 27.7 0.8 8.4 1.7 16.9 2.2 25.3 0.3 4.6 0 10.3-5.3 11.3-6.7 1.2-8.8-4.5-9.7-9.8-2.4-14.1-4.2-28.4-6.9-42.4-2.5-12.4-9.2-16.9-20.8-8.8-0.1-4.3-0.2-8.4-0.2-12.5z"/>
<path class="st0" d="m1805.5 977.3c0-8.4-0.2-12.6 0-21.1 0-4.4-0.3-10 4.4-12.2 6.3-3.1 7.1 3 9.1 6.8 3 5.5 6.2 1.4 9.5 0 22.6-9.1 37.4-2.6 45.4 20.6 4 11.7 5.8 24.1 5.2 36.5-0.2 5.3-1.7 11.4-8 11.8s-8.2-5.6-9-10.9c-1.4-9.7-2.3-19.4-3.6-29.1s-3.2-19.9-15.3-18.7c-11.8 0.5-20.9 10.4-20.4 22.1v0.1c-0.2 9.1 1.1 18.2 1.1 27.5 0 5.8 0 13.3-7.8 13.3-7 0-9.1-6.8-9.3-12.9-0.4-9.7 0-19.6 0-29.3-0.6-0.2-1-4.5-1.3-4.5z"/>
<path class="st0" d="m2318.1 918.4c-18.8-6.4-38.6-4.4-57.8-7.4-5-0.8-12.4 0.4-12.8-6-0.6-7.8 7.4-7.8 12.9-8.6 17.7-2.3 35 2.1 52.5 3.2 31.2 2 62.3 4.8 93.5 7.3 5.7 0.5 13.6-0.5 13.9 7.2 0.4 9.5-8.4 8.4-14.6 8.2-26-1.1-52-2.5-78-3.9h-9.6z"/>
<path class="st0" d="m1998.5 978.2c0.8-7.3 1.5-17.8 3.2-28.1 1.4-8.8 3.9-16.8 13.2-4.6 5 6.4 7.3-1 10.2-3 20.3-14.3 33.2-10.1 41.1 13.7 4.7 14 3.9 28.4 3.1 42.8-0.4 5.5 0 13.3-8.2 12.8-6.1-0.5-6.9-7.2-7.1-12.4 0.1-13.1-1-26.1-3.2-39-2.7-12.8-8.6-12.9-17.7-6.2-11.9 8.5-18.8 22.4-18.4 37.1 0 7.5 3.3 20.3-9.3 19.6-10.3-0.6-6.1-12.4-6.8-19.6-0.1-3.5-0.1-6.8-0.1-13.1z"/>
<path class="st0" d="m2928.4 1043.4c1.6 0.1 3.3 0.1 4.9 0 8.6-2 18-14.8 23.7-8.2 7.8 8.9-8 11.3-12.1 17.7-5.5 8.6 3.6 11 6.3 16 4.3 7.8 19.6 16 12 22.9s-17.8-5.7-24.4-13.2c-10.1-11.8-17.5-16-20.9 4.2-0.7 4.3-3.1 9.3-9 8.2-4.7-0.9-7.8-5.4-6.9-10.1 0-0.2 0.1-0.4 0.1-0.5 2.9-21.2 6.4-42.4 9.9-63.5 0.7-3.9 2.7-7.8 7.8-6.9s6 4.9 6.5 8.7c0.9 8.1 1.3 16.4 2.1 24.7z"/>
<path class="st0" d="m2820.1 1040c0 22.2-19.6 43.2-40.1 42.7-16.1 0.4-29.4-12.4-29.8-28.5v-1.2c0-21.8 22.2-46.8 42-47.6 13.8-0.6 27.9 16.8 27.9 34.6zm-14.6-0.6c-2.6-7.8-3.3-19.1-16.2-19.6-9.5-0.4-24.8 20.2-24.6 32.1 0 10.2 5.8 15.5 15.7 16 12.8 0.6 25.3-13.2 25.1-28.5z"/>
<path class="st0" d="m2867.8 1053.7c3.9 9.9 21.7 16.7 11.8 26-8.4 7.8-16.6-7.2-24.2-13.1-2.5-1.9-4.7-4.2-6.8-6.2-5.1 2.4-4.9 6.6-5.7 10.2-1.1 4.8-3 9.1-8.8 8.2-6.7-1.1-7.8-6.7-6.8-12 2.4-13.4 3.9-27.2 8.7-39.8s15.7-17.8 29.2-18.8c11.8-0.9 15.3 7.8 18.9 15.7 7.5 16.3-5 22.5-16.3 29.8zm-3.3-32.9c-5.9 0.8-13.1 1.5-12.9 8.9 0 6.3 6.9 6.2 12.1 6.7 6.2 0.6 10.2-1.5 9.9-8.4-0.2-6.1-4.1-7.5-9.1-7.2z"/>
<path class="st0" d="m2375.1 1013.5c11.5 15.7 29.7 9.3 51 14.4-18.4 10.8-32.5 14.4-48.6 8.7-16.9-5.1-27.5-21.8-25-39.2 1.5-16.3 9-28.7 25.7-32.9 12.4-3.1 23.5 0 30.3 11.8 6.2 10.6-1.4 16.4-9.3 21.6-8.7 1.8-36.6 15-7.1-7.1 3-4.6 4.4-8.2-0.9-11.2-4.1-2.4-9.3-1.8-12.7 1.5-11.2 9.3-9.6 20.7-3.4 32.4z"/>
<path class="st0" d="m2496.3 1022c-1.2 7.3 1.1 17.1-8.1 18.2-9.1 1.1-7.8-8.6-8.5-14.5-0.7-7.5-4.1-10.6-11.3-9.6-8.2 1.1-19.2-4.6-22.2 9.3-0.9 3.9-0.7 10.6-7.1 9.2-5.6-1.2-4.7-7.4-4.2-11.8 2.1-18.4 6.9-36 20.8-49.4 11.8-11.5 24.1-9.5 31.7 5.2 7.2 13.8 7.1 29.1 8.9 43.4zm-19.1-29c-1.2-3.9-1.3-10.9-7.8-10.3-6.7 1.1-11.6 6.7-11.8 13.5-0.7 7.3 6.1 4.6 9.9 5.1 5.4 0.5 10.9 0.5 9.7-8.3z"/>
<path class="st0" d="m1745.3 997.1c6.8 8.5 18.3 11.5 28.3 7.4 3.9-1.4 9.1-4.8 11.8 1.6 2 5-2 8.5-5.3 11.8-17.2 16.2-52.2 2.3-59.2-23.5-5.7-18.6 4.7-38.4 23.4-44.1 4.8-1.5 9.8-1.9 14.8-1.3 8.2 0.9 15.5 3.3 18.7 11.8s-3.1 12.9-8.6 17.6c-3 2.5-5.6 5.4-8.4 8.2l-9.2-2.4c4.9-6.2 14.4-10.1 13-19.3-0.7-4.6-7.6-3.7-11.8-2.4-9.8 3.1-17 9-16.4 20.6 0 2.2 2.1 4.4 3.3 6.5 0.3 3.7 1 7 5.6 7.5z"/>
<path class="st0" d="m1375.4 992.4c5.7 6.8 2.9 14.1 3.7 20.6 1.6 14 7.2 26.3 22.7 26.7 19.6 0.5 34.5-12.7 35.8-27.8 0.8-9.3-7.3-24.8 8.2-25.3 13.1-0.5 10.7 15.2 11.3 25.1 0.7 8.5 4 16.6 9.5 23.1 3 3.9 8.5 7.8 3.2 13.3-3.4 3.8-9.3 4.1-13 0.6-0.4-0.3-0.7-0.7-1.1-1.1-11-14-20.2-9.1-32.5-1-12.6 9.2-29.9 8.5-41.7-1.7-12.4-10.1-14.7-29.6-6.1-52.5z"/>
<path class="st0" d="m1946.8 948.4c-26.1 5.4-24.2 20.7-23 35.7 0.4 4.6 0.4 9.2 0.1 13.8-0.5 6 1.9 14.9-7.8 14.9-7.8 0-7.3-7.8-7.8-13.5-0.5-5.6-0.6-10.4-0.9-15.7-0.3-4.6 1.2-10.8-1.2-13.4-17.1-17.9 0.8-33.9 1.8-50.7 0.2-3.6-0.6-8.7 4.6-9.5s6.9 3.9 6.9 7.5c0 15.2 6.4 25.4 27.3 30.9z"/>
<path class="st0" d="m2318.1 918.4h9.7c7 32.6 0.5 64.6-4.4 96.6-0.8 5.5-2.3 13.1-9.6 12.7-8.6-0.5-8.9-8.7-8.1-15.1 3.9-31.3 8.3-62.7 12.4-94.2z"/>
<path class="st0" d="m1610.4 954v12.4c-8.6 9.6-9.3 20.3-7 32.8 1.8 9.6 10.5 26-3.9 28.1-13.7 1.8-10.4-16.3-12.6-26.4-1.8-9-2.8-18.1-3.3-27.2-0.8-14.6-0.5-14.5 13.8-12.3 6.2 0.9 7.5-6.7 13-7.4z"/>
<path class="st0" d="m1972.1 980.9c-1 7.8-1.9 17.7-3.6 27.5-0.3 4-3.7 7-7.7 6.8h-0.4c-4.1-0.5-7.1-4.1-6.8-8.2 1-17.5 1.3-35.1 5.6-52.2 0.8-3.4 2.7-7 6.2-6 2.8 1.5 4.7 4.2 5.2 7.4 1 7.3 1 15.2 1.5 24.7z"/>
<path class="st0" d="m1966.3 906.9c7.5 0.4 13.1 3.2 13.1 11.4 0 6.5-4.4 8.9-10.4 8.9-7.2-0.2-13-3.1-13.1-11.3-0.1-6.6 4.7-8.8 10.4-9z"/>
<path class="st0" d="m1751.8 984.2 9.2 2.4-15.7 10.5c-4.6-0.5-5.2-3.9-5.5-7.5l12-5.4z"/>
<path class="st0" d="m1161.9 1139.1 0.7 0.7-3.7 2.9 3-3.6z"/>
</svg>

Before

Width:  |  Height:  |  Size: 46 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB

View File

@@ -14,10 +14,13 @@ require (
github.com/haya14busa/goverage v0.0.0-20180129164344-eec3514a20b5
github.com/mattn/go-colorable v0.1.2 // indirect
github.com/micro/cli/v2 v2.1.2
github.com/micro/go-micro/v2 v2.9.1
github.com/oklog/run v1.0.0
github.com/olekukonko/tablewriter v0.0.1
github.com/openzipkin/zipkin-go v0.2.2
github.com/owncloud/flaex v0.2.0
github.com/owncloud/ocis/ocis-pkg v0.0.0-00010101000000-000000000000
github.com/prometheus/client_golang v1.7.1
github.com/restic/calens v0.2.0
github.com/rs/zerolog v1.19.0
github.com/sirupsen/logrus v1.4.2

View File

@@ -785,6 +785,7 @@ github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw=
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
github.com/oleiade/reflections v1.0.0/go.mod h1:RbATFBbKYkVdqmSFtx13Bb/tVhR0lgOBXunWTZKeL4w=
github.com/olekukonko/tablewriter v0.0.1 h1:b3iUnf1v+ppJiOfNX4yxxqfWKMQPZR5yoh8urCTFX88=
github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=

156
konnectd/package.json Normal file
View File

@@ -0,0 +1,156 @@
{
"name": "identifier",
"version": "1.0.0",
"private": true,
"homepage": ".",
"dependencies": {
"@babel/core": "7.8.4",
"@material-ui/core": "^4.8.0",
"@material-ui/icons": "^4.5.0",
"@svgr/webpack": "4.3.3",
"@typescript-eslint/eslint-plugin": "^2.10.0",
"@typescript-eslint/parser": "^2.10.0",
"axios": "^0.19.2",
"babel-eslint": "10.0.3",
"babel-jest": "^24.9.0",
"babel-loader": "8.0.6",
"babel-plugin-named-asset-import": "^0.3.6",
"babel-preset-react-app": "^9.1.1",
"camelcase": "^5.3.1",
"case-sensitive-paths-webpack-plugin": "2.3.0",
"classnames": "^2.2.6",
"css-loader": "3.4.2",
"dotenv": "8.2.0",
"dotenv-expand": "5.1.0",
"eslint": "^6.6.0",
"eslint-config-react-app": "^5.2.0",
"eslint-loader": "3.0.3",
"eslint-plugin-flowtype": "4.6.0",
"eslint-plugin-import": "2.20.0",
"eslint-plugin-jsx-a11y": "6.2.3",
"eslint-plugin-react": "7.18.0",
"eslint-plugin-react-hooks": "^1.6.1",
"file-loader": "4.3.0",
"fs-extra": "^8.1.0",
"html-webpack-plugin": "4.0.0-beta.11",
"identity-obj-proxy": "3.0.0",
"jest": "24.9.0",
"jest-environment-jsdom-fourteen": "1.0.1",
"jest-resolve": "24.9.0",
"jest-watch-typeahead": "0.4.2",
"kpop": "https://download.kopano.io/community/kapp:/kpop-2.2.0.tgz",
"mini-css-extract-plugin": "0.9.0",
"optimize-css-assets-webpack-plugin": "5.0.3",
"pnp-webpack-plugin": "1.6.0",
"postcss-flexbugs-fixes": "4.1.0",
"postcss-loader": "3.0.0",
"postcss-normalize": "8.0.1",
"postcss-preset-env": "6.7.0",
"postcss-safe-parser": "4.0.1",
"query-string": "^5.0.1",
"react": "^16.8.0",
"react-app-polyfill": "^1.0.6",
"react-dev-utils": "10.0.0",
"react-dom": "16.13.1",
"react-intl": "^5.8.6",
"react-loadable": "^5.3.1",
"react-redux": "^5.0.6",
"react-router": "^5.0.0",
"react-router-dom": "5.0.0",
"redux": "^3.7.2",
"redux-logger": "^3.0.6",
"redux-thunk": "^2.2.0",
"render-if": "^0.1.1",
"resolve": "1.15.0",
"resolve-url-loader": "3.1.1",
"sass-loader": "8.0.2",
"semver": "6.3.0",
"style-loader": "1.1.3",
"terser-webpack-plugin": "2.3.4",
"ts-pnp": "1.1.5",
"typeface-roboto": "^0.0.54",
"url-loader": "2.3.0",
"webpack": "4.41.5",
"webpack-dev-server": "3.10.1",
"webpack-manifest-plugin": "2.2.0",
"workbox-webpack-plugin": "4.3.1"
},
"scripts": {
"start": "node scripts/start.js",
"build": "node scripts/build.js && rm -f build/service-worker.js",
"test": "node scripts/test.js --env=jsdom",
"licenses": "NODE_PATH=./node_modules node ../scripts/js-license-ranger.js",
"deduplicate": "yarn-deduplicate -s fewer yarn.lock",
"analyze": "source-map-explorer 'build/static/js/*.js'"
},
"devDependencies": {
"@babel/runtime": "7.0.0-beta.55",
"eslint": ">=5",
"eslint-plugin-i18n-text": "^1.0.0",
"eslint-plugin-jest": "^22.5.1",
"eslint-plugin-react": "^7.10.0",
"eslint-plugin-react-intl-format": "^1.1.6",
"prop-types": "^15.6.2",
"react-intl-cra": "^0.3.3",
"react-intl-po": "^2.2.2",
"source-map-explorer": "^1.8.0",
"yarn-deduplicate": "^1.1.1"
},
"jest": {
"roots": [
"<rootDir>/src"
],
"collectCoverageFrom": [
"src/**/*.js"
],
"setupFiles": [
"react-app-polyfill/jsdom"
],
"setupFilesAfterEnv": [],
"testMatch": [
"<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}",
"<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"
],
"testEnvironment": "jest-environment-jsdom-fourteen",
"transform": {
"^.+\\.(js|jsx|ts|tsx)$": "<rootDir>/node_modules/babel-jest",
"^.+\\.css$": "<rootDir>/config/jest/cssTransform.js",
"^(?!.*\\.(js|jsx|ts|tsx|css|json)$)": "<rootDir>/config/jest/fileTransform.js"
},
"transformIgnorePatterns": [
"node_modules/?!(kpop)"
],
"modulePaths": [],
"moduleNameMapper": {
"^react-native$": "react-native-web",
"^.+\\.module\\.(css|sass|scss)$": "identity-obj-proxy"
},
"moduleFileExtensions": [
"web.js",
"js",
"web.ts",
"ts",
"web.tsx",
"tsx",
"json",
"web.jsx",
"jsx",
"node"
],
"watchPlugins": [
"jest-watch-typeahead/filename",
"jest-watch-typeahead/testname"
]
},
"browserslist": [
">0.2%",
"not dead",
"not ie <= 11",
"not op_mini all"
],
"babel": {
"presets": [
"react-app"
]
}
}

View File

File diff suppressed because one or more lines are too long

211
konnectd/scripts/build.js Normal file
View File

@@ -0,0 +1,211 @@
'use strict';
// Do this as the first thing so that any code reading it knows the right env.
process.env.BABEL_ENV = 'production';
process.env.NODE_ENV = 'production';
// Makes the script crash on unhandled rejections instead of silently
// ignoring them. In the future, promise rejections that are not handled will
// terminate the Node.js process with a non-zero exit code.
process.on('unhandledRejection', err => {
throw err;
});
// Ensure environment variables are read.
require('../ui_config/env');
const path = require('path');
const chalk = require('react-dev-utils/chalk');
const fs = require('fs-extra');
const webpack = require('webpack');
const configFactory = require('../ui_config/webpack.config');
const paths = require('../ui_config/paths');
const checkRequiredFiles = require('react-dev-utils/checkRequiredFiles');
const formatWebpackMessages = require('react-dev-utils/formatWebpackMessages');
const printHostingInstructions = require('react-dev-utils/printHostingInstructions');
const FileSizeReporter = require('react-dev-utils/FileSizeReporter');
const printBuildError = require('react-dev-utils/printBuildError');
const measureFileSizesBeforeBuild =
FileSizeReporter.measureFileSizesBeforeBuild;
const printFileSizesAfterBuild = FileSizeReporter.printFileSizesAfterBuild;
const useYarn = fs.existsSync(paths.yarnLockFile);
// These sizes are pretty large. We'll warn for bundles exceeding them.
const WARN_AFTER_BUNDLE_GZIP_SIZE = 512 * 1024;
const WARN_AFTER_CHUNK_GZIP_SIZE = 1024 * 1024;
const isInteractive = process.stdout.isTTY;
// Warn and crash if required files are missing
if (!checkRequiredFiles([paths.appHtml, paths.appIndexJs])) {
process.exit(1);
}
// Generate configuration
const config = configFactory('production');
// We require that you explicitly set browsers and do not fall back to
// browserslist defaults.
const { checkBrowsers } = require('react-dev-utils/browsersHelper');
checkBrowsers(paths.appPath, isInteractive)
.then(() => {
// First, read the current file sizes in build directory.
// This lets us display how much they changed later.
return measureFileSizesBeforeBuild(paths.appBuild);
})
.then(previousFileSizes => {
// Remove all content but keep the directory so that
// if you're in it, you don't end up in Trash
fs.emptyDirSync(paths.appBuild);
// Merge with the public folder
copyPublicFolder();
// Start the webpack build
return build(previousFileSizes);
})
.then(
({ stats, previousFileSizes, warnings }) => {
if (warnings.length) {
console.log(chalk.yellow('Compiled with warnings.\n'));
console.log(warnings.join('\n\n'));
console.log(
'\nSearch for the ' +
chalk.underline(chalk.yellow('keywords')) +
' to learn more about each warning.'
);
console.log(
'To ignore, add ' +
chalk.cyan('// eslint-disable-next-line') +
' to the line before.\n'
);
} else {
console.log(chalk.green('Compiled successfully.\n'));
}
console.log('File sizes after gzip:\n');
printFileSizesAfterBuild(
stats,
previousFileSizes,
paths.appBuild,
WARN_AFTER_BUNDLE_GZIP_SIZE,
WARN_AFTER_CHUNK_GZIP_SIZE
);
console.log();
const appPackage = require(paths.appPackageJson);
const publicUrl = paths.publicUrl;
const publicPath = config.output.publicPath;
const buildFolder = path.relative(process.cwd(), paths.appBuild);
printHostingInstructions(
appPackage,
publicUrl,
publicPath,
buildFolder,
useYarn
);
},
err => {
const tscCompileOnError = process.env.TSC_COMPILE_ON_ERROR === 'true';
if (tscCompileOnError) {
console.log(
chalk.yellow(
'Compiled with the following type errors (you may want to check these before deploying your app):\n'
)
);
printBuildError(err);
} else {
console.log(chalk.red('Failed to compile.\n'));
printBuildError(err);
process.exit(1);
}
}
)
.catch(err => {
if (err && err.message) {
console.log(err.message);
}
process.exit(1);
});
// Create the production build and print the deployment instructions.
function build(previousFileSizes) {
// We used to support resolving modules according to `NODE_PATH`.
// This now has been deprecated in favor of jsconfig/tsconfig.json
// This lets you use absolute paths in imports inside large monorepos:
if (process.env.NODE_PATH) {
console.log(
chalk.yellow(
'Setting NODE_PATH to resolve modules absolutely has been deprecated in favor of setting baseUrl in jsconfig.json (or tsconfig.json if you are using TypeScript) and will be removed in a future major release of create-react-app.'
)
);
console.log();
}
console.log('Creating an optimized production build...');
const compiler = webpack(config);
return new Promise((resolve, reject) => {
compiler.run((err, stats) => {
let messages;
if (err) {
if (!err.message) {
return reject(err);
}
let errMessage = err.message;
// Add additional information for postcss errors
if (Object.prototype.hasOwnProperty.call(err, 'postcssNode')) {
errMessage +=
'\nCompileError: Begins at CSS selector ' +
err['postcssNode'].selector;
}
messages = formatWebpackMessages({
errors: [errMessage],
warnings: [],
});
} else {
messages = formatWebpackMessages(
stats.toJson({ all: false, warnings: true, errors: true })
);
}
if (messages.errors.length) {
// Only keep the first error. Others are often indicative
// of the same problem, but confuse the reader with noise.
if (messages.errors.length > 1) {
messages.errors.length = 1;
}
return reject(new Error(messages.errors.join('\n\n')));
}
if (
process.env.CI &&
(typeof process.env.CI !== 'string' ||
process.env.CI.toLowerCase() !== 'false') &&
messages.warnings.length
) {
console.log(
chalk.yellow(
'\nTreating warnings as errors because process.env.CI = true.\n' +
'Most CI servers set it automatically.\n'
)
);
return reject(new Error(messages.warnings.join('\n\n')));
}
return resolve({
stats,
previousFileSizes,
warnings: messages.warnings,
});
});
});
}
function copyPublicFolder() {
fs.copySync(paths.appPublic, paths.appBuild, {
dereference: true,
filter: file => file !== paths.appHtml,
});
}

147
konnectd/scripts/start.js Normal file
View File

@@ -0,0 +1,147 @@
'use strict';
// Do this as the first thing so that any code reading it knows the right env.
process.env.BABEL_ENV = 'development';
process.env.NODE_ENV = 'development';
// Makes the script crash on unhandled rejections instead of silently
// ignoring them. In the future, promise rejections that are not handled will
// terminate the Node.js process with a non-zero exit code.
process.on('unhandledRejection', err => {
throw err;
});
// Ensure environment variables are read.
require('../ui_config/env');
const fs = require('fs');
const chalk = require('react-dev-utils/chalk');
const webpack = require('webpack');
const WebpackDevServer = require('webpack-dev-server');
const clearConsole = require('react-dev-utils/clearConsole');
const checkRequiredFiles = require('react-dev-utils/checkRequiredFiles');
const {
choosePort,
createCompiler,
prepareProxy,
prepareUrls,
} = require('react-dev-utils/WebpackDevServerUtils');
const openBrowser = require('react-dev-utils/openBrowser');
const paths = require('../ui_config/paths');
const configFactory = require('../ui_config/webpack.config');
const createDevServerConfig = require('../ui_config/webpackDevServer.config');
const useYarn = fs.existsSync(paths.yarnLockFile);
const isInteractive = process.stdout.isTTY;
// Warn and crash if required files are missing
if (!checkRequiredFiles([paths.appHtml, paths.appIndexJs])) {
process.exit(1);
}
// Tools like Cloud9 rely on this.
const DEFAULT_PORT = parseInt(process.env.PORT, 10) || 3000;
const HOST = process.env.HOST || '0.0.0.0';
if (process.env.HOST) {
console.log(
chalk.cyan(
`Attempting to bind to HOST environment variable: ${chalk.yellow(
chalk.bold(process.env.HOST)
)}`
)
);
console.log(
`If this was unintentional, check that you haven't mistakenly set it in your shell.`
);
console.log(
`Learn more here: ${chalk.yellow('https://bit.ly/CRA-advanced-config')}`
);
console.log();
}
// We require that you explicitly set browsers and do not fall back to
// browserslist defaults.
const { checkBrowsers } = require('react-dev-utils/browsersHelper');
checkBrowsers(paths.appPath, isInteractive)
.then(() => {
// We attempt to use the default port but if it is busy, we offer the user to
// run on a different port. `choosePort()` Promise resolves to the next free port.
return choosePort(HOST, DEFAULT_PORT);
})
.then(port => {
if (port == null) {
// We have not found a port.
return;
}
const config = configFactory('development');
const protocol = process.env.HTTPS === 'true' ? 'https' : 'http';
const appName = require(paths.appPackageJson).name;
const useTypeScript = fs.existsSync(paths.appTsConfig);
const tscCompileOnError = process.env.TSC_COMPILE_ON_ERROR === 'true';
const urls = prepareUrls(protocol, HOST, port);
const devSocket = {
warnings: warnings =>
devServer.sockWrite(devServer.sockets, 'warnings', warnings),
errors: errors =>
devServer.sockWrite(devServer.sockets, 'errors', errors),
};
// Create a webpack compiler that is configured with custom messages.
const compiler = createCompiler({
appName,
config,
devSocket,
urls,
useYarn,
useTypeScript,
tscCompileOnError,
webpack,
});
// Load proxy config
const proxySetting = require(paths.appPackageJson).proxy;
const proxyConfig = prepareProxy(proxySetting, paths.appPublic);
// Serve webpack assets generated by the compiler over a web server.
const serverConfig = createDevServerConfig(
proxyConfig,
urls.lanUrlForConfig
);
const devServer = new WebpackDevServer(compiler, serverConfig);
// Launch WebpackDevServer.
devServer.listen(port, HOST, err => {
if (err) {
return console.log(err);
}
if (isInteractive) {
clearConsole();
}
// We used to support resolving modules according to `NODE_PATH`.
// This now has been deprecated in favor of jsconfig/tsconfig.json
// This lets you use absolute paths in imports inside large monorepos:
if (process.env.NODE_PATH) {
console.log(
chalk.yellow(
'Setting NODE_PATH to resolve modules absolutely has been deprecated in favor of setting baseUrl in jsconfig.json (or tsconfig.json if you are using TypeScript) and will be removed in a future major release of create-react-app.'
)
);
console.log();
}
console.log(chalk.cyan('Starting the development server...\n'));
openBrowser(urls.localUrlForBrowser);
});
['SIGINT', 'SIGTERM'].forEach(function(sig) {
process.on(sig, function() {
devServer.close();
process.exit();
});
});
})
.catch(err => {
if (err && err.message) {
console.log(err.message);
}
process.exit(1);
});

53
konnectd/scripts/test.js Normal file
View File

@@ -0,0 +1,53 @@
'use strict';
// Do this as the first thing so that any code reading it knows the right env.
process.env.BABEL_ENV = 'test';
process.env.NODE_ENV = 'test';
process.env.PUBLIC_URL = '';
// Makes the script crash on unhandled rejections instead of silently
// ignoring them. In the future, promise rejections that are not handled will
// terminate the Node.js process with a non-zero exit code.
process.on('unhandledRejection', err => {
throw err;
});
// Ensure environment variables are read.
require('../ui_config/env');
const jest = require('jest');
const execSync = require('child_process').execSync;
let argv = process.argv.slice(2);
function isInGitRepository() {
try {
execSync('git rev-parse --is-inside-work-tree', { stdio: 'ignore' });
return true;
} catch (e) {
return false;
}
}
function isInMercurialRepository() {
try {
execSync('hg --cwd . root', { stdio: 'ignore' });
return true;
} catch (e) {
return false;
}
}
// Watch unless on CI or explicitly running all tests
if (
!process.env.CI &&
argv.indexOf('--watchAll') === -1 &&
argv.indexOf('--watchAll=false') === -1
) {
// https://github.com/facebook/create-react-app/issues/5210
const hasSourceControl = isInGitRepository() || isInMercurialRepository();
argv.push(hasSourceControl ? '--watch' : '--watchAll');
}
jest.run(argv);

65
konnectd/ui/Makefile Normal file
View File

@@ -0,0 +1,65 @@
# Tools
YARN ?= yarn
# Variables
VERSION ?= $(shell git describe --tags --always --dirty --match=v* 2>/dev/null | sed 's/^v//' || \
cat $(CURDIR)/../.version 2> /dev/null || echo 0.0.0-unreleased)
# Build
.PHONY: all
all: build
.PHONY: build
build: vendor | src i18n ; $(info building identifier Webapp ...) @
@rm -rf build
REACT_APP_KOPANO_BUILD="${VERSION}" $(YARN) run build
.PHONY: src
src:
@$(MAKE) -C src
.PHONY: i18n
i18n: vendor
@$(MAKE) -C i18n
.PHONY: lint
lint: vendor ; $(info running eslint ...) @
@$(YARN) eslint . --cache && echo "eslint: no lint errors"
.PHONY: lint-checkstyle
lint-checkstyle: vendor ; $(info running eslint checkstyle ...) @
@mkdir -p ../test
$(YARN) eslint -f checkstyle -o ../test/tests.eslint.xml . || true
# Yarn
.PHONY: vendor
vendor: .yarninstall
.yarninstall: package.json ; $(info getting depdencies with yarn ...) @
@$(YARN) install --silent
@touch $@
# Stuff
.PHONY: licenses
licenses:
echo "## Konnect identifier webapp\n"
@$(YARN) run -s licenses
.PHONY: clean ; $(info cleaning identifier Webapp ...) @
clean:
$(YARN) cache clean
@rm -rf build
@rm -rf node_modules
@rm -f .yarninstall
@$(MAKE) -C src clean
.PHONY: version
version:
@echo $(VERSION)

52
konnectd/ui/i18n/Makefile Normal file
View File

@@ -0,0 +1,52 @@
# Tools
YARN ?= yarn
MSGMERGE ?= msgmerge
MSGFMT ?= msgfmt
# Variables
POT = konnect-identifier.pot
POS = $(wildcard *.po)
# Translations
.PHONY: build
build: json
.PHONY: extract
extract: pot
.PHONY: i18n/src/messages.json
i18n/src/messages.json:
$(YARN) react-intl-cra './src/**/*.{js,jsx}' -o $@
.PHONY: pot
pot: i18n/src/messages.json
$(YARN) rip json2pot './i18n/src/**/*.json' \
-o ./i18n/$(POT) \
-c 'id'
.PHONY: json
json: i18n/src/messages.json
$(YARN) rip po2json './i18n/*.po' \
-m './i18n/src/**/*.json' \
-o './src/locales/' \
-c 'id' \
--indentation=2
.PHONY: merge
merge: $(POS)
.PHONY: stats
stats:
$(foreach po, $(POS), $(shell $(MSGFMT) -v --statistics $(po)))
@- true
$(POS): FORCE $(POT)
$(MSGMERGE) -U \
--backup=none \
--no-wrap \
$@ $(POT)
FORCE:

309
konnectd/ui/i18n/de.po Normal file
View File

@@ -0,0 +1,309 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: 2019-05-09T14:09:27.715Z\n"
"PO-Revision-Date: 2019-05-08 18:23+0200\n"
"Last-Translator: Simon Eisenmann <simon@longsleep.org>\n"
"Language-Team: German <http://translate.kopano.io/projects/kopano/konnect/de/>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Poedit 1.8.7.1\n"
#. [konnect.chooseaccount.useOther.persona.label]
#. defaultMessage is:
#. ?
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.persona.label"
msgid "?"
msgstr "?"
#. [konnect.scopeDescription.aliasBasic]
#. defaultMessage is:
#. Access your basic account information
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.aliasBasic"
msgid "Access your basic account information"
msgstr "Zugriff auf Ihre grundlegenden Benutzerinformationen"
#. [konnect.consent.allowButton.label]
#. defaultMessage is:
#. Allow
#: i18n/src/messages.json
msgctxt "konnect.consent.allowButton.label"
msgid "Allow"
msgstr "Einverstanden"
#. [konnect.consent.question]
#. defaultMessage is:
#. Allow {clientDisplayName} to do this?
#: i18n/src/messages.json
msgctxt "konnect.consent.question"
msgid "Allow {clientDisplayName} to do this?"
msgstr "{clientDisplayName} den Zugriff gestatten?"
#. [konnect.consent.consequence]
#. defaultMessage is:
#. By clicking Allow, you allow this app to use your information.
#: i18n/src/messages.json
msgctxt "konnect.consent.consequence"
msgid "By clicking Allow, you allow this app to use your information."
msgstr "Wenn Sie Einverstanden klicken, erhält die App Zugriff auf Ihre Informationen."
#. [konnect.consent.cancelButton.label]
#. defaultMessage is:
#. Cancel
#: i18n/src/messages.json
msgctxt "konnect.consent.cancelButton.label"
msgid "Cancel"
msgstr "Abbrechen"
#. [konnect.chooseaccount.headline]
#. defaultMessage is:
#. Choose an account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.headline"
msgid "Choose an account"
msgstr "Konto auswählen"
#. [konnect.consent.tooltip.client]
#. defaultMessage is:
#. Clicking "Allow" will redirect you to: {redirectURI}
#: i18n/src/messages.json
msgctxt "konnect.consent.tooltip.client"
msgid "Clicking \"Allow\" will redirect you to: {redirectURI}"
msgstr "Wenn Sie \"Einverstanden\" klicken werden Sie zu {redirectURI} weitergeleitet"
#. [konnect.error.login.validate.missingPassword]
#. defaultMessage is:
#. Enter a password
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingPassword"
msgid "Enter a password"
msgstr "Geben Sie ein Passwort ein"
#. [konnect.error.login.validate.missingUsername]
#. defaultMessage is:
#. Enter an username
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingUsername"
msgid "Enter an username"
msgstr "Geben Sie einen Benutzername ein"
#. [konnect.loading.error.headline]
#. defaultMessage is:
#. Failed to connect to server
#: i18n/src/messages.json
msgctxt "konnect.loading.error.headline"
msgid "Failed to connect to server"
msgstr "Verbindung zum Server fehlgeschlagen"
#. [konnect.goodbye.headline]
#. defaultMessage is:
#. Goodbye
#: i18n/src/messages.json
msgctxt "konnect.goodbye.headline"
msgid "Goodbye"
msgstr "Bis bald"
#. [konnect.goodbye.confirm.headline]
#. defaultMessage is:
#. Hello {displayName}
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.headline"
msgid "Hello {displayName}"
msgstr "Hallo {displayName}"
#. [konnect.consent.headline]
#. defaultMessage is:
#. Hi {displayName}
#: i18n/src/messages.json
msgctxt "konnect.consent.headline"
msgid "Hi {displayName}"
msgstr "Hi {displayName}"
#. [konnect.scopeDescription.offlineAccess]
#. defaultMessage is:
#. Keep the allowed access persistently and forever
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.offlineAccess"
msgid "Keep the allowed access persistently and forever"
msgstr "Dauerhaften Zugriff (läuft nicht ab)"
#. [konnect.error.login.failed]
#. defaultMessage is:
#. Logon failed. Please verify your credentials and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.login.failed"
msgid "Logon failed. Please verify your credentials and try again."
msgstr "Anmeldung fehlgeschlagen. Bitte überprüfen Sie Ihre Eingabe und versuchen Sie es noch einmal."
#. [konnet.error.http.networkError]
#. defaultMessage is:
#. Network error. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnet.error.http.networkError"
msgid "Network error. Please check your connection and try again."
msgstr "Netzwerkfehler. Bitte prüfen Sie Ihre Verbindung und versuchen Sie es noch einmal."
#. [konnect.login.nextButton.label]
#. defaultMessage is:
#. Next
#: i18n/src/messages.json
msgctxt "konnect.login.nextButton.label"
msgid "Next"
msgstr "Weiter"
#. [konnect.login.passwordField.label]
#. defaultMessage is:
#. Password
#: i18n/src/messages.json
msgctxt "konnect.login.passwordField.label"
msgid "Password"
msgstr "Passwort"
#. [konnect.goodbye.message.confirm]
#. defaultMessage is:
#. Press the button below, to sign out from your Kopano account now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.confirm"
msgid "Press the button below, to sign out from your Kopano account now."
msgstr "Klicken Sie auf die Schaltfläche unten um sich aus Ihrem Kopano Konto abzumelden."
#. [konnect.login.retryButton.label]
#. defaultMessage is:
#. Retry
#: i18n/src/messages.json
msgctxt "konnect.login.retryButton.label"
msgid "Retry"
msgstr "Wiederholen"
#. [konnect.scopeDescription.scope]
#. defaultMessage is:
#. Scope: {scope}
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.scope"
msgid "Scope: {scope}"
msgstr "Geltungsbereich: {scope}"
#. [konnect.login.headline]
#. defaultMessage is:
#. Sign in
#: i18n/src/messages.json
msgctxt "konnect.login.headline"
msgid "Sign in"
msgstr "Anmelden"
#. [konnect.goodbye.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.signoutButton.label"
msgid "Sign out"
msgstr "Abmelden"
#. [konnect.welcome.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.welcome.signoutButton.label"
msgid "Sign out"
msgstr "Abmelden"
#. [konnect.error.http.unexpectedResponseStatus]
#. defaultMessage is:
#. Unexpected HTTP response: {status}. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseStatus"
msgid "Unexpected HTTP response: {status}. Please check your connection and try again."
msgstr "Unerwartete HTTP-Antwort: {status}. Bitte prüfen Sie Ihre Verbindung und versuchen Sie es noch einmal."
#. [konnect.error.http.unexpectedResponseState]
#. defaultMessage is:
#. Unexpected response state: {state}
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseState"
msgid "Unexpected response state: {state}"
msgstr "Unerwarteter Antwort-Status: {state}"
#. [konnect.chooseaccount.useOther.label]
#. defaultMessage is:
#. Use another account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.label"
msgid "Use another account"
msgstr "Anderes Konto"
#. [konnect.login.usernameField.label]
#. defaultMessage is:
#. Username
#: i18n/src/messages.json
msgctxt "konnect.login.usernameField.label"
msgid "Username"
msgstr "Benutzername"
#. [konnect.welcome.headline]
#. defaultMessage is:
#. Welcome {displayName}
#: i18n/src/messages.json
msgctxt "konnect.welcome.headline"
msgid "Welcome {displayName}"
msgstr "Willkommen {displayName}"
#. [konnect.welcome.message]
#. defaultMessage is:
#. You are signed in - awesome!
#: i18n/src/messages.json
msgctxt "konnect.welcome.message"
msgid "You are signed in - awesome!"
msgstr "Sie sind angemeldet - super!"
#. [konnect.goodbye.message.close]
#. defaultMessage is:
#. You can close this window now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.close"
msgid "You can close this window now."
msgstr "Sie können dieses Fenster jetzt schließen."
#. [konnect.goodbye.confirm.subHeader]
#. defaultMessage is:
#. please confirm sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.subHeader"
msgid "please confirm sign out"
msgstr "Bitte bestätigen Sie, dass Sie sich abmelden möchten"
#. [konnect.chooseaccount.subHeader]
#. defaultMessage is:
#. to sign in to Kopano
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.subHeader"
msgid "to sign in to Kopano"
msgstr "um sich bei Kopano anzumelden"
#. [konnect.login.subHeader]
#. defaultMessage is:
#. with your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.login.subHeader"
msgid "with your Kopano account"
msgstr "mit Ihrem Kopano Konto"
#. [konnect.goodbye.subHeader]
#. defaultMessage is:
#. you have been signed out from your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.goodbye.subHeader"
msgid "you have been signed out from your Kopano account"
msgstr "sie sind jetzt von Ihrem Kopano Konto abgemeldet"
#. [konnect.consent.message]
#. defaultMessage is:
#. {clientDisplayName} wants to
#: i18n/src/messages.json
msgctxt "konnect.consent.message"
msgid "{clientDisplayName} wants to"
msgstr "{clientDisplayName} möchte"

309
konnectd/ui/i18n/es.po Normal file
View File

@@ -0,0 +1,309 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2019-05-09T14:09:27.715Z\n"
"PO-Revision-Date: 2018-10-30T16:08:29.860Z\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: react-intl-po\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. [konnect.chooseaccount.useOther.persona.label]
#. defaultMessage is:
#. ?
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.persona.label"
msgid "?"
msgstr ""
#. [konnect.scopeDescription.aliasBasic]
#. defaultMessage is:
#. Access your basic account information
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.aliasBasic"
msgid "Access your basic account information"
msgstr ""
#. [konnect.consent.allowButton.label]
#. defaultMessage is:
#. Allow
#: i18n/src/messages.json
msgctxt "konnect.consent.allowButton.label"
msgid "Allow"
msgstr ""
#. [konnect.consent.question]
#. defaultMessage is:
#. Allow {clientDisplayName} to do this?
#: i18n/src/messages.json
msgctxt "konnect.consent.question"
msgid "Allow {clientDisplayName} to do this?"
msgstr ""
#. [konnect.consent.consequence]
#. defaultMessage is:
#. By clicking Allow, you allow this app to use your information.
#: i18n/src/messages.json
msgctxt "konnect.consent.consequence"
msgid "By clicking Allow, you allow this app to use your information."
msgstr ""
#. [konnect.consent.cancelButton.label]
#. defaultMessage is:
#. Cancel
#: i18n/src/messages.json
msgctxt "konnect.consent.cancelButton.label"
msgid "Cancel"
msgstr ""
#. [konnect.chooseaccount.headline]
#. defaultMessage is:
#. Choose an account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.headline"
msgid "Choose an account"
msgstr ""
#. [konnect.consent.tooltip.client]
#. defaultMessage is:
#. Clicking "Allow" will redirect you to: {redirectURI}
#: i18n/src/messages.json
msgctxt "konnect.consent.tooltip.client"
msgid "Clicking \"Allow\" will redirect you to: {redirectURI}"
msgstr ""
#. [konnect.error.login.validate.missingPassword]
#. defaultMessage is:
#. Enter a password
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingPassword"
msgid "Enter a password"
msgstr ""
#. [konnect.error.login.validate.missingUsername]
#. defaultMessage is:
#. Enter an username
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingUsername"
msgid "Enter an username"
msgstr ""
#. [konnect.loading.error.headline]
#. defaultMessage is:
#. Failed to connect to server
#: i18n/src/messages.json
msgctxt "konnect.loading.error.headline"
msgid "Failed to connect to server"
msgstr ""
#. [konnect.goodbye.headline]
#. defaultMessage is:
#. Goodbye
#: i18n/src/messages.json
msgctxt "konnect.goodbye.headline"
msgid "Goodbye"
msgstr ""
#. [konnect.goodbye.confirm.headline]
#. defaultMessage is:
#. Hello {displayName}
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.headline"
msgid "Hello {displayName}"
msgstr ""
#. [konnect.consent.headline]
#. defaultMessage is:
#. Hi {displayName}
#: i18n/src/messages.json
msgctxt "konnect.consent.headline"
msgid "Hi {displayName}"
msgstr ""
#. [konnect.scopeDescription.offlineAccess]
#. defaultMessage is:
#. Keep the allowed access persistently and forever
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.offlineAccess"
msgid "Keep the allowed access persistently and forever"
msgstr ""
#. [konnect.error.login.failed]
#. defaultMessage is:
#. Logon failed. Please verify your credentials and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.login.failed"
msgid "Logon failed. Please verify your credentials and try again."
msgstr ""
#. [konnet.error.http.networkError]
#. defaultMessage is:
#. Network error. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnet.error.http.networkError"
msgid "Network error. Please check your connection and try again."
msgstr ""
#. [konnect.login.nextButton.label]
#. defaultMessage is:
#. Next
#: i18n/src/messages.json
msgctxt "konnect.login.nextButton.label"
msgid "Next"
msgstr ""
#. [konnect.login.passwordField.label]
#. defaultMessage is:
#. Password
#: i18n/src/messages.json
msgctxt "konnect.login.passwordField.label"
msgid "Password"
msgstr ""
#. [konnect.goodbye.message.confirm]
#. defaultMessage is:
#. Press the button below, to sign out from your Kopano account now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.confirm"
msgid "Press the button below, to sign out from your Kopano account now."
msgstr ""
#. [konnect.login.retryButton.label]
#. defaultMessage is:
#. Retry
#: i18n/src/messages.json
msgctxt "konnect.login.retryButton.label"
msgid "Retry"
msgstr ""
#. [konnect.scopeDescription.scope]
#. defaultMessage is:
#. Scope: {scope}
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.scope"
msgid "Scope: {scope}"
msgstr ""
#. [konnect.login.headline]
#. defaultMessage is:
#. Sign in
#: i18n/src/messages.json
msgctxt "konnect.login.headline"
msgid "Sign in"
msgstr ""
#. [konnect.goodbye.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.signoutButton.label"
msgid "Sign out"
msgstr ""
#. [konnect.welcome.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.welcome.signoutButton.label"
msgid "Sign out"
msgstr ""
#. [konnect.error.http.unexpectedResponseStatus]
#. defaultMessage is:
#. Unexpected HTTP response: {status}. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseStatus"
msgid "Unexpected HTTP response: {status}. Please check your connection and try again."
msgstr ""
#. [konnect.error.http.unexpectedResponseState]
#. defaultMessage is:
#. Unexpected response state: {state}
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseState"
msgid "Unexpected response state: {state}"
msgstr ""
#. [konnect.chooseaccount.useOther.label]
#. defaultMessage is:
#. Use another account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.label"
msgid "Use another account"
msgstr ""
#. [konnect.login.usernameField.label]
#. defaultMessage is:
#. Username
#: i18n/src/messages.json
msgctxt "konnect.login.usernameField.label"
msgid "Username"
msgstr ""
#. [konnect.welcome.headline]
#. defaultMessage is:
#. Welcome {displayName}
#: i18n/src/messages.json
msgctxt "konnect.welcome.headline"
msgid "Welcome {displayName}"
msgstr ""
#. [konnect.welcome.message]
#. defaultMessage is:
#. You are signed in - awesome!
#: i18n/src/messages.json
msgctxt "konnect.welcome.message"
msgid "You are signed in - awesome!"
msgstr ""
#. [konnect.goodbye.message.close]
#. defaultMessage is:
#. You can close this window now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.close"
msgid "You can close this window now."
msgstr ""
#. [konnect.goodbye.confirm.subHeader]
#. defaultMessage is:
#. please confirm sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.subHeader"
msgid "please confirm sign out"
msgstr ""
#. [konnect.chooseaccount.subHeader]
#. defaultMessage is:
#. to sign in to Kopano
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.subHeader"
msgid "to sign in to Kopano"
msgstr ""
#. [konnect.login.subHeader]
#. defaultMessage is:
#. with your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.login.subHeader"
msgid "with your Kopano account"
msgstr ""
#. [konnect.goodbye.subHeader]
#. defaultMessage is:
#. you have been signed out from your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.goodbye.subHeader"
msgid "you have been signed out from your Kopano account"
msgstr ""
#. [konnect.consent.message]
#. defaultMessage is:
#. {clientDisplayName} wants to
#: i18n/src/messages.json
msgctxt "konnect.consent.message"
msgid "{clientDisplayName} wants to"
msgstr ""

309
konnectd/ui/i18n/fr.po Normal file
View File

@@ -0,0 +1,309 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2019-05-09T14:09:27.715Z\n"
"PO-Revision-Date: 2019-08-26 15:43+0000\n"
"Last-Translator: Dominique <dperessoni@alternatiq.com>\n"
"Language-Team: French <http://translate.kopano.io/projects/kopano/konnect/fr/>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 2.4\n"
#. [konnect.chooseaccount.useOther.persona.label]
#. defaultMessage is:
#. ?
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.persona.label"
msgid "?"
msgstr "?"
#. [konnect.scopeDescription.aliasBasic]
#. defaultMessage is:
#. Access your basic account information
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.aliasBasic"
msgid "Access your basic account information"
msgstr "Consulter les informations de base de votre compte"
#. [konnect.consent.allowButton.label]
#. defaultMessage is:
#. Allow
#: i18n/src/messages.json
msgctxt "konnect.consent.allowButton.label"
msgid "Allow"
msgstr "Autoriser"
#. [konnect.consent.question]
#. defaultMessage is:
#. Allow {clientDisplayName} to do this?
#: i18n/src/messages.json
msgctxt "konnect.consent.question"
msgid "Allow {clientDisplayName} to do this?"
msgstr "Autoriser {clientDisplayName} à faire cela ?"
#. [konnect.consent.consequence]
#. defaultMessage is:
#. By clicking Allow, you allow this app to use your information.
#: i18n/src/messages.json
msgctxt "konnect.consent.consequence"
msgid "By clicking Allow, you allow this app to use your information."
msgstr "En cliquant, vous autoriser l'app à accéder à vos informations."
#. [konnect.consent.cancelButton.label]
#. defaultMessage is:
#. Cancel
#: i18n/src/messages.json
msgctxt "konnect.consent.cancelButton.label"
msgid "Cancel"
msgstr "Annuler"
#. [konnect.chooseaccount.headline]
#. defaultMessage is:
#. Choose an account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.headline"
msgid "Choose an account"
msgstr "Choisir un compte"
#. [konnect.consent.tooltip.client]
#. defaultMessage is:
#. Clicking "Allow" will redirect you to: {redirectURI}
#: i18n/src/messages.json
msgctxt "konnect.consent.tooltip.client"
msgid "Clicking \"Allow\" will redirect you to: {redirectURI}"
msgstr "En cliquant \"Autoriser\" vous serez redirigé vers : {redirectURI}"
#. [konnect.error.login.validate.missingPassword]
#. defaultMessage is:
#. Enter a password
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingPassword"
msgid "Enter a password"
msgstr "Saisir un mot de passe"
#. [konnect.error.login.validate.missingUsername]
#. defaultMessage is:
#. Enter an username
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingUsername"
msgid "Enter an username"
msgstr "Saisir un identifiant"
#. [konnect.loading.error.headline]
#. defaultMessage is:
#. Failed to connect to server
#: i18n/src/messages.json
msgctxt "konnect.loading.error.headline"
msgid "Failed to connect to server"
msgstr "La connexion au serveur a échoué"
#. [konnect.goodbye.headline]
#. defaultMessage is:
#. Goodbye
#: i18n/src/messages.json
msgctxt "konnect.goodbye.headline"
msgid "Goodbye"
msgstr "Au revoir"
#. [konnect.goodbye.confirm.headline]
#. defaultMessage is:
#. Hello {displayName}
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.headline"
msgid "Hello {displayName}"
msgstr "Bonjour {displayName}"
#. [konnect.consent.headline]
#. defaultMessage is:
#. Hi {displayName}
#: i18n/src/messages.json
msgctxt "konnect.consent.headline"
msgid "Hi {displayName}"
msgstr "Bonjour {displayName}"
#. [konnect.scopeDescription.offlineAccess]
#. defaultMessage is:
#. Keep the allowed access persistently and forever
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.offlineAccess"
msgid "Keep the allowed access persistently and forever"
msgstr "Conserver les autorisations d'accès à l'avenir"
#. [konnect.error.login.failed]
#. defaultMessage is:
#. Logon failed. Please verify your credentials and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.login.failed"
msgid "Logon failed. Please verify your credentials and try again."
msgstr "Echec de connexion. Vérifier vos identifiants et essayer à nouveau."
#. [konnet.error.http.networkError]
#. defaultMessage is:
#. Network error. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnet.error.http.networkError"
msgid "Network error. Please check your connection and try again."
msgstr "Erreur réseau. Vérifier votre connexion, et réessayer."
#. [konnect.login.nextButton.label]
#. defaultMessage is:
#. Next
#: i18n/src/messages.json
msgctxt "konnect.login.nextButton.label"
msgid "Next"
msgstr "Suivant"
#. [konnect.login.passwordField.label]
#. defaultMessage is:
#. Password
#: i18n/src/messages.json
msgctxt "konnect.login.passwordField.label"
msgid "Password"
msgstr "Mot de passe"
#. [konnect.goodbye.message.confirm]
#. defaultMessage is:
#. Press the button below, to sign out from your Kopano account now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.confirm"
msgid "Press the button below, to sign out from your Kopano account now."
msgstr "Cliquer le bouton ci-dessous, pour quitter Kopano."
#. [konnect.login.retryButton.label]
#. defaultMessage is:
#. Retry
#: i18n/src/messages.json
msgctxt "konnect.login.retryButton.label"
msgid "Retry"
msgstr "Réessayer"
#. [konnect.scopeDescription.scope]
#. defaultMessage is:
#. Scope: {scope}
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.scope"
msgid "Scope: {scope}"
msgstr "Portée : {scope}"
#. [konnect.login.headline]
#. defaultMessage is:
#. Sign in
#: i18n/src/messages.json
msgctxt "konnect.login.headline"
msgid "Sign in"
msgstr "Identification"
#. [konnect.goodbye.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.signoutButton.label"
msgid "Sign out"
msgstr "Quitter"
#. [konnect.welcome.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.welcome.signoutButton.label"
msgid "Sign out"
msgstr "Quitter"
#. [konnect.error.http.unexpectedResponseStatus]
#. defaultMessage is:
#. Unexpected HTTP response: {status}. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseStatus"
msgid "Unexpected HTTP response: {status}. Please check your connection and try again."
msgstr "Erreur HTTP inattendue : {status}. Vérifier votre connexion et réessayer."
#. [konnect.error.http.unexpectedResponseState]
#. defaultMessage is:
#. Unexpected response state: {state}
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseState"
msgid "Unexpected response state: {state}"
msgstr "Erreur d'état inattendue : {state}"
#. [konnect.chooseaccount.useOther.label]
#. defaultMessage is:
#. Use another account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.label"
msgid "Use another account"
msgstr "Utiliser un autre compte"
#. [konnect.login.usernameField.label]
#. defaultMessage is:
#. Username
#: i18n/src/messages.json
msgctxt "konnect.login.usernameField.label"
msgid "Username"
msgstr "Utilisateur"
#. [konnect.welcome.headline]
#. defaultMessage is:
#. Welcome {displayName}
#: i18n/src/messages.json
msgctxt "konnect.welcome.headline"
msgid "Welcome {displayName}"
msgstr "Bienvenue {displayName}"
#. [konnect.welcome.message]
#. defaultMessage is:
#. You are signed in - awesome!
#: i18n/src/messages.json
msgctxt "konnect.welcome.message"
msgid "You are signed in - awesome!"
msgstr "Magnifique - Vous êtes connecté !"
#. [konnect.goodbye.message.close]
#. defaultMessage is:
#. You can close this window now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.close"
msgid "You can close this window now."
msgstr "Vous pouvez fermer cette fenêtre à présent."
#. [konnect.goodbye.confirm.subHeader]
#. defaultMessage is:
#. please confirm sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.subHeader"
msgid "please confirm sign out"
msgstr "Confirmer votre déconnexion"
#. [konnect.chooseaccount.subHeader]
#. defaultMessage is:
#. to sign in to Kopano
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.subHeader"
msgid "to sign in to Kopano"
msgstr "pour vous authentifier dans Kopano"
#. [konnect.login.subHeader]
#. defaultMessage is:
#. with your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.login.subHeader"
msgid "with your Kopano account"
msgstr "avec vos identifiants Kopano"
#. [konnect.goodbye.subHeader]
#. defaultMessage is:
#. you have been signed out from your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.goodbye.subHeader"
msgid "you have been signed out from your Kopano account"
msgstr "vous avez été déconnecté de Kopano"
#. [konnect.consent.message]
#. defaultMessage is:
#. {clientDisplayName} wants to
#: i18n/src/messages.json
msgctxt "konnect.consent.message"
msgid "{clientDisplayName} wants to"
msgstr "{clientDisplayName} souhaite"

309
konnectd/ui/i18n/hi.po Normal file
View File

@@ -0,0 +1,309 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2019-05-09T14:09:27.715Z\n"
"PO-Revision-Date: 2019-09-04 09:55+0000\n"
"Last-Translator: Mayank <m.dabhi@kopano.com>\n"
"Language-Team: Hindi <http://translate.kopano.io/projects/kopano/konnect/hi/>\n"
"Language: hi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2.4\n"
#. [konnect.chooseaccount.useOther.persona.label]
#. defaultMessage is:
#. ?
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.persona.label"
msgid "?"
msgstr "?"
#. [konnect.scopeDescription.aliasBasic]
#. defaultMessage is:
#. Access your basic account information
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.aliasBasic"
msgid "Access your basic account information"
msgstr "अपनी मूल खाता जानकारी देखे"
#. [konnect.consent.allowButton.label]
#. defaultMessage is:
#. Allow
#: i18n/src/messages.json
msgctxt "konnect.consent.allowButton.label"
msgid "Allow"
msgstr "अनुमति दीजिये"
#. [konnect.consent.question]
#. defaultMessage is:
#. Allow {clientDisplayName} to do this?
#: i18n/src/messages.json
msgctxt "konnect.consent.question"
msgid "Allow {clientDisplayName} to do this?"
msgstr "क्या {clientDisplayName} को ये करने की अनुमति देना चाहते है?"
#. [konnect.consent.consequence]
#. defaultMessage is:
#. By clicking Allow, you allow this app to use your information.
#: i18n/src/messages.json
msgctxt "konnect.consent.consequence"
msgid "By clicking Allow, you allow this app to use your information."
msgstr "अनुमति पर क्लिक करके, आप इस एप्लिकेशन को आपकी जानकारी का उपयोग करने की अनुमति देते हैं."
#. [konnect.consent.cancelButton.label]
#. defaultMessage is:
#. Cancel
#: i18n/src/messages.json
msgctxt "konnect.consent.cancelButton.label"
msgid "Cancel"
msgstr "रद्द करें"
#. [konnect.chooseaccount.headline]
#. defaultMessage is:
#. Choose an account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.headline"
msgid "Choose an account"
msgstr "खाता चुनें"
#. [konnect.consent.tooltip.client]
#. defaultMessage is:
#. Clicking "Allow" will redirect you to: {redirectURI}
#: i18n/src/messages.json
msgctxt "konnect.consent.tooltip.client"
msgid "Clicking \"Allow\" will redirect you to: {redirectURI}"
msgstr "\"अनुमति\" पर क्लिक करने से आपको {redirecturI} पे पुनर्निर्देशित किया जायेगा"
#. [konnect.error.login.validate.missingPassword]
#. defaultMessage is:
#. Enter a password
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingPassword"
msgid "Enter a password"
msgstr "पासवर्ड डालिए"
#. [konnect.error.login.validate.missingUsername]
#. defaultMessage is:
#. Enter an username
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingUsername"
msgid "Enter an username"
msgstr "उपयोगकर्ता नाम डालिये"
#. [konnect.loading.error.headline]
#. defaultMessage is:
#. Failed to connect to server
#: i18n/src/messages.json
msgctxt "konnect.loading.error.headline"
msgid "Failed to connect to server"
msgstr "सर्वर से कनेक्ट करने में विफल"
#. [konnect.goodbye.headline]
#. defaultMessage is:
#. Goodbye
#: i18n/src/messages.json
msgctxt "konnect.goodbye.headline"
msgid "Goodbye"
msgstr "अलविदा"
#. [konnect.goodbye.confirm.headline]
#. defaultMessage is:
#. Hello {displayName}
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.headline"
msgid "Hello {displayName}"
msgstr "नमस्ते {displayName}"
#. [konnect.consent.headline]
#. defaultMessage is:
#. Hi {displayName}
#: i18n/src/messages.json
msgctxt "konnect.consent.headline"
msgid "Hi {displayName}"
msgstr "नमस्ते {displayName}"
#. [konnect.scopeDescription.offlineAccess]
#. defaultMessage is:
#. Keep the allowed access persistently and forever
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.offlineAccess"
msgid "Keep the allowed access persistently and forever"
msgstr "अनुमत पहुंच को लगातार और हमेशा बनाए रखें"
#. [konnect.error.login.failed]
#. defaultMessage is:
#. Logon failed. Please verify your credentials and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.login.failed"
msgid "Logon failed. Please verify your credentials and try again."
msgstr "लोगऑन नाकाम रहा. कृपया अपने क्रेडेंशियल्स जांचे और पुनः प्रयास करें."
#. [konnet.error.http.networkError]
#. defaultMessage is:
#. Network error. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnet.error.http.networkError"
msgid "Network error. Please check your connection and try again."
msgstr "नेटवर्क त्रुटि। कृपया अपने संपर्क की जांच करे और फिर से प्रयास करें."
#. [konnect.login.nextButton.label]
#. defaultMessage is:
#. Next
#: i18n/src/messages.json
msgctxt "konnect.login.nextButton.label"
msgid "Next"
msgstr "अगला"
#. [konnect.login.passwordField.label]
#. defaultMessage is:
#. Password
#: i18n/src/messages.json
msgctxt "konnect.login.passwordField.label"
msgid "Password"
msgstr "पासवर्ड"
#. [konnect.goodbye.message.confirm]
#. defaultMessage is:
#. Press the button below, to sign out from your Kopano account now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.confirm"
msgid "Press the button below, to sign out from your Kopano account now."
msgstr "अपने Kopano खाते से साइन आउट करने के लिए नीचे दिए गए बटन को दबाएं."
#. [konnect.login.retryButton.label]
#. defaultMessage is:
#. Retry
#: i18n/src/messages.json
msgctxt "konnect.login.retryButton.label"
msgid "Retry"
msgstr "पुन: प्रयास करें"
#. [konnect.scopeDescription.scope]
#. defaultMessage is:
#. Scope: {scope}
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.scope"
msgid "Scope: {scope}"
msgstr "क्षेत्र: {scope}"
#. [konnect.login.headline]
#. defaultMessage is:
#. Sign in
#: i18n/src/messages.json
msgctxt "konnect.login.headline"
msgid "Sign in"
msgstr "साइन इन"
#. [konnect.goodbye.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.signoutButton.label"
msgid "Sign out"
msgstr "साइन आउट"
#. [konnect.welcome.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.welcome.signoutButton.label"
msgid "Sign out"
msgstr "साइन आउट"
#. [konnect.error.http.unexpectedResponseStatus]
#. defaultMessage is:
#. Unexpected HTTP response: {status}. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseStatus"
msgid "Unexpected HTTP response: {status}. Please check your connection and try again."
msgstr "अनपेक्षित HTTP प्रतिक्रिया: {status}. कृपया अपने संपर्क की जांच करे और फिर से प्रयास करें."
#. [konnect.error.http.unexpectedResponseState]
#. defaultMessage is:
#. Unexpected response state: {state}
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseState"
msgid "Unexpected response state: {state}"
msgstr "अनपेक्षित प्रतिक्रिया अवस्था: {state}"
#. [konnect.chooseaccount.useOther.label]
#. defaultMessage is:
#. Use another account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.label"
msgid "Use another account"
msgstr "दूसरे खाते का उपयोग करें"
#. [konnect.login.usernameField.label]
#. defaultMessage is:
#. Username
#: i18n/src/messages.json
msgctxt "konnect.login.usernameField.label"
msgid "Username"
msgstr "उपयोगकर्ता नाम"
#. [konnect.welcome.headline]
#. defaultMessage is:
#. Welcome {displayName}
#: i18n/src/messages.json
msgctxt "konnect.welcome.headline"
msgid "Welcome {displayName}"
msgstr "स्वागत हे {displayName}"
#. [konnect.welcome.message]
#. defaultMessage is:
#. You are signed in - awesome!
#: i18n/src/messages.json
msgctxt "konnect.welcome.message"
msgid "You are signed in - awesome!"
msgstr "आप साइंड इन हैं - अद्भुत!"
#. [konnect.goodbye.message.close]
#. defaultMessage is:
#. You can close this window now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.close"
msgid "You can close this window now."
msgstr "अब आप इस विंडो को बंद कर सकते हैं."
#. [konnect.goodbye.confirm.subHeader]
#. defaultMessage is:
#. please confirm sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.subHeader"
msgid "please confirm sign out"
msgstr "कृपया साइन आउट की पुष्टि करें"
#. [konnect.chooseaccount.subHeader]
#. defaultMessage is:
#. to sign in to Kopano
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.subHeader"
msgid "to sign in to Kopano"
msgstr "Kopano में साइन इन करने के लिए"
#. [konnect.login.subHeader]
#. defaultMessage is:
#. with your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.login.subHeader"
msgid "with your Kopano account"
msgstr "अपने Kopano खाते के साथ"
#. [konnect.goodbye.subHeader]
#. defaultMessage is:
#. you have been signed out from your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.goodbye.subHeader"
msgid "you have been signed out from your Kopano account"
msgstr "आपको अपने Kopano खाते से साइन आउट कर दिया गया है"
#. [konnect.consent.message]
#. defaultMessage is:
#. {clientDisplayName} wants to
#: i18n/src/messages.json
msgctxt "konnect.consent.message"
msgid "{clientDisplayName} wants to"
msgstr "{clientDisplayName} चाहते है की"

310
konnectd/ui/i18n/hr.po Normal file
View File

@@ -0,0 +1,310 @@
msgid ""
msgstr ""
"POT-Creation-Date: 2019-05-09T14:09:27.715Z\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"MIME-Version: 1.0\n"
"X-Generator: react-intl-po\n"
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2019-08-30 11:41+0200\n"
"Last-Translator: root <translations@kopano.io>\n"
"Language-Team: Croatian\n"
"Language: hr\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#. [konnect.chooseaccount.useOther.persona.label]
#. defaultMessage is:
#. ?
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.persona.label"
msgid "?"
msgstr ""
#. [konnect.scopeDescription.aliasBasic]
#. defaultMessage is:
#. Access your basic account information
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.aliasBasic"
msgid "Access your basic account information"
msgstr ""
#. [konnect.consent.allowButton.label]
#. defaultMessage is:
#. Allow
#: i18n/src/messages.json
msgctxt "konnect.consent.allowButton.label"
msgid "Allow"
msgstr ""
#. [konnect.consent.question]
#. defaultMessage is:
#. Allow {clientDisplayName} to do this?
#: i18n/src/messages.json
msgctxt "konnect.consent.question"
msgid "Allow {clientDisplayName} to do this?"
msgstr ""
#. [konnect.consent.consequence]
#. defaultMessage is:
#. By clicking Allow, you allow this app to use your information.
#: i18n/src/messages.json
msgctxt "konnect.consent.consequence"
msgid "By clicking Allow, you allow this app to use your information."
msgstr ""
#. [konnect.consent.cancelButton.label]
#. defaultMessage is:
#. Cancel
#: i18n/src/messages.json
msgctxt "konnect.consent.cancelButton.label"
msgid "Cancel"
msgstr ""
#. [konnect.chooseaccount.headline]
#. defaultMessage is:
#. Choose an account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.headline"
msgid "Choose an account"
msgstr ""
#. [konnect.consent.tooltip.client]
#. defaultMessage is:
#. Clicking "Allow" will redirect you to: {redirectURI}
#: i18n/src/messages.json
msgctxt "konnect.consent.tooltip.client"
msgid "Clicking \"Allow\" will redirect you to: {redirectURI}"
msgstr ""
#. [konnect.error.login.validate.missingPassword]
#. defaultMessage is:
#. Enter a password
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingPassword"
msgid "Enter a password"
msgstr ""
#. [konnect.error.login.validate.missingUsername]
#. defaultMessage is:
#. Enter an username
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingUsername"
msgid "Enter an username"
msgstr ""
#. [konnect.loading.error.headline]
#. defaultMessage is:
#. Failed to connect to server
#: i18n/src/messages.json
msgctxt "konnect.loading.error.headline"
msgid "Failed to connect to server"
msgstr ""
#. [konnect.goodbye.headline]
#. defaultMessage is:
#. Goodbye
#: i18n/src/messages.json
msgctxt "konnect.goodbye.headline"
msgid "Goodbye"
msgstr ""
#. [konnect.goodbye.confirm.headline]
#. defaultMessage is:
#. Hello {displayName}
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.headline"
msgid "Hello {displayName}"
msgstr ""
#. [konnect.consent.headline]
#. defaultMessage is:
#. Hi {displayName}
#: i18n/src/messages.json
msgctxt "konnect.consent.headline"
msgid "Hi {displayName}"
msgstr ""
#. [konnect.scopeDescription.offlineAccess]
#. defaultMessage is:
#. Keep the allowed access persistently and forever
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.offlineAccess"
msgid "Keep the allowed access persistently and forever"
msgstr ""
#. [konnect.error.login.failed]
#. defaultMessage is:
#. Logon failed. Please verify your credentials and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.login.failed"
msgid "Logon failed. Please verify your credentials and try again."
msgstr ""
#. [konnet.error.http.networkError]
#. defaultMessage is:
#. Network error. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnet.error.http.networkError"
msgid "Network error. Please check your connection and try again."
msgstr ""
#. [konnect.login.nextButton.label]
#. defaultMessage is:
#. Next
#: i18n/src/messages.json
msgctxt "konnect.login.nextButton.label"
msgid "Next"
msgstr ""
#. [konnect.login.passwordField.label]
#. defaultMessage is:
#. Password
#: i18n/src/messages.json
msgctxt "konnect.login.passwordField.label"
msgid "Password"
msgstr ""
#. [konnect.goodbye.message.confirm]
#. defaultMessage is:
#. Press the button below, to sign out from your Kopano account now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.confirm"
msgid "Press the button below, to sign out from your Kopano account now."
msgstr ""
#. [konnect.login.retryButton.label]
#. defaultMessage is:
#. Retry
#: i18n/src/messages.json
msgctxt "konnect.login.retryButton.label"
msgid "Retry"
msgstr ""
#. [konnect.scopeDescription.scope]
#. defaultMessage is:
#. Scope: {scope}
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.scope"
msgid "Scope: {scope}"
msgstr ""
#. [konnect.login.headline]
#. defaultMessage is:
#. Sign in
#: i18n/src/messages.json
msgctxt "konnect.login.headline"
msgid "Sign in"
msgstr ""
#. [konnect.goodbye.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.signoutButton.label"
msgid "Sign out"
msgstr ""
#. [konnect.welcome.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.welcome.signoutButton.label"
msgid "Sign out"
msgstr ""
#. [konnect.error.http.unexpectedResponseStatus]
#. defaultMessage is:
#. Unexpected HTTP response: {status}. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseStatus"
msgid "Unexpected HTTP response: {status}. Please check your connection and try again."
msgstr ""
#. [konnect.error.http.unexpectedResponseState]
#. defaultMessage is:
#. Unexpected response state: {state}
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseState"
msgid "Unexpected response state: {state}"
msgstr ""
#. [konnect.chooseaccount.useOther.label]
#. defaultMessage is:
#. Use another account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.label"
msgid "Use another account"
msgstr ""
#. [konnect.login.usernameField.label]
#. defaultMessage is:
#. Username
#: i18n/src/messages.json
msgctxt "konnect.login.usernameField.label"
msgid "Username"
msgstr ""
#. [konnect.welcome.headline]
#. defaultMessage is:
#. Welcome {displayName}
#: i18n/src/messages.json
msgctxt "konnect.welcome.headline"
msgid "Welcome {displayName}"
msgstr ""
#. [konnect.welcome.message]
#. defaultMessage is:
#. You are signed in - awesome!
#: i18n/src/messages.json
msgctxt "konnect.welcome.message"
msgid "You are signed in - awesome!"
msgstr ""
#. [konnect.goodbye.message.close]
#. defaultMessage is:
#. You can close this window now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.close"
msgid "You can close this window now."
msgstr ""
#. [konnect.goodbye.confirm.subHeader]
#. defaultMessage is:
#. please confirm sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.subHeader"
msgid "please confirm sign out"
msgstr ""
#. [konnect.chooseaccount.subHeader]
#. defaultMessage is:
#. to sign in to Kopano
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.subHeader"
msgid "to sign in to Kopano"
msgstr ""
#. [konnect.login.subHeader]
#. defaultMessage is:
#. with your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.login.subHeader"
msgid "with your Kopano account"
msgstr ""
#. [konnect.goodbye.subHeader]
#. defaultMessage is:
#. you have been signed out from your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.goodbye.subHeader"
msgid "you have been signed out from your Kopano account"
msgstr ""
#. [konnect.consent.message]
#. defaultMessage is:
#. {clientDisplayName} wants to
#: i18n/src/messages.json
msgctxt "konnect.consent.message"
msgid "{clientDisplayName} wants to"
msgstr ""

309
konnectd/ui/i18n/hu.po Normal file
View File

@@ -0,0 +1,309 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2019-05-09T14:09:27.715Z\n"
"PO-Revision-Date: 2018-10-30T16:08:29.860Z\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: hu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: react-intl-po\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. [konnect.chooseaccount.useOther.persona.label]
#. defaultMessage is:
#. ?
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.persona.label"
msgid "?"
msgstr ""
#. [konnect.scopeDescription.aliasBasic]
#. defaultMessage is:
#. Access your basic account information
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.aliasBasic"
msgid "Access your basic account information"
msgstr ""
#. [konnect.consent.allowButton.label]
#. defaultMessage is:
#. Allow
#: i18n/src/messages.json
msgctxt "konnect.consent.allowButton.label"
msgid "Allow"
msgstr ""
#. [konnect.consent.question]
#. defaultMessage is:
#. Allow {clientDisplayName} to do this?
#: i18n/src/messages.json
msgctxt "konnect.consent.question"
msgid "Allow {clientDisplayName} to do this?"
msgstr ""
#. [konnect.consent.consequence]
#. defaultMessage is:
#. By clicking Allow, you allow this app to use your information.
#: i18n/src/messages.json
msgctxt "konnect.consent.consequence"
msgid "By clicking Allow, you allow this app to use your information."
msgstr ""
#. [konnect.consent.cancelButton.label]
#. defaultMessage is:
#. Cancel
#: i18n/src/messages.json
msgctxt "konnect.consent.cancelButton.label"
msgid "Cancel"
msgstr ""
#. [konnect.chooseaccount.headline]
#. defaultMessage is:
#. Choose an account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.headline"
msgid "Choose an account"
msgstr ""
#. [konnect.consent.tooltip.client]
#. defaultMessage is:
#. Clicking "Allow" will redirect you to: {redirectURI}
#: i18n/src/messages.json
msgctxt "konnect.consent.tooltip.client"
msgid "Clicking \"Allow\" will redirect you to: {redirectURI}"
msgstr ""
#. [konnect.error.login.validate.missingPassword]
#. defaultMessage is:
#. Enter a password
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingPassword"
msgid "Enter a password"
msgstr ""
#. [konnect.error.login.validate.missingUsername]
#. defaultMessage is:
#. Enter an username
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingUsername"
msgid "Enter an username"
msgstr ""
#. [konnect.loading.error.headline]
#. defaultMessage is:
#. Failed to connect to server
#: i18n/src/messages.json
msgctxt "konnect.loading.error.headline"
msgid "Failed to connect to server"
msgstr ""
#. [konnect.goodbye.headline]
#. defaultMessage is:
#. Goodbye
#: i18n/src/messages.json
msgctxt "konnect.goodbye.headline"
msgid "Goodbye"
msgstr ""
#. [konnect.goodbye.confirm.headline]
#. defaultMessage is:
#. Hello {displayName}
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.headline"
msgid "Hello {displayName}"
msgstr ""
#. [konnect.consent.headline]
#. defaultMessage is:
#. Hi {displayName}
#: i18n/src/messages.json
msgctxt "konnect.consent.headline"
msgid "Hi {displayName}"
msgstr ""
#. [konnect.scopeDescription.offlineAccess]
#. defaultMessage is:
#. Keep the allowed access persistently and forever
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.offlineAccess"
msgid "Keep the allowed access persistently and forever"
msgstr ""
#. [konnect.error.login.failed]
#. defaultMessage is:
#. Logon failed. Please verify your credentials and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.login.failed"
msgid "Logon failed. Please verify your credentials and try again."
msgstr ""
#. [konnet.error.http.networkError]
#. defaultMessage is:
#. Network error. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnet.error.http.networkError"
msgid "Network error. Please check your connection and try again."
msgstr ""
#. [konnect.login.nextButton.label]
#. defaultMessage is:
#. Next
#: i18n/src/messages.json
msgctxt "konnect.login.nextButton.label"
msgid "Next"
msgstr ""
#. [konnect.login.passwordField.label]
#. defaultMessage is:
#. Password
#: i18n/src/messages.json
msgctxt "konnect.login.passwordField.label"
msgid "Password"
msgstr ""
#. [konnect.goodbye.message.confirm]
#. defaultMessage is:
#. Press the button below, to sign out from your Kopano account now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.confirm"
msgid "Press the button below, to sign out from your Kopano account now."
msgstr ""
#. [konnect.login.retryButton.label]
#. defaultMessage is:
#. Retry
#: i18n/src/messages.json
msgctxt "konnect.login.retryButton.label"
msgid "Retry"
msgstr ""
#. [konnect.scopeDescription.scope]
#. defaultMessage is:
#. Scope: {scope}
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.scope"
msgid "Scope: {scope}"
msgstr ""
#. [konnect.login.headline]
#. defaultMessage is:
#. Sign in
#: i18n/src/messages.json
msgctxt "konnect.login.headline"
msgid "Sign in"
msgstr ""
#. [konnect.goodbye.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.signoutButton.label"
msgid "Sign out"
msgstr ""
#. [konnect.welcome.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.welcome.signoutButton.label"
msgid "Sign out"
msgstr ""
#. [konnect.error.http.unexpectedResponseStatus]
#. defaultMessage is:
#. Unexpected HTTP response: {status}. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseStatus"
msgid "Unexpected HTTP response: {status}. Please check your connection and try again."
msgstr ""
#. [konnect.error.http.unexpectedResponseState]
#. defaultMessage is:
#. Unexpected response state: {state}
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseState"
msgid "Unexpected response state: {state}"
msgstr ""
#. [konnect.chooseaccount.useOther.label]
#. defaultMessage is:
#. Use another account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.label"
msgid "Use another account"
msgstr ""
#. [konnect.login.usernameField.label]
#. defaultMessage is:
#. Username
#: i18n/src/messages.json
msgctxt "konnect.login.usernameField.label"
msgid "Username"
msgstr ""
#. [konnect.welcome.headline]
#. defaultMessage is:
#. Welcome {displayName}
#: i18n/src/messages.json
msgctxt "konnect.welcome.headline"
msgid "Welcome {displayName}"
msgstr ""
#. [konnect.welcome.message]
#. defaultMessage is:
#. You are signed in - awesome!
#: i18n/src/messages.json
msgctxt "konnect.welcome.message"
msgid "You are signed in - awesome!"
msgstr ""
#. [konnect.goodbye.message.close]
#. defaultMessage is:
#. You can close this window now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.close"
msgid "You can close this window now."
msgstr ""
#. [konnect.goodbye.confirm.subHeader]
#. defaultMessage is:
#. please confirm sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.subHeader"
msgid "please confirm sign out"
msgstr ""
#. [konnect.chooseaccount.subHeader]
#. defaultMessage is:
#. to sign in to Kopano
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.subHeader"
msgid "to sign in to Kopano"
msgstr ""
#. [konnect.login.subHeader]
#. defaultMessage is:
#. with your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.login.subHeader"
msgid "with your Kopano account"
msgstr ""
#. [konnect.goodbye.subHeader]
#. defaultMessage is:
#. you have been signed out from your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.goodbye.subHeader"
msgid "you have been signed out from your Kopano account"
msgstr ""
#. [konnect.consent.message]
#. defaultMessage is:
#. {clientDisplayName} wants to
#: i18n/src/messages.json
msgctxt "konnect.consent.message"
msgid "{clientDisplayName} wants to"
msgstr ""

309
konnectd/ui/i18n/is.po Normal file
View File

@@ -0,0 +1,309 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2019-05-09T14:09:27.715Z\n"
"PO-Revision-Date: 2019-09-02 15:40+0000\n"
"Last-Translator: Tryggvi Björgvinsson <ME@TRICKVI.IS>\n"
"Language-Team: Icelandic <http://translate.kopano.io/projects/kopano/konnect/is/>\n"
"Language: is\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2.4\n"
#. [konnect.chooseaccount.useOther.persona.label]
#. defaultMessage is:
#. ?
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.persona.label"
msgid "?"
msgstr "?"
#. [konnect.scopeDescription.aliasBasic]
#. defaultMessage is:
#. Access your basic account information
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.aliasBasic"
msgid "Access your basic account information"
msgstr "Komast í grunnupplýsingar um þig"
#. [konnect.consent.allowButton.label]
#. defaultMessage is:
#. Allow
#: i18n/src/messages.json
msgctxt "konnect.consent.allowButton.label"
msgid "Allow"
msgstr "Leyfa"
#. [konnect.consent.question]
#. defaultMessage is:
#. Allow {clientDisplayName} to do this?
#: i18n/src/messages.json
msgctxt "konnect.consent.question"
msgid "Allow {clientDisplayName} to do this?"
msgstr "Leyfa {clientDisplayName} að gera þetta?"
#. [konnect.consent.consequence]
#. defaultMessage is:
#. By clicking Allow, you allow this app to use your information.
#: i18n/src/messages.json
msgctxt "konnect.consent.consequence"
msgid "By clicking Allow, you allow this app to use your information."
msgstr "Með því að smella á \"Leyfa\", leyfir þú þessu forriti að nota upplýsingarnar um þig."
#. [konnect.consent.cancelButton.label]
#. defaultMessage is:
#. Cancel
#: i18n/src/messages.json
msgctxt "konnect.consent.cancelButton.label"
msgid "Cancel"
msgstr "Hætta við"
#. [konnect.chooseaccount.headline]
#. defaultMessage is:
#. Choose an account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.headline"
msgid "Choose an account"
msgstr "Veldu aðgang"
#. [konnect.consent.tooltip.client]
#. defaultMessage is:
#. Clicking "Allow" will redirect you to: {redirectURI}
#: i18n/src/messages.json
msgctxt "konnect.consent.tooltip.client"
msgid "Clicking \"Allow\" will redirect you to: {redirectURI}"
msgstr "Þegar þú smellir á \"Leyfa\" áframsendist þú á: {redirectURI}"
#. [konnect.error.login.validate.missingPassword]
#. defaultMessage is:
#. Enter a password
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingPassword"
msgid "Enter a password"
msgstr "Sláðu inn lykilorð"
#. [konnect.error.login.validate.missingUsername]
#. defaultMessage is:
#. Enter an username
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingUsername"
msgid "Enter an username"
msgstr "Sláðu inn notandanafn"
#. [konnect.loading.error.headline]
#. defaultMessage is:
#. Failed to connect to server
#: i18n/src/messages.json
msgctxt "konnect.loading.error.headline"
msgid "Failed to connect to server"
msgstr "Mistókst að tengjast netþjóni"
#. [konnect.goodbye.headline]
#. defaultMessage is:
#. Goodbye
#: i18n/src/messages.json
msgctxt "konnect.goodbye.headline"
msgid "Goodbye"
msgstr "Bless"
#. [konnect.goodbye.confirm.headline]
#. defaultMessage is:
#. Hello {displayName}
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.headline"
msgid "Hello {displayName}"
msgstr "Halló {displayName}"
#. [konnect.consent.headline]
#. defaultMessage is:
#. Hi {displayName}
#: i18n/src/messages.json
msgctxt "konnect.consent.headline"
msgid "Hi {displayName}"
msgstr "Hæ {displayName}"
#. [konnect.scopeDescription.offlineAccess]
#. defaultMessage is:
#. Keep the allowed access persistently and forever
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.offlineAccess"
msgid "Keep the allowed access persistently and forever"
msgstr "Viðhalda heimildunum alltaf og að eilífu (mundu mig)"
#. [konnect.error.login.failed]
#. defaultMessage is:
#. Logon failed. Please verify your credentials and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.login.failed"
msgid "Logon failed. Please verify your credentials and try again."
msgstr "Innskráning mistókst. Vinsamlegast staðfestu notandaupplýsingarnar og reyndu aftur."
#. [konnet.error.http.networkError]
#. defaultMessage is:
#. Network error. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnet.error.http.networkError"
msgid "Network error. Please check your connection and try again."
msgstr "Netvilla. Vinsamlegast athugaðu tenginguna þína og reyndu aftur."
#. [konnect.login.nextButton.label]
#. defaultMessage is:
#. Next
#: i18n/src/messages.json
msgctxt "konnect.login.nextButton.label"
msgid "Next"
msgstr "Næsta"
#. [konnect.login.passwordField.label]
#. defaultMessage is:
#. Password
#: i18n/src/messages.json
msgctxt "konnect.login.passwordField.label"
msgid "Password"
msgstr "Lykilorð"
#. [konnect.goodbye.message.confirm]
#. defaultMessage is:
#. Press the button below, to sign out from your Kopano account now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.confirm"
msgid "Press the button below, to sign out from your Kopano account now."
msgstr "Smelltu á takkann fyrir neðan til að skrá þig út af Kopano aðganginum núna."
#. [konnect.login.retryButton.label]
#. defaultMessage is:
#. Retry
#: i18n/src/messages.json
msgctxt "konnect.login.retryButton.label"
msgid "Retry"
msgstr "Reyna aftur"
#. [konnect.scopeDescription.scope]
#. defaultMessage is:
#. Scope: {scope}
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.scope"
msgid "Scope: {scope}"
msgstr "Gildissvið: {scope}"
#. [konnect.login.headline]
#. defaultMessage is:
#. Sign in
#: i18n/src/messages.json
msgctxt "konnect.login.headline"
msgid "Sign in"
msgstr "Innskrá"
#. [konnect.goodbye.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.signoutButton.label"
msgid "Sign out"
msgstr "Útskrá"
#. [konnect.welcome.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.welcome.signoutButton.label"
msgid "Sign out"
msgstr "Útskrá"
#. [konnect.error.http.unexpectedResponseStatus]
#. defaultMessage is:
#. Unexpected HTTP response: {status}. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseStatus"
msgid "Unexpected HTTP response: {status}. Please check your connection and try again."
msgstr "Ófyrirsjáanlegt HTTP svar: {status}. Vinsamlegast athugaðu tenginguna þína og reyndu aftur."
#. [konnect.error.http.unexpectedResponseState]
#. defaultMessage is:
#. Unexpected response state: {state}
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseState"
msgid "Unexpected response state: {state}"
msgstr "Ófyrirsjáanleg svarstaða: {state}"
#. [konnect.chooseaccount.useOther.label]
#. defaultMessage is:
#. Use another account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.label"
msgid "Use another account"
msgstr "Nota annan aðgang"
#. [konnect.login.usernameField.label]
#. defaultMessage is:
#. Username
#: i18n/src/messages.json
msgctxt "konnect.login.usernameField.label"
msgid "Username"
msgstr "Notandanafn"
#. [konnect.welcome.headline]
#. defaultMessage is:
#. Welcome {displayName}
#: i18n/src/messages.json
msgctxt "konnect.welcome.headline"
msgid "Welcome {displayName}"
msgstr "Halló {displayName}"
#. [konnect.welcome.message]
#. defaultMessage is:
#. You are signed in - awesome!
#: i18n/src/messages.json
msgctxt "konnect.welcome.message"
msgid "You are signed in - awesome!"
msgstr "Innskráningin tókst - frábært!"
#. [konnect.goodbye.message.close]
#. defaultMessage is:
#. You can close this window now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.close"
msgid "You can close this window now."
msgstr "Þú getur lokað þessum glugga núna."
#. [konnect.goodbye.confirm.subHeader]
#. defaultMessage is:
#. please confirm sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.subHeader"
msgid "please confirm sign out"
msgstr "vinsamlegast staðfestu útskráningu"
#. [konnect.chooseaccount.subHeader]
#. defaultMessage is:
#. to sign in to Kopano
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.subHeader"
msgid "to sign in to Kopano"
msgstr "til að skrá þig inn í Kopano"
#. [konnect.login.subHeader]
#. defaultMessage is:
#. with your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.login.subHeader"
msgid "with your Kopano account"
msgstr "með Kopano-aðganginum þínum"
#. [konnect.goodbye.subHeader]
#. defaultMessage is:
#. you have been signed out from your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.goodbye.subHeader"
msgid "you have been signed out from your Kopano account"
msgstr "útskráning Kopano-aðgangsins þíns tókst"
#. [konnect.consent.message]
#. defaultMessage is:
#. {clientDisplayName} wants to
#: i18n/src/messages.json
msgctxt "konnect.consent.message"
msgid "{clientDisplayName} wants to"
msgstr "{clientDisplayName} vill"

309
konnectd/ui/i18n/it.po Normal file
View File

@@ -0,0 +1,309 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2019-05-09T14:09:27.715Z\n"
"PO-Revision-Date: 2018-10-30T16:08:29.860Z\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: react-intl-po\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. [konnect.chooseaccount.useOther.persona.label]
#. defaultMessage is:
#. ?
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.persona.label"
msgid "?"
msgstr ""
#. [konnect.scopeDescription.aliasBasic]
#. defaultMessage is:
#. Access your basic account information
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.aliasBasic"
msgid "Access your basic account information"
msgstr ""
#. [konnect.consent.allowButton.label]
#. defaultMessage is:
#. Allow
#: i18n/src/messages.json
msgctxt "konnect.consent.allowButton.label"
msgid "Allow"
msgstr ""
#. [konnect.consent.question]
#. defaultMessage is:
#. Allow {clientDisplayName} to do this?
#: i18n/src/messages.json
msgctxt "konnect.consent.question"
msgid "Allow {clientDisplayName} to do this?"
msgstr ""
#. [konnect.consent.consequence]
#. defaultMessage is:
#. By clicking Allow, you allow this app to use your information.
#: i18n/src/messages.json
msgctxt "konnect.consent.consequence"
msgid "By clicking Allow, you allow this app to use your information."
msgstr ""
#. [konnect.consent.cancelButton.label]
#. defaultMessage is:
#. Cancel
#: i18n/src/messages.json
msgctxt "konnect.consent.cancelButton.label"
msgid "Cancel"
msgstr ""
#. [konnect.chooseaccount.headline]
#. defaultMessage is:
#. Choose an account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.headline"
msgid "Choose an account"
msgstr ""
#. [konnect.consent.tooltip.client]
#. defaultMessage is:
#. Clicking "Allow" will redirect you to: {redirectURI}
#: i18n/src/messages.json
msgctxt "konnect.consent.tooltip.client"
msgid "Clicking \"Allow\" will redirect you to: {redirectURI}"
msgstr ""
#. [konnect.error.login.validate.missingPassword]
#. defaultMessage is:
#. Enter a password
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingPassword"
msgid "Enter a password"
msgstr ""
#. [konnect.error.login.validate.missingUsername]
#. defaultMessage is:
#. Enter an username
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingUsername"
msgid "Enter an username"
msgstr ""
#. [konnect.loading.error.headline]
#. defaultMessage is:
#. Failed to connect to server
#: i18n/src/messages.json
msgctxt "konnect.loading.error.headline"
msgid "Failed to connect to server"
msgstr ""
#. [konnect.goodbye.headline]
#. defaultMessage is:
#. Goodbye
#: i18n/src/messages.json
msgctxt "konnect.goodbye.headline"
msgid "Goodbye"
msgstr ""
#. [konnect.goodbye.confirm.headline]
#. defaultMessage is:
#. Hello {displayName}
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.headline"
msgid "Hello {displayName}"
msgstr ""
#. [konnect.consent.headline]
#. defaultMessage is:
#. Hi {displayName}
#: i18n/src/messages.json
msgctxt "konnect.consent.headline"
msgid "Hi {displayName}"
msgstr ""
#. [konnect.scopeDescription.offlineAccess]
#. defaultMessage is:
#. Keep the allowed access persistently and forever
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.offlineAccess"
msgid "Keep the allowed access persistently and forever"
msgstr ""
#. [konnect.error.login.failed]
#. defaultMessage is:
#. Logon failed. Please verify your credentials and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.login.failed"
msgid "Logon failed. Please verify your credentials and try again."
msgstr ""
#. [konnet.error.http.networkError]
#. defaultMessage is:
#. Network error. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnet.error.http.networkError"
msgid "Network error. Please check your connection and try again."
msgstr ""
#. [konnect.login.nextButton.label]
#. defaultMessage is:
#. Next
#: i18n/src/messages.json
msgctxt "konnect.login.nextButton.label"
msgid "Next"
msgstr ""
#. [konnect.login.passwordField.label]
#. defaultMessage is:
#. Password
#: i18n/src/messages.json
msgctxt "konnect.login.passwordField.label"
msgid "Password"
msgstr ""
#. [konnect.goodbye.message.confirm]
#. defaultMessage is:
#. Press the button below, to sign out from your Kopano account now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.confirm"
msgid "Press the button below, to sign out from your Kopano account now."
msgstr ""
#. [konnect.login.retryButton.label]
#. defaultMessage is:
#. Retry
#: i18n/src/messages.json
msgctxt "konnect.login.retryButton.label"
msgid "Retry"
msgstr ""
#. [konnect.scopeDescription.scope]
#. defaultMessage is:
#. Scope: {scope}
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.scope"
msgid "Scope: {scope}"
msgstr ""
#. [konnect.login.headline]
#. defaultMessage is:
#. Sign in
#: i18n/src/messages.json
msgctxt "konnect.login.headline"
msgid "Sign in"
msgstr ""
#. [konnect.goodbye.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.signoutButton.label"
msgid "Sign out"
msgstr ""
#. [konnect.welcome.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.welcome.signoutButton.label"
msgid "Sign out"
msgstr ""
#. [konnect.error.http.unexpectedResponseStatus]
#. defaultMessage is:
#. Unexpected HTTP response: {status}. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseStatus"
msgid "Unexpected HTTP response: {status}. Please check your connection and try again."
msgstr ""
#. [konnect.error.http.unexpectedResponseState]
#. defaultMessage is:
#. Unexpected response state: {state}
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseState"
msgid "Unexpected response state: {state}"
msgstr ""
#. [konnect.chooseaccount.useOther.label]
#. defaultMessage is:
#. Use another account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.label"
msgid "Use another account"
msgstr ""
#. [konnect.login.usernameField.label]
#. defaultMessage is:
#. Username
#: i18n/src/messages.json
msgctxt "konnect.login.usernameField.label"
msgid "Username"
msgstr ""
#. [konnect.welcome.headline]
#. defaultMessage is:
#. Welcome {displayName}
#: i18n/src/messages.json
msgctxt "konnect.welcome.headline"
msgid "Welcome {displayName}"
msgstr ""
#. [konnect.welcome.message]
#. defaultMessage is:
#. You are signed in - awesome!
#: i18n/src/messages.json
msgctxt "konnect.welcome.message"
msgid "You are signed in - awesome!"
msgstr ""
#. [konnect.goodbye.message.close]
#. defaultMessage is:
#. You can close this window now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.close"
msgid "You can close this window now."
msgstr ""
#. [konnect.goodbye.confirm.subHeader]
#. defaultMessage is:
#. please confirm sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.subHeader"
msgid "please confirm sign out"
msgstr ""
#. [konnect.chooseaccount.subHeader]
#. defaultMessage is:
#. to sign in to Kopano
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.subHeader"
msgid "to sign in to Kopano"
msgstr ""
#. [konnect.login.subHeader]
#. defaultMessage is:
#. with your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.login.subHeader"
msgid "with your Kopano account"
msgstr ""
#. [konnect.goodbye.subHeader]
#. defaultMessage is:
#. you have been signed out from your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.goodbye.subHeader"
msgid "you have been signed out from your Kopano account"
msgstr ""
#. [konnect.consent.message]
#. defaultMessage is:
#. {clientDisplayName} wants to
#: i18n/src/messages.json
msgctxt "konnect.consent.message"
msgid "{clientDisplayName} wants to"
msgstr ""

309
konnectd/ui/i18n/ja.po Normal file
View File

@@ -0,0 +1,309 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2019-05-09T14:09:27.715Z\n"
"PO-Revision-Date: 2018-10-30T16:08:29.860Z\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: react-intl-po\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. [konnect.chooseaccount.useOther.persona.label]
#. defaultMessage is:
#. ?
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.persona.label"
msgid "?"
msgstr ""
#. [konnect.scopeDescription.aliasBasic]
#. defaultMessage is:
#. Access your basic account information
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.aliasBasic"
msgid "Access your basic account information"
msgstr ""
#. [konnect.consent.allowButton.label]
#. defaultMessage is:
#. Allow
#: i18n/src/messages.json
msgctxt "konnect.consent.allowButton.label"
msgid "Allow"
msgstr ""
#. [konnect.consent.question]
#. defaultMessage is:
#. Allow {clientDisplayName} to do this?
#: i18n/src/messages.json
msgctxt "konnect.consent.question"
msgid "Allow {clientDisplayName} to do this?"
msgstr ""
#. [konnect.consent.consequence]
#. defaultMessage is:
#. By clicking Allow, you allow this app to use your information.
#: i18n/src/messages.json
msgctxt "konnect.consent.consequence"
msgid "By clicking Allow, you allow this app to use your information."
msgstr ""
#. [konnect.consent.cancelButton.label]
#. defaultMessage is:
#. Cancel
#: i18n/src/messages.json
msgctxt "konnect.consent.cancelButton.label"
msgid "Cancel"
msgstr ""
#. [konnect.chooseaccount.headline]
#. defaultMessage is:
#. Choose an account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.headline"
msgid "Choose an account"
msgstr ""
#. [konnect.consent.tooltip.client]
#. defaultMessage is:
#. Clicking "Allow" will redirect you to: {redirectURI}
#: i18n/src/messages.json
msgctxt "konnect.consent.tooltip.client"
msgid "Clicking \"Allow\" will redirect you to: {redirectURI}"
msgstr ""
#. [konnect.error.login.validate.missingPassword]
#. defaultMessage is:
#. Enter a password
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingPassword"
msgid "Enter a password"
msgstr ""
#. [konnect.error.login.validate.missingUsername]
#. defaultMessage is:
#. Enter an username
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingUsername"
msgid "Enter an username"
msgstr ""
#. [konnect.loading.error.headline]
#. defaultMessage is:
#. Failed to connect to server
#: i18n/src/messages.json
msgctxt "konnect.loading.error.headline"
msgid "Failed to connect to server"
msgstr ""
#. [konnect.goodbye.headline]
#. defaultMessage is:
#. Goodbye
#: i18n/src/messages.json
msgctxt "konnect.goodbye.headline"
msgid "Goodbye"
msgstr ""
#. [konnect.goodbye.confirm.headline]
#. defaultMessage is:
#. Hello {displayName}
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.headline"
msgid "Hello {displayName}"
msgstr ""
#. [konnect.consent.headline]
#. defaultMessage is:
#. Hi {displayName}
#: i18n/src/messages.json
msgctxt "konnect.consent.headline"
msgid "Hi {displayName}"
msgstr ""
#. [konnect.scopeDescription.offlineAccess]
#. defaultMessage is:
#. Keep the allowed access persistently and forever
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.offlineAccess"
msgid "Keep the allowed access persistently and forever"
msgstr ""
#. [konnect.error.login.failed]
#. defaultMessage is:
#. Logon failed. Please verify your credentials and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.login.failed"
msgid "Logon failed. Please verify your credentials and try again."
msgstr ""
#. [konnet.error.http.networkError]
#. defaultMessage is:
#. Network error. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnet.error.http.networkError"
msgid "Network error. Please check your connection and try again."
msgstr ""
#. [konnect.login.nextButton.label]
#. defaultMessage is:
#. Next
#: i18n/src/messages.json
msgctxt "konnect.login.nextButton.label"
msgid "Next"
msgstr ""
#. [konnect.login.passwordField.label]
#. defaultMessage is:
#. Password
#: i18n/src/messages.json
msgctxt "konnect.login.passwordField.label"
msgid "Password"
msgstr ""
#. [konnect.goodbye.message.confirm]
#. defaultMessage is:
#. Press the button below, to sign out from your Kopano account now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.confirm"
msgid "Press the button below, to sign out from your Kopano account now."
msgstr ""
#. [konnect.login.retryButton.label]
#. defaultMessage is:
#. Retry
#: i18n/src/messages.json
msgctxt "konnect.login.retryButton.label"
msgid "Retry"
msgstr ""
#. [konnect.scopeDescription.scope]
#. defaultMessage is:
#. Scope: {scope}
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.scope"
msgid "Scope: {scope}"
msgstr ""
#. [konnect.login.headline]
#. defaultMessage is:
#. Sign in
#: i18n/src/messages.json
msgctxt "konnect.login.headline"
msgid "Sign in"
msgstr ""
#. [konnect.goodbye.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.signoutButton.label"
msgid "Sign out"
msgstr ""
#. [konnect.welcome.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.welcome.signoutButton.label"
msgid "Sign out"
msgstr ""
#. [konnect.error.http.unexpectedResponseStatus]
#. defaultMessage is:
#. Unexpected HTTP response: {status}. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseStatus"
msgid "Unexpected HTTP response: {status}. Please check your connection and try again."
msgstr ""
#. [konnect.error.http.unexpectedResponseState]
#. defaultMessage is:
#. Unexpected response state: {state}
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseState"
msgid "Unexpected response state: {state}"
msgstr ""
#. [konnect.chooseaccount.useOther.label]
#. defaultMessage is:
#. Use another account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.label"
msgid "Use another account"
msgstr ""
#. [konnect.login.usernameField.label]
#. defaultMessage is:
#. Username
#: i18n/src/messages.json
msgctxt "konnect.login.usernameField.label"
msgid "Username"
msgstr ""
#. [konnect.welcome.headline]
#. defaultMessage is:
#. Welcome {displayName}
#: i18n/src/messages.json
msgctxt "konnect.welcome.headline"
msgid "Welcome {displayName}"
msgstr ""
#. [konnect.welcome.message]
#. defaultMessage is:
#. You are signed in - awesome!
#: i18n/src/messages.json
msgctxt "konnect.welcome.message"
msgid "You are signed in - awesome!"
msgstr ""
#. [konnect.goodbye.message.close]
#. defaultMessage is:
#. You can close this window now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.close"
msgid "You can close this window now."
msgstr ""
#. [konnect.goodbye.confirm.subHeader]
#. defaultMessage is:
#. please confirm sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.subHeader"
msgid "please confirm sign out"
msgstr ""
#. [konnect.chooseaccount.subHeader]
#. defaultMessage is:
#. to sign in to Kopano
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.subHeader"
msgid "to sign in to Kopano"
msgstr ""
#. [konnect.login.subHeader]
#. defaultMessage is:
#. with your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.login.subHeader"
msgid "with your Kopano account"
msgstr ""
#. [konnect.goodbye.subHeader]
#. defaultMessage is:
#. you have been signed out from your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.goodbye.subHeader"
msgid "you have been signed out from your Kopano account"
msgstr ""
#. [konnect.consent.message]
#. defaultMessage is:
#. {clientDisplayName} wants to
#: i18n/src/messages.json
msgctxt "konnect.consent.message"
msgid "{clientDisplayName} wants to"
msgstr ""

View File

@@ -0,0 +1,304 @@
msgid ""
msgstr ""
"POT-Creation-Date: 2019-05-09T14:09:27.715Z\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"MIME-Version: 1.0\n"
"X-Generator: react-intl-po\n"
#: ./i18n/src/messages.json
#. [konnect.chooseaccount.useOther.persona.label]
#. defaultMessage is:
#. ?
msgctxt "konnect.chooseaccount.useOther.persona.label"
msgid "?"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.scopeDescription.aliasBasic]
#. defaultMessage is:
#. Access your basic account information
msgctxt "konnect.scopeDescription.aliasBasic"
msgid "Access your basic account information"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.consent.allowButton.label]
#. defaultMessage is:
#. Allow
msgctxt "konnect.consent.allowButton.label"
msgid "Allow"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.consent.question]
#. defaultMessage is:
#. Allow {clientDisplayName} to do this?
msgctxt "konnect.consent.question"
msgid "Allow {clientDisplayName} to do this?"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.consent.consequence]
#. defaultMessage is:
#. By clicking Allow, you allow this app to use your information.
msgctxt "konnect.consent.consequence"
msgid "By clicking Allow, you allow this app to use your information."
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.consent.cancelButton.label]
#. defaultMessage is:
#. Cancel
msgctxt "konnect.consent.cancelButton.label"
msgid "Cancel"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.chooseaccount.headline]
#. defaultMessage is:
#. Choose an account
msgctxt "konnect.chooseaccount.headline"
msgid "Choose an account"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.consent.tooltip.client]
#. defaultMessage is:
#. Clicking "Allow" will redirect you to: {redirectURI}
msgctxt "konnect.consent.tooltip.client"
msgid "Clicking \"Allow\" will redirect you to: {redirectURI}"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.error.login.validate.missingPassword]
#. defaultMessage is:
#. Enter a password
msgctxt "konnect.error.login.validate.missingPassword"
msgid "Enter a password"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.error.login.validate.missingUsername]
#. defaultMessage is:
#. Enter an username
msgctxt "konnect.error.login.validate.missingUsername"
msgid "Enter an username"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.loading.error.headline]
#. defaultMessage is:
#. Failed to connect to server
msgctxt "konnect.loading.error.headline"
msgid "Failed to connect to server"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.goodbye.headline]
#. defaultMessage is:
#. Goodbye
msgctxt "konnect.goodbye.headline"
msgid "Goodbye"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.goodbye.confirm.headline]
#. defaultMessage is:
#. Hello {displayName}
msgctxt "konnect.goodbye.confirm.headline"
msgid "Hello {displayName}"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.consent.headline]
#. defaultMessage is:
#. Hi {displayName}
msgctxt "konnect.consent.headline"
msgid "Hi {displayName}"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.scopeDescription.offlineAccess]
#. defaultMessage is:
#. Keep the allowed access persistently and forever
msgctxt "konnect.scopeDescription.offlineAccess"
msgid "Keep the allowed access persistently and forever"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.error.login.failed]
#. defaultMessage is:
#. Logon failed. Please verify your credentials and try again.
msgctxt "konnect.error.login.failed"
msgid "Logon failed. Please verify your credentials and try again."
msgstr ""
#: ./i18n/src/messages.json
#. [konnet.error.http.networkError]
#. defaultMessage is:
#. Network error. Please check your connection and try again.
msgctxt "konnet.error.http.networkError"
msgid "Network error. Please check your connection and try again."
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.login.nextButton.label]
#. defaultMessage is:
#. Next
msgctxt "konnect.login.nextButton.label"
msgid "Next"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.login.passwordField.label]
#. defaultMessage is:
#. Password
msgctxt "konnect.login.passwordField.label"
msgid "Password"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.goodbye.message.confirm]
#. defaultMessage is:
#. Press the button below, to sign out from your Kopano account now.
msgctxt "konnect.goodbye.message.confirm"
msgid "Press the button below, to sign out from your Kopano account now."
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.login.retryButton.label]
#. defaultMessage is:
#. Retry
msgctxt "konnect.login.retryButton.label"
msgid "Retry"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.scopeDescription.scope]
#. defaultMessage is:
#. Scope: {scope}
msgctxt "konnect.scopeDescription.scope"
msgid "Scope: {scope}"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.login.headline]
#. defaultMessage is:
#. Sign in
msgctxt "konnect.login.headline"
msgid "Sign in"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.goodbye.signoutButton.label]
#. defaultMessage is:
#. Sign out
msgctxt "konnect.goodbye.signoutButton.label"
msgid "Sign out"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.welcome.signoutButton.label]
#. defaultMessage is:
#. Sign out
msgctxt "konnect.welcome.signoutButton.label"
msgid "Sign out"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.error.http.unexpectedResponseStatus]
#. defaultMessage is:
#. Unexpected HTTP response: {status}. Please check your connection and try again.
msgctxt "konnect.error.http.unexpectedResponseStatus"
msgid "Unexpected HTTP response: {status}. Please check your connection and try again."
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.error.http.unexpectedResponseState]
#. defaultMessage is:
#. Unexpected response state: {state}
msgctxt "konnect.error.http.unexpectedResponseState"
msgid "Unexpected response state: {state}"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.chooseaccount.useOther.label]
#. defaultMessage is:
#. Use another account
msgctxt "konnect.chooseaccount.useOther.label"
msgid "Use another account"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.login.usernameField.label]
#. defaultMessage is:
#. Username
msgctxt "konnect.login.usernameField.label"
msgid "Username"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.welcome.headline]
#. defaultMessage is:
#. Welcome {displayName}
msgctxt "konnect.welcome.headline"
msgid "Welcome {displayName}"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.welcome.message]
#. defaultMessage is:
#. You are signed in - awesome!
msgctxt "konnect.welcome.message"
msgid "You are signed in - awesome!"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.goodbye.message.close]
#. defaultMessage is:
#. You can close this window now.
msgctxt "konnect.goodbye.message.close"
msgid "You can close this window now."
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.goodbye.confirm.subHeader]
#. defaultMessage is:
#. please confirm sign out
msgctxt "konnect.goodbye.confirm.subHeader"
msgid "please confirm sign out"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.chooseaccount.subHeader]
#. defaultMessage is:
#. to sign in to Kopano
msgctxt "konnect.chooseaccount.subHeader"
msgid "to sign in to Kopano"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.login.subHeader]
#. defaultMessage is:
#. with your Kopano account
msgctxt "konnect.login.subHeader"
msgid "with your Kopano account"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.goodbye.subHeader]
#. defaultMessage is:
#. you have been signed out from your Kopano account
msgctxt "konnect.goodbye.subHeader"
msgid "you have been signed out from your Kopano account"
msgstr ""
#: ./i18n/src/messages.json
#. [konnect.consent.message]
#. defaultMessage is:
#. {clientDisplayName} wants to
msgctxt "konnect.consent.message"
msgid "{clientDisplayName} wants to"
msgstr ""

309
konnectd/ui/i18n/nb.po Normal file
View File

@@ -0,0 +1,309 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2019-05-09T14:09:27.715Z\n"
"PO-Revision-Date: 2019-08-26 16:21+0000\n"
"Last-Translator: Klaus <klaus@linuxavdelingen.no>\n"
"Language-Team: Norwegian Bokmål <http://translate.kopano.io/projects/kopano/konnect/nb/>\n"
"Language: nb\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2.4\n"
#. [konnect.chooseaccount.useOther.persona.label]
#. defaultMessage is:
#. ?
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.persona.label"
msgid "?"
msgstr "?"
#. [konnect.scopeDescription.aliasBasic]
#. defaultMessage is:
#. Access your basic account information
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.aliasBasic"
msgid "Access your basic account information"
msgstr "Tilgang til informasjon om basiskonto"
#. [konnect.consent.allowButton.label]
#. defaultMessage is:
#. Allow
#: i18n/src/messages.json
msgctxt "konnect.consent.allowButton.label"
msgid "Allow"
msgstr "Tillat"
#. [konnect.consent.question]
#. defaultMessage is:
#. Allow {clientDisplayName} to do this?
#: i18n/src/messages.json
msgctxt "konnect.consent.question"
msgid "Allow {clientDisplayName} to do this?"
msgstr "Tillatt {clientDisplayName} å gjøre dette?"
#. [konnect.consent.consequence]
#. defaultMessage is:
#. By clicking Allow, you allow this app to use your information.
#: i18n/src/messages.json
msgctxt "konnect.consent.consequence"
msgid "By clicking Allow, you allow this app to use your information."
msgstr "Ved å klikke på Aksepter, så tillater du at appen bruker din informasjon."
#. [konnect.consent.cancelButton.label]
#. defaultMessage is:
#. Cancel
#: i18n/src/messages.json
msgctxt "konnect.consent.cancelButton.label"
msgid "Cancel"
msgstr "Avbryt"
#. [konnect.chooseaccount.headline]
#. defaultMessage is:
#. Choose an account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.headline"
msgid "Choose an account"
msgstr "Velg en konto"
#. [konnect.consent.tooltip.client]
#. defaultMessage is:
#. Clicking "Allow" will redirect you to: {redirectURI}
#: i18n/src/messages.json
msgctxt "konnect.consent.tooltip.client"
msgid "Clicking \"Allow\" will redirect you to: {redirectURI}"
msgstr "Ved å klikke på \"Tillatt\" så vil du bli ledet til: {redirectURI}"
#. [konnect.error.login.validate.missingPassword]
#. defaultMessage is:
#. Enter a password
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingPassword"
msgid "Enter a password"
msgstr "Skriv inn et passord"
#. [konnect.error.login.validate.missingUsername]
#. defaultMessage is:
#. Enter an username
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingUsername"
msgid "Enter an username"
msgstr "Skriv inn et brukernavn"
#. [konnect.loading.error.headline]
#. defaultMessage is:
#. Failed to connect to server
#: i18n/src/messages.json
msgctxt "konnect.loading.error.headline"
msgid "Failed to connect to server"
msgstr "Klarte ikke å forbinde med server"
#. [konnect.goodbye.headline]
#. defaultMessage is:
#. Goodbye
#: i18n/src/messages.json
msgctxt "konnect.goodbye.headline"
msgid "Goodbye"
msgstr "Farvel"
#. [konnect.goodbye.confirm.headline]
#. defaultMessage is:
#. Hello {displayName}
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.headline"
msgid "Hello {displayName}"
msgstr "Hallo {displayName}"
#. [konnect.consent.headline]
#. defaultMessage is:
#. Hi {displayName}
#: i18n/src/messages.json
msgctxt "konnect.consent.headline"
msgid "Hi {displayName}"
msgstr "Hei {displayName}"
#. [konnect.scopeDescription.offlineAccess]
#. defaultMessage is:
#. Keep the allowed access persistently and forever
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.offlineAccess"
msgid "Keep the allowed access persistently and forever"
msgstr "Behold den tillate tilgangen for alltid"
#. [konnect.error.login.failed]
#. defaultMessage is:
#. Logon failed. Please verify your credentials and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.login.failed"
msgid "Logon failed. Please verify your credentials and try again."
msgstr "Logg inn feilet. Vennligst sjekk brukernavn/passord, og forsøk igjen."
#. [konnet.error.http.networkError]
#. defaultMessage is:
#. Network error. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnet.error.http.networkError"
msgid "Network error. Please check your connection and try again."
msgstr "Nettverksfeil. Sjekk din forbindelse, og forsøk igjen."
#. [konnect.login.nextButton.label]
#. defaultMessage is:
#. Next
#: i18n/src/messages.json
msgctxt "konnect.login.nextButton.label"
msgid "Next"
msgstr "Neste"
#. [konnect.login.passwordField.label]
#. defaultMessage is:
#. Password
#: i18n/src/messages.json
msgctxt "konnect.login.passwordField.label"
msgid "Password"
msgstr "Passord"
#. [konnect.goodbye.message.confirm]
#. defaultMessage is:
#. Press the button below, to sign out from your Kopano account now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.confirm"
msgid "Press the button below, to sign out from your Kopano account now."
msgstr "Trykk på knappen under, for å logge ut av din Kopano konto."
#. [konnect.login.retryButton.label]
#. defaultMessage is:
#. Retry
#: i18n/src/messages.json
msgctxt "konnect.login.retryButton.label"
msgid "Retry"
msgstr "Prøv igjen"
#. [konnect.scopeDescription.scope]
#. defaultMessage is:
#. Scope: {scope}
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.scope"
msgid "Scope: {scope}"
msgstr "Omfang: {scope}"
#. [konnect.login.headline]
#. defaultMessage is:
#. Sign in
#: i18n/src/messages.json
msgctxt "konnect.login.headline"
msgid "Sign in"
msgstr "Logg inn"
#. [konnect.goodbye.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.signoutButton.label"
msgid "Sign out"
msgstr "Logg ut"
#. [konnect.welcome.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.welcome.signoutButton.label"
msgid "Sign out"
msgstr "Logg ut"
#. [konnect.error.http.unexpectedResponseStatus]
#. defaultMessage is:
#. Unexpected HTTP response: {status}. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseStatus"
msgid "Unexpected HTTP response: {status}. Please check your connection and try again."
msgstr "Uventet HTTP respons: {status}. Sjekk tilkoblingen din og prøv igjen."
#. [konnect.error.http.unexpectedResponseState]
#. defaultMessage is:
#. Unexpected response state: {state}
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseState"
msgid "Unexpected response state: {state}"
msgstr "Uventet svar-status: {state}"
#. [konnect.chooseaccount.useOther.label]
#. defaultMessage is:
#. Use another account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.label"
msgid "Use another account"
msgstr "Bruk en annen konto"
#. [konnect.login.usernameField.label]
#. defaultMessage is:
#. Username
#: i18n/src/messages.json
msgctxt "konnect.login.usernameField.label"
msgid "Username"
msgstr "Brukernavn"
#. [konnect.welcome.headline]
#. defaultMessage is:
#. Welcome {displayName}
#: i18n/src/messages.json
msgctxt "konnect.welcome.headline"
msgid "Welcome {displayName}"
msgstr "Velkommen {displayName}"
#. [konnect.welcome.message]
#. defaultMessage is:
#. You are signed in - awesome!
#: i18n/src/messages.json
msgctxt "konnect.welcome.message"
msgid "You are signed in - awesome!"
msgstr "Du er logget på!"
#. [konnect.goodbye.message.close]
#. defaultMessage is:
#. You can close this window now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.close"
msgid "You can close this window now."
msgstr "Du kan lukke dette vinduet nå."
#. [konnect.goodbye.confirm.subHeader]
#. defaultMessage is:
#. please confirm sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.subHeader"
msgid "please confirm sign out"
msgstr "vennligst bekreft utlogging"
#. [konnect.chooseaccount.subHeader]
#. defaultMessage is:
#. to sign in to Kopano
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.subHeader"
msgid "to sign in to Kopano"
msgstr "for å logge inn i Kopano"
#. [konnect.login.subHeader]
#. defaultMessage is:
#. with your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.login.subHeader"
msgid "with your Kopano account"
msgstr "med din Kopano konto"
#. [konnect.goodbye.subHeader]
#. defaultMessage is:
#. you have been signed out from your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.goodbye.subHeader"
msgid "you have been signed out from your Kopano account"
msgstr "du har blitt logget ut fra din Kopano konto"
#. [konnect.consent.message]
#. defaultMessage is:
#. {clientDisplayName} wants to
#: i18n/src/messages.json
msgctxt "konnect.consent.message"
msgid "{clientDisplayName} wants to"
msgstr "{clientDisplayName} ønsker"

309
konnectd/ui/i18n/nl.po Normal file
View File

@@ -0,0 +1,309 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2019-05-09T14:09:27.715Z\n"
"PO-Revision-Date: 2019-05-09 13:19+0000\n"
"Last-Translator: Bob <b.huisman@kopano.com>\n"
"Language-Team: Dutch <http://translate.kopano.io/projects/kopano/konnect/nl/>\n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2.4\n"
#. [konnect.chooseaccount.useOther.persona.label]
#. defaultMessage is:
#. ?
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.persona.label"
msgid "?"
msgstr "?"
#. [konnect.scopeDescription.aliasBasic]
#. defaultMessage is:
#. Access your basic account information
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.aliasBasic"
msgid "Access your basic account information"
msgstr "Basis accountgegevens weergeven"
#. [konnect.consent.allowButton.label]
#. defaultMessage is:
#. Allow
#: i18n/src/messages.json
msgctxt "konnect.consent.allowButton.label"
msgid "Allow"
msgstr "Toestaan"
#. [konnect.consent.question]
#. defaultMessage is:
#. Allow {clientDisplayName} to do this?
#: i18n/src/messages.json
msgctxt "konnect.consent.question"
msgid "Allow {clientDisplayName} to do this?"
msgstr "{clientDisplayName} toestaan dit te doen?"
#. [konnect.consent.consequence]
#. defaultMessage is:
#. By clicking Allow, you allow this app to use your information.
#: i18n/src/messages.json
msgctxt "konnect.consent.consequence"
msgid "By clicking Allow, you allow this app to use your information."
msgstr "Door op Toestaan te klikken, krijgt deze app toestemming je informatie te gebruiken."
#. [konnect.consent.cancelButton.label]
#. defaultMessage is:
#. Cancel
#: i18n/src/messages.json
msgctxt "konnect.consent.cancelButton.label"
msgid "Cancel"
msgstr "Annuleren"
#. [konnect.chooseaccount.headline]
#. defaultMessage is:
#. Choose an account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.headline"
msgid "Choose an account"
msgstr "Account kiezen"
#. [konnect.consent.tooltip.client]
#. defaultMessage is:
#. Clicking "Allow" will redirect you to: {redirectURI}
#: i18n/src/messages.json
msgctxt "konnect.consent.tooltip.client"
msgid "Clicking \"Allow\" will redirect you to: {redirectURI}"
msgstr "Door op \"Toestaan\" te klikken word je doorverwezen naar: {redirectURI}"
#. [konnect.error.login.validate.missingPassword]
#. defaultMessage is:
#. Enter a password
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingPassword"
msgid "Enter a password"
msgstr "Voer een wachtwoord in"
#. [konnect.error.login.validate.missingUsername]
#. defaultMessage is:
#. Enter an username
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingUsername"
msgid "Enter an username"
msgstr "Voer een gebruikersnaam in"
#. [konnect.loading.error.headline]
#. defaultMessage is:
#. Failed to connect to server
#: i18n/src/messages.json
msgctxt "konnect.loading.error.headline"
msgid "Failed to connect to server"
msgstr "Kon niet met server verbinden"
#. [konnect.goodbye.headline]
#. defaultMessage is:
#. Goodbye
#: i18n/src/messages.json
msgctxt "konnect.goodbye.headline"
msgid "Goodbye"
msgstr "Tot ziens"
#. [konnect.goodbye.confirm.headline]
#. defaultMessage is:
#. Hello {displayName}
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.headline"
msgid "Hello {displayName}"
msgstr "Hallo {displayName}"
#. [konnect.consent.headline]
#. defaultMessage is:
#. Hi {displayName}
#: i18n/src/messages.json
msgctxt "konnect.consent.headline"
msgid "Hi {displayName}"
msgstr "Hoi {displayName}"
#. [konnect.scopeDescription.offlineAccess]
#. defaultMessage is:
#. Keep the allowed access persistently and forever
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.offlineAccess"
msgid "Keep the allowed access persistently and forever"
msgstr "De toestemming voor altijd onthouden"
#. [konnect.error.login.failed]
#. defaultMessage is:
#. Logon failed. Please verify your credentials and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.login.failed"
msgid "Logon failed. Please verify your credentials and try again."
msgstr "Inloggen mislukt. Controleer logingegevens en probeer opnieuw."
#. [konnet.error.http.networkError]
#. defaultMessage is:
#. Network error. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnet.error.http.networkError"
msgid "Network error. Please check your connection and try again."
msgstr "Netwerk probleem. Controleer je verbinding en probeer opnieuw."
#. [konnect.login.nextButton.label]
#. defaultMessage is:
#. Next
#: i18n/src/messages.json
msgctxt "konnect.login.nextButton.label"
msgid "Next"
msgstr "Volgende"
#. [konnect.login.passwordField.label]
#. defaultMessage is:
#. Password
#: i18n/src/messages.json
msgctxt "konnect.login.passwordField.label"
msgid "Password"
msgstr "Wachtwoord"
#. [konnect.goodbye.message.confirm]
#. defaultMessage is:
#. Press the button below, to sign out from your Kopano account now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.confirm"
msgid "Press the button below, to sign out from your Kopano account now."
msgstr "Klik op onderstaande knop om af te melden van je Kopano account."
#. [konnect.login.retryButton.label]
#. defaultMessage is:
#. Retry
#: i18n/src/messages.json
msgctxt "konnect.login.retryButton.label"
msgid "Retry"
msgstr "Opnieuw"
#. [konnect.scopeDescription.scope]
#. defaultMessage is:
#. Scope: {scope}
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.scope"
msgid "Scope: {scope}"
msgstr "Scope: {scope}"
#. [konnect.login.headline]
#. defaultMessage is:
#. Sign in
#: i18n/src/messages.json
msgctxt "konnect.login.headline"
msgid "Sign in"
msgstr "Aanmelden"
#. [konnect.goodbye.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.signoutButton.label"
msgid "Sign out"
msgstr "Afmelden"
#. [konnect.welcome.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.welcome.signoutButton.label"
msgid "Sign out"
msgstr "Afmelden"
#. [konnect.error.http.unexpectedResponseStatus]
#. defaultMessage is:
#. Unexpected HTTP response: {status}. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseStatus"
msgid "Unexpected HTTP response: {status}. Please check your connection and try again."
msgstr "Onverwachte HTTP respons: {status}. Controleer je verbinding en probeer opnieuw."
#. [konnect.error.http.unexpectedResponseState]
#. defaultMessage is:
#. Unexpected response state: {state}
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseState"
msgid "Unexpected response state: {state}"
msgstr "Onverwachte respons status: {state}"
#. [konnect.chooseaccount.useOther.label]
#. defaultMessage is:
#. Use another account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.label"
msgid "Use another account"
msgstr "Gebruik een ander account"
#. [konnect.login.usernameField.label]
#. defaultMessage is:
#. Username
#: i18n/src/messages.json
msgctxt "konnect.login.usernameField.label"
msgid "Username"
msgstr "Gebruikersnaam"
#. [konnect.welcome.headline]
#. defaultMessage is:
#. Welcome {displayName}
#: i18n/src/messages.json
msgctxt "konnect.welcome.headline"
msgid "Welcome {displayName}"
msgstr "Welkom {displayName}"
#. [konnect.welcome.message]
#. defaultMessage is:
#. You are signed in - awesome!
#: i18n/src/messages.json
msgctxt "konnect.welcome.message"
msgid "You are signed in - awesome!"
msgstr "Je bent aangemeld - fantastisch!"
#. [konnect.goodbye.message.close]
#. defaultMessage is:
#. You can close this window now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.close"
msgid "You can close this window now."
msgstr "Dit venster kan nu worden gesloten."
#. [konnect.goodbye.confirm.subHeader]
#. defaultMessage is:
#. please confirm sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.subHeader"
msgid "please confirm sign out"
msgstr "bevestig afmelden"
#. [konnect.chooseaccount.subHeader]
#. defaultMessage is:
#. to sign in to Kopano
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.subHeader"
msgid "to sign in to Kopano"
msgstr "om aan te melden bij Kopano"
#. [konnect.login.subHeader]
#. defaultMessage is:
#. with your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.login.subHeader"
msgid "with your Kopano account"
msgstr "met je Kopano account"
#. [konnect.goodbye.subHeader]
#. defaultMessage is:
#. you have been signed out from your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.goodbye.subHeader"
msgid "you have been signed out from your Kopano account"
msgstr "je bent afgemeld van je Kopano account"
#. [konnect.consent.message]
#. defaultMessage is:
#. {clientDisplayName} wants to
#: i18n/src/messages.json
msgctxt "konnect.consent.message"
msgid "{clientDisplayName} wants to"
msgstr "{clientDisplayName} wil"

308
konnectd/ui/i18n/pl.po Normal file
View File

@@ -0,0 +1,308 @@
msgid ""
msgstr ""
"POT-Creation-Date: 2019-05-09T14:09:27.715Z\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"MIME-Version: 1.0\n"
"X-Generator: react-intl-po\n"
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2019-08-30 11:45+0200\n"
"Last-Translator: root <root@podo.kopano.io>\n"
"Language-Team: Language po\n"
"Language: po\n"
#. [konnect.chooseaccount.useOther.persona.label]
#. defaultMessage is:
#. ?
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.persona.label"
msgid "?"
msgstr ""
#. [konnect.scopeDescription.aliasBasic]
#. defaultMessage is:
#. Access your basic account information
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.aliasBasic"
msgid "Access your basic account information"
msgstr ""
#. [konnect.consent.allowButton.label]
#. defaultMessage is:
#. Allow
#: i18n/src/messages.json
msgctxt "konnect.consent.allowButton.label"
msgid "Allow"
msgstr ""
#. [konnect.consent.question]
#. defaultMessage is:
#. Allow {clientDisplayName} to do this?
#: i18n/src/messages.json
msgctxt "konnect.consent.question"
msgid "Allow {clientDisplayName} to do this?"
msgstr ""
#. [konnect.consent.consequence]
#. defaultMessage is:
#. By clicking Allow, you allow this app to use your information.
#: i18n/src/messages.json
msgctxt "konnect.consent.consequence"
msgid "By clicking Allow, you allow this app to use your information."
msgstr ""
#. [konnect.consent.cancelButton.label]
#. defaultMessage is:
#. Cancel
#: i18n/src/messages.json
msgctxt "konnect.consent.cancelButton.label"
msgid "Cancel"
msgstr ""
#. [konnect.chooseaccount.headline]
#. defaultMessage is:
#. Choose an account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.headline"
msgid "Choose an account"
msgstr ""
#. [konnect.consent.tooltip.client]
#. defaultMessage is:
#. Clicking "Allow" will redirect you to: {redirectURI}
#: i18n/src/messages.json
msgctxt "konnect.consent.tooltip.client"
msgid "Clicking \"Allow\" will redirect you to: {redirectURI}"
msgstr ""
#. [konnect.error.login.validate.missingPassword]
#. defaultMessage is:
#. Enter a password
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingPassword"
msgid "Enter a password"
msgstr ""
#. [konnect.error.login.validate.missingUsername]
#. defaultMessage is:
#. Enter an username
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingUsername"
msgid "Enter an username"
msgstr ""
#. [konnect.loading.error.headline]
#. defaultMessage is:
#. Failed to connect to server
#: i18n/src/messages.json
msgctxt "konnect.loading.error.headline"
msgid "Failed to connect to server"
msgstr ""
#. [konnect.goodbye.headline]
#. defaultMessage is:
#. Goodbye
#: i18n/src/messages.json
msgctxt "konnect.goodbye.headline"
msgid "Goodbye"
msgstr ""
#. [konnect.goodbye.confirm.headline]
#. defaultMessage is:
#. Hello {displayName}
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.headline"
msgid "Hello {displayName}"
msgstr ""
#. [konnect.consent.headline]
#. defaultMessage is:
#. Hi {displayName}
#: i18n/src/messages.json
msgctxt "konnect.consent.headline"
msgid "Hi {displayName}"
msgstr ""
#. [konnect.scopeDescription.offlineAccess]
#. defaultMessage is:
#. Keep the allowed access persistently and forever
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.offlineAccess"
msgid "Keep the allowed access persistently and forever"
msgstr ""
#. [konnect.error.login.failed]
#. defaultMessage is:
#. Logon failed. Please verify your credentials and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.login.failed"
msgid "Logon failed. Please verify your credentials and try again."
msgstr ""
#. [konnet.error.http.networkError]
#. defaultMessage is:
#. Network error. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnet.error.http.networkError"
msgid "Network error. Please check your connection and try again."
msgstr ""
#. [konnect.login.nextButton.label]
#. defaultMessage is:
#. Next
#: i18n/src/messages.json
msgctxt "konnect.login.nextButton.label"
msgid "Next"
msgstr ""
#. [konnect.login.passwordField.label]
#. defaultMessage is:
#. Password
#: i18n/src/messages.json
msgctxt "konnect.login.passwordField.label"
msgid "Password"
msgstr ""
#. [konnect.goodbye.message.confirm]
#. defaultMessage is:
#. Press the button below, to sign out from your Kopano account now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.confirm"
msgid "Press the button below, to sign out from your Kopano account now."
msgstr ""
#. [konnect.login.retryButton.label]
#. defaultMessage is:
#. Retry
#: i18n/src/messages.json
msgctxt "konnect.login.retryButton.label"
msgid "Retry"
msgstr ""
#. [konnect.scopeDescription.scope]
#. defaultMessage is:
#. Scope: {scope}
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.scope"
msgid "Scope: {scope}"
msgstr ""
#. [konnect.login.headline]
#. defaultMessage is:
#. Sign in
#: i18n/src/messages.json
msgctxt "konnect.login.headline"
msgid "Sign in"
msgstr ""
#. [konnect.goodbye.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.signoutButton.label"
msgid "Sign out"
msgstr ""
#. [konnect.welcome.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.welcome.signoutButton.label"
msgid "Sign out"
msgstr ""
#. [konnect.error.http.unexpectedResponseStatus]
#. defaultMessage is:
#. Unexpected HTTP response: {status}. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseStatus"
msgid "Unexpected HTTP response: {status}. Please check your connection and try again."
msgstr ""
#. [konnect.error.http.unexpectedResponseState]
#. defaultMessage is:
#. Unexpected response state: {state}
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseState"
msgid "Unexpected response state: {state}"
msgstr ""
#. [konnect.chooseaccount.useOther.label]
#. defaultMessage is:
#. Use another account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.label"
msgid "Use another account"
msgstr ""
#. [konnect.login.usernameField.label]
#. defaultMessage is:
#. Username
#: i18n/src/messages.json
msgctxt "konnect.login.usernameField.label"
msgid "Username"
msgstr ""
#. [konnect.welcome.headline]
#. defaultMessage is:
#. Welcome {displayName}
#: i18n/src/messages.json
msgctxt "konnect.welcome.headline"
msgid "Welcome {displayName}"
msgstr ""
#. [konnect.welcome.message]
#. defaultMessage is:
#. You are signed in - awesome!
#: i18n/src/messages.json
msgctxt "konnect.welcome.message"
msgid "You are signed in - awesome!"
msgstr ""
#. [konnect.goodbye.message.close]
#. defaultMessage is:
#. You can close this window now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.close"
msgid "You can close this window now."
msgstr ""
#. [konnect.goodbye.confirm.subHeader]
#. defaultMessage is:
#. please confirm sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.subHeader"
msgid "please confirm sign out"
msgstr ""
#. [konnect.chooseaccount.subHeader]
#. defaultMessage is:
#. to sign in to Kopano
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.subHeader"
msgid "to sign in to Kopano"
msgstr ""
#. [konnect.login.subHeader]
#. defaultMessage is:
#. with your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.login.subHeader"
msgid "with your Kopano account"
msgstr ""
#. [konnect.goodbye.subHeader]
#. defaultMessage is:
#. you have been signed out from your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.goodbye.subHeader"
msgid "you have been signed out from your Kopano account"
msgstr ""
#. [konnect.consent.message]
#. defaultMessage is:
#. {clientDisplayName} wants to
#: i18n/src/messages.json
msgctxt "konnect.consent.message"
msgid "{clientDisplayName} wants to"
msgstr ""

309
konnectd/ui/i18n/pt_PT.po Normal file
View File

@@ -0,0 +1,309 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2019-05-09T14:09:27.715Z\n"
"PO-Revision-Date: 2019-05-31 09:39+0000\n"
"Last-Translator: Nuno Jerónimo <nuno.jeronimo@valsousa.pt>\n"
"Language-Team: Portuguese (Portugal) <http://translate.kopano.io/projects/kopano/konnect/pt_PT/>\n"
"Language: pt_PT\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 2.4\n"
#. [konnect.chooseaccount.useOther.persona.label]
#. defaultMessage is:
#. ?
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.persona.label"
msgid "?"
msgstr "?"
#. [konnect.scopeDescription.aliasBasic]
#. defaultMessage is:
#. Access your basic account information
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.aliasBasic"
msgid "Access your basic account information"
msgstr "Aceder à sua informação básica da conta"
#. [konnect.consent.allowButton.label]
#. defaultMessage is:
#. Allow
#: i18n/src/messages.json
msgctxt "konnect.consent.allowButton.label"
msgid "Allow"
msgstr "Permitir"
#. [konnect.consent.question]
#. defaultMessage is:
#. Allow {clientDisplayName} to do this?
#: i18n/src/messages.json
msgctxt "konnect.consent.question"
msgid "Allow {clientDisplayName} to do this?"
msgstr "Permitir que {clientDisplayName} faça isto?"
#. [konnect.consent.consequence]
#. defaultMessage is:
#. By clicking Allow, you allow this app to use your information.
#: i18n/src/messages.json
msgctxt "konnect.consent.consequence"
msgid "By clicking Allow, you allow this app to use your information."
msgstr "Ao carregar em Permitir, está a permitir que esta app use os seus dados."
#. [konnect.consent.cancelButton.label]
#. defaultMessage is:
#. Cancel
#: i18n/src/messages.json
msgctxt "konnect.consent.cancelButton.label"
msgid "Cancel"
msgstr "Cancelar"
#. [konnect.chooseaccount.headline]
#. defaultMessage is:
#. Choose an account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.headline"
msgid "Choose an account"
msgstr "Escolher uma conta"
#. [konnect.consent.tooltip.client]
#. defaultMessage is:
#. Clicking "Allow" will redirect you to: {redirectURI}
#: i18n/src/messages.json
msgctxt "konnect.consent.tooltip.client"
msgid "Clicking \"Allow\" will redirect you to: {redirectURI}"
msgstr "Ao carregar em \"Permitir\" será redirecionado para: {redirectURI}"
#. [konnect.error.login.validate.missingPassword]
#. defaultMessage is:
#. Enter a password
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingPassword"
msgid "Enter a password"
msgstr "Insira uma palavra-passe"
#. [konnect.error.login.validate.missingUsername]
#. defaultMessage is:
#. Enter an username
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingUsername"
msgid "Enter an username"
msgstr "Insira um utilizador"
#. [konnect.loading.error.headline]
#. defaultMessage is:
#. Failed to connect to server
#: i18n/src/messages.json
msgctxt "konnect.loading.error.headline"
msgid "Failed to connect to server"
msgstr "Falhou a ligar ao servidor"
#. [konnect.goodbye.headline]
#. defaultMessage is:
#. Goodbye
#: i18n/src/messages.json
msgctxt "konnect.goodbye.headline"
msgid "Goodbye"
msgstr "Adeus"
#. [konnect.goodbye.confirm.headline]
#. defaultMessage is:
#. Hello {displayName}
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.headline"
msgid "Hello {displayName}"
msgstr "Olá {displayName}"
#. [konnect.consent.headline]
#. defaultMessage is:
#. Hi {displayName}
#: i18n/src/messages.json
msgctxt "konnect.consent.headline"
msgid "Hi {displayName}"
msgstr "Olá {displayName}"
#. [konnect.scopeDescription.offlineAccess]
#. defaultMessage is:
#. Keep the allowed access persistently and forever
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.offlineAccess"
msgid "Keep the allowed access persistently and forever"
msgstr "Manter o acesso permitido de forma persistente e para sempre"
#. [konnect.error.login.failed]
#. defaultMessage is:
#. Logon failed. Please verify your credentials and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.login.failed"
msgid "Logon failed. Please verify your credentials and try again."
msgstr "Falhou início de sessão. Por favor verifique as suas credenciais e tente novamente."
#. [konnet.error.http.networkError]
#. defaultMessage is:
#. Network error. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnet.error.http.networkError"
msgid "Network error. Please check your connection and try again."
msgstr "Erro de rede. Por favor verifique as ligações e tente novamente."
#. [konnect.login.nextButton.label]
#. defaultMessage is:
#. Next
#: i18n/src/messages.json
msgctxt "konnect.login.nextButton.label"
msgid "Next"
msgstr "Seguinte"
#. [konnect.login.passwordField.label]
#. defaultMessage is:
#. Password
#: i18n/src/messages.json
msgctxt "konnect.login.passwordField.label"
msgid "Password"
msgstr "Palavra-passe"
#. [konnect.goodbye.message.confirm]
#. defaultMessage is:
#. Press the button below, to sign out from your Kopano account now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.confirm"
msgid "Press the button below, to sign out from your Kopano account now."
msgstr "Carregue no botão abaixo para terminar sessão na sua conta Kopano agora."
#. [konnect.login.retryButton.label]
#. defaultMessage is:
#. Retry
#: i18n/src/messages.json
msgctxt "konnect.login.retryButton.label"
msgid "Retry"
msgstr "Tentar novamente"
#. [konnect.scopeDescription.scope]
#. defaultMessage is:
#. Scope: {scope}
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.scope"
msgid "Scope: {scope}"
msgstr "Contexto: {scope}"
#. [konnect.login.headline]
#. defaultMessage is:
#. Sign in
#: i18n/src/messages.json
msgctxt "konnect.login.headline"
msgid "Sign in"
msgstr "Iniciar sessão"
#. [konnect.goodbye.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.signoutButton.label"
msgid "Sign out"
msgstr "Terminar sessão"
#. [konnect.welcome.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.welcome.signoutButton.label"
msgid "Sign out"
msgstr "Terminar sessão"
#. [konnect.error.http.unexpectedResponseStatus]
#. defaultMessage is:
#. Unexpected HTTP response: {status}. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseStatus"
msgid "Unexpected HTTP response: {status}. Please check your connection and try again."
msgstr "Resposta HTTP inesperada: {status}. Por favor verifique a sua ligação e tente novamente."
#. [konnect.error.http.unexpectedResponseState]
#. defaultMessage is:
#. Unexpected response state: {state}
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseState"
msgid "Unexpected response state: {state}"
msgstr "Resposta de estado inesperada: {state}"
#. [konnect.chooseaccount.useOther.label]
#. defaultMessage is:
#. Use another account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.label"
msgid "Use another account"
msgstr "Use outra conta"
#. [konnect.login.usernameField.label]
#. defaultMessage is:
#. Username
#: i18n/src/messages.json
msgctxt "konnect.login.usernameField.label"
msgid "Username"
msgstr "Utilizador"
#. [konnect.welcome.headline]
#. defaultMessage is:
#. Welcome {displayName}
#: i18n/src/messages.json
msgctxt "konnect.welcome.headline"
msgid "Welcome {displayName}"
msgstr "Bem vindo {displayName}"
#. [konnect.welcome.message]
#. defaultMessage is:
#. You are signed in - awesome!
#: i18n/src/messages.json
msgctxt "konnect.welcome.message"
msgid "You are signed in - awesome!"
msgstr "Iniciou sessão - fantástico!"
#. [konnect.goodbye.message.close]
#. defaultMessage is:
#. You can close this window now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.close"
msgid "You can close this window now."
msgstr "Pode fechar esta janela agora."
#. [konnect.goodbye.confirm.subHeader]
#. defaultMessage is:
#. please confirm sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.subHeader"
msgid "please confirm sign out"
msgstr "por favor confirme o fim de sessão"
#. [konnect.chooseaccount.subHeader]
#. defaultMessage is:
#. to sign in to Kopano
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.subHeader"
msgid "to sign in to Kopano"
msgstr "para iniciar sessão no Kopano"
#. [konnect.login.subHeader]
#. defaultMessage is:
#. with your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.login.subHeader"
msgid "with your Kopano account"
msgstr "com a sua conta Kopano"
#. [konnect.goodbye.subHeader]
#. defaultMessage is:
#. you have been signed out from your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.goodbye.subHeader"
msgid "you have been signed out from your Kopano account"
msgstr "a sessão da sua conta Kopano foi terminada"
#. [konnect.consent.message]
#. defaultMessage is:
#. {clientDisplayName} wants to
#: i18n/src/messages.json
msgctxt "konnect.consent.message"
msgid "{clientDisplayName} wants to"
msgstr "{clientDisplayName} quer"

309
konnectd/ui/i18n/ru.po Normal file
View File

@@ -0,0 +1,309 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2019-05-09T14:09:27.715Z\n"
"PO-Revision-Date: 2019-08-27 08:46+0000\n"
"Last-Translator: Sotneo <kerovsot@gmail.com>\n"
"Language-Team: Russian <http://translate.kopano.io/projects/kopano/konnect/ru/>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 2.4\n"
#. [konnect.chooseaccount.useOther.persona.label]
#. defaultMessage is:
#. ?
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.persona.label"
msgid "?"
msgstr "?"
#. [konnect.scopeDescription.aliasBasic]
#. defaultMessage is:
#. Access your basic account information
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.aliasBasic"
msgid "Access your basic account information"
msgstr "Доступ к вашей основной учетной записи"
#. [konnect.consent.allowButton.label]
#. defaultMessage is:
#. Allow
#: i18n/src/messages.json
msgctxt "konnect.consent.allowButton.label"
msgid "Allow"
msgstr "Разрешить"
#. [konnect.consent.question]
#. defaultMessage is:
#. Allow {clientDisplayName} to do this?
#: i18n/src/messages.json
msgctxt "konnect.consent.question"
msgid "Allow {clientDisplayName} to do this?"
msgstr "Разрешить {clientDisplayName} сделать это?"
#. [konnect.consent.consequence]
#. defaultMessage is:
#. By clicking Allow, you allow this app to use your information.
#: i18n/src/messages.json
msgctxt "konnect.consent.consequence"
msgid "By clicking Allow, you allow this app to use your information."
msgstr "Нажимая Разрешить, ты даёте разрешение этому приложению использовать вашу информацию."
#. [konnect.consent.cancelButton.label]
#. defaultMessage is:
#. Cancel
#: i18n/src/messages.json
msgctxt "konnect.consent.cancelButton.label"
msgid "Cancel"
msgstr "Отмена"
#. [konnect.chooseaccount.headline]
#. defaultMessage is:
#. Choose an account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.headline"
msgid "Choose an account"
msgstr "Выберите учётную запись"
#. [konnect.consent.tooltip.client]
#. defaultMessage is:
#. Clicking "Allow" will redirect you to: {redirectURI}
#: i18n/src/messages.json
msgctxt "konnect.consent.tooltip.client"
msgid "Clicking \"Allow\" will redirect you to: {redirectURI}"
msgstr "После нажатия \"Разрешить\" вы будете перенаправлена на: {redirectURI}"
#. [konnect.error.login.validate.missingPassword]
#. defaultMessage is:
#. Enter a password
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingPassword"
msgid "Enter a password"
msgstr "Введите пароль"
#. [konnect.error.login.validate.missingUsername]
#. defaultMessage is:
#. Enter an username
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingUsername"
msgid "Enter an username"
msgstr "Введите имя пользователя"
#. [konnect.loading.error.headline]
#. defaultMessage is:
#. Failed to connect to server
#: i18n/src/messages.json
msgctxt "konnect.loading.error.headline"
msgid "Failed to connect to server"
msgstr "Не удалось подключиться к серверу"
#. [konnect.goodbye.headline]
#. defaultMessage is:
#. Goodbye
#: i18n/src/messages.json
msgctxt "konnect.goodbye.headline"
msgid "Goodbye"
msgstr "До свидания"
#. [konnect.goodbye.confirm.headline]
#. defaultMessage is:
#. Hello {displayName}
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.headline"
msgid "Hello {displayName}"
msgstr "Здравствуйте, {displayName}"
#. [konnect.consent.headline]
#. defaultMessage is:
#. Hi {displayName}
#: i18n/src/messages.json
msgctxt "konnect.consent.headline"
msgid "Hi {displayName}"
msgstr "Привет, {displayName}"
#. [konnect.scopeDescription.offlineAccess]
#. defaultMessage is:
#. Keep the allowed access persistently and forever
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.offlineAccess"
msgid "Keep the allowed access persistently and forever"
msgstr "Сохраните разрешение на доступ как постоянное"
#. [konnect.error.login.failed]
#. defaultMessage is:
#. Logon failed. Please verify your credentials and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.login.failed"
msgid "Logon failed. Please verify your credentials and try again."
msgstr "Не удалось войти. Пожалуйста, проверьте ваши учетные данные и попробуйте снова."
#. [konnet.error.http.networkError]
#. defaultMessage is:
#. Network error. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnet.error.http.networkError"
msgid "Network error. Please check your connection and try again."
msgstr "Сетевая ошибка. Пожалуйста, проверьте ваше соединение и попробуйте снова."
#. [konnect.login.nextButton.label]
#. defaultMessage is:
#. Next
#: i18n/src/messages.json
msgctxt "konnect.login.nextButton.label"
msgid "Next"
msgstr "Далее"
#. [konnect.login.passwordField.label]
#. defaultMessage is:
#. Password
#: i18n/src/messages.json
msgctxt "konnect.login.passwordField.label"
msgid "Password"
msgstr "Пароль"
#. [konnect.goodbye.message.confirm]
#. defaultMessage is:
#. Press the button below, to sign out from your Kopano account now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.confirm"
msgid "Press the button below, to sign out from your Kopano account now."
msgstr "Нажмите кнопку ниже, чтобы выйти из вашей учетной записи Kopano."
#. [konnect.login.retryButton.label]
#. defaultMessage is:
#. Retry
#: i18n/src/messages.json
msgctxt "konnect.login.retryButton.label"
msgid "Retry"
msgstr "Повторить"
#. [konnect.scopeDescription.scope]
#. defaultMessage is:
#. Scope: {scope}
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.scope"
msgid "Scope: {scope}"
msgstr "Охват: {scope}"
#. [konnect.login.headline]
#. defaultMessage is:
#. Sign in
#: i18n/src/messages.json
msgctxt "konnect.login.headline"
msgid "Sign in"
msgstr "Вход"
#. [konnect.goodbye.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.signoutButton.label"
msgid "Sign out"
msgstr "Выход"
#. [konnect.welcome.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.welcome.signoutButton.label"
msgid "Sign out"
msgstr "Выход"
#. [konnect.error.http.unexpectedResponseStatus]
#. defaultMessage is:
#. Unexpected HTTP response: {status}. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseStatus"
msgid "Unexpected HTTP response: {status}. Please check your connection and try again."
msgstr "Неожиданный ответ HTTP: {status}. Проверьте подключение и повторите попытку."
#. [konnect.error.http.unexpectedResponseState]
#. defaultMessage is:
#. Unexpected response state: {state}
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseState"
msgid "Unexpected response state: {state}"
msgstr "Неожиданный ответ: {state}"
#. [konnect.chooseaccount.useOther.label]
#. defaultMessage is:
#. Use another account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.label"
msgid "Use another account"
msgstr "Другой пользователь"
#. [konnect.login.usernameField.label]
#. defaultMessage is:
#. Username
#: i18n/src/messages.json
msgctxt "konnect.login.usernameField.label"
msgid "Username"
msgstr "Имя пользователя"
#. [konnect.welcome.headline]
#. defaultMessage is:
#. Welcome {displayName}
#: i18n/src/messages.json
msgctxt "konnect.welcome.headline"
msgid "Welcome {displayName}"
msgstr "Добро пожаловать, {displayName}"
#. [konnect.welcome.message]
#. defaultMessage is:
#. You are signed in - awesome!
#: i18n/src/messages.json
msgctxt "konnect.welcome.message"
msgid "You are signed in - awesome!"
msgstr "Вы вошли - круто!"
#. [konnect.goodbye.message.close]
#. defaultMessage is:
#. You can close this window now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.close"
msgid "You can close this window now."
msgstr "Теперь вы можете закрыть окно."
#. [konnect.goodbye.confirm.subHeader]
#. defaultMessage is:
#. please confirm sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.subHeader"
msgid "please confirm sign out"
msgstr "пожалуйста, подтвердите выход"
#. [konnect.chooseaccount.subHeader]
#. defaultMessage is:
#. to sign in to Kopano
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.subHeader"
msgid "to sign in to Kopano"
msgstr "для входа в Kopano"
#. [konnect.login.subHeader]
#. defaultMessage is:
#. with your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.login.subHeader"
msgid "with your Kopano account"
msgstr "с вашей учётной записью Kopano"
#. [konnect.goodbye.subHeader]
#. defaultMessage is:
#. you have been signed out from your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.goodbye.subHeader"
msgid "you have been signed out from your Kopano account"
msgstr "вы вышли из вашей учетной записи Kopano"
#. [konnect.consent.message]
#. defaultMessage is:
#. {clientDisplayName} wants to
#: i18n/src/messages.json
msgctxt "konnect.consent.message"
msgid "{clientDisplayName} wants to"
msgstr "{clientDisplayName} хочет"

310
konnectd/ui/i18n/sl.po Normal file
View File

@@ -0,0 +1,310 @@
msgid ""
msgstr ""
"POT-Creation-Date: 2019-05-09T14:09:27.715Z\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"MIME-Version: 1.0\n"
"X-Generator: react-intl-po\n"
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2019-08-30 11:46+0200\n"
"Last-Translator: root <root@transdoc.kopano.io>\n"
"Language-Team: Slovenian\n"
"Language: sl\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
"%100==4 ? 2 : 3);\n"
#. [konnect.chooseaccount.useOther.persona.label]
#. defaultMessage is:
#. ?
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.persona.label"
msgid "?"
msgstr ""
#. [konnect.scopeDescription.aliasBasic]
#. defaultMessage is:
#. Access your basic account information
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.aliasBasic"
msgid "Access your basic account information"
msgstr ""
#. [konnect.consent.allowButton.label]
#. defaultMessage is:
#. Allow
#: i18n/src/messages.json
msgctxt "konnect.consent.allowButton.label"
msgid "Allow"
msgstr ""
#. [konnect.consent.question]
#. defaultMessage is:
#. Allow {clientDisplayName} to do this?
#: i18n/src/messages.json
msgctxt "konnect.consent.question"
msgid "Allow {clientDisplayName} to do this?"
msgstr ""
#. [konnect.consent.consequence]
#. defaultMessage is:
#. By clicking Allow, you allow this app to use your information.
#: i18n/src/messages.json
msgctxt "konnect.consent.consequence"
msgid "By clicking Allow, you allow this app to use your information."
msgstr ""
#. [konnect.consent.cancelButton.label]
#. defaultMessage is:
#. Cancel
#: i18n/src/messages.json
msgctxt "konnect.consent.cancelButton.label"
msgid "Cancel"
msgstr ""
#. [konnect.chooseaccount.headline]
#. defaultMessage is:
#. Choose an account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.headline"
msgid "Choose an account"
msgstr ""
#. [konnect.consent.tooltip.client]
#. defaultMessage is:
#. Clicking "Allow" will redirect you to: {redirectURI}
#: i18n/src/messages.json
msgctxt "konnect.consent.tooltip.client"
msgid "Clicking \"Allow\" will redirect you to: {redirectURI}"
msgstr ""
#. [konnect.error.login.validate.missingPassword]
#. defaultMessage is:
#. Enter a password
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingPassword"
msgid "Enter a password"
msgstr ""
#. [konnect.error.login.validate.missingUsername]
#. defaultMessage is:
#. Enter an username
#: i18n/src/messages.json
msgctxt "konnect.error.login.validate.missingUsername"
msgid "Enter an username"
msgstr ""
#. [konnect.loading.error.headline]
#. defaultMessage is:
#. Failed to connect to server
#: i18n/src/messages.json
msgctxt "konnect.loading.error.headline"
msgid "Failed to connect to server"
msgstr ""
#. [konnect.goodbye.headline]
#. defaultMessage is:
#. Goodbye
#: i18n/src/messages.json
msgctxt "konnect.goodbye.headline"
msgid "Goodbye"
msgstr ""
#. [konnect.goodbye.confirm.headline]
#. defaultMessage is:
#. Hello {displayName}
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.headline"
msgid "Hello {displayName}"
msgstr ""
#. [konnect.consent.headline]
#. defaultMessage is:
#. Hi {displayName}
#: i18n/src/messages.json
msgctxt "konnect.consent.headline"
msgid "Hi {displayName}"
msgstr ""
#. [konnect.scopeDescription.offlineAccess]
#. defaultMessage is:
#. Keep the allowed access persistently and forever
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.offlineAccess"
msgid "Keep the allowed access persistently and forever"
msgstr ""
#. [konnect.error.login.failed]
#. defaultMessage is:
#. Logon failed. Please verify your credentials and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.login.failed"
msgid "Logon failed. Please verify your credentials and try again."
msgstr ""
#. [konnet.error.http.networkError]
#. defaultMessage is:
#. Network error. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnet.error.http.networkError"
msgid "Network error. Please check your connection and try again."
msgstr ""
#. [konnect.login.nextButton.label]
#. defaultMessage is:
#. Next
#: i18n/src/messages.json
msgctxt "konnect.login.nextButton.label"
msgid "Next"
msgstr ""
#. [konnect.login.passwordField.label]
#. defaultMessage is:
#. Password
#: i18n/src/messages.json
msgctxt "konnect.login.passwordField.label"
msgid "Password"
msgstr ""
#. [konnect.goodbye.message.confirm]
#. defaultMessage is:
#. Press the button below, to sign out from your Kopano account now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.confirm"
msgid "Press the button below, to sign out from your Kopano account now."
msgstr ""
#. [konnect.login.retryButton.label]
#. defaultMessage is:
#. Retry
#: i18n/src/messages.json
msgctxt "konnect.login.retryButton.label"
msgid "Retry"
msgstr ""
#. [konnect.scopeDescription.scope]
#. defaultMessage is:
#. Scope: {scope}
#: i18n/src/messages.json
msgctxt "konnect.scopeDescription.scope"
msgid "Scope: {scope}"
msgstr ""
#. [konnect.login.headline]
#. defaultMessage is:
#. Sign in
#: i18n/src/messages.json
msgctxt "konnect.login.headline"
msgid "Sign in"
msgstr ""
#. [konnect.goodbye.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.signoutButton.label"
msgid "Sign out"
msgstr ""
#. [konnect.welcome.signoutButton.label]
#. defaultMessage is:
#. Sign out
#: i18n/src/messages.json
msgctxt "konnect.welcome.signoutButton.label"
msgid "Sign out"
msgstr ""
#. [konnect.error.http.unexpectedResponseStatus]
#. defaultMessage is:
#. Unexpected HTTP response: {status}. Please check your connection and try again.
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseStatus"
msgid "Unexpected HTTP response: {status}. Please check your connection and try again."
msgstr ""
#. [konnect.error.http.unexpectedResponseState]
#. defaultMessage is:
#. Unexpected response state: {state}
#: i18n/src/messages.json
msgctxt "konnect.error.http.unexpectedResponseState"
msgid "Unexpected response state: {state}"
msgstr ""
#. [konnect.chooseaccount.useOther.label]
#. defaultMessage is:
#. Use another account
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.useOther.label"
msgid "Use another account"
msgstr ""
#. [konnect.login.usernameField.label]
#. defaultMessage is:
#. Username
#: i18n/src/messages.json
msgctxt "konnect.login.usernameField.label"
msgid "Username"
msgstr ""
#. [konnect.welcome.headline]
#. defaultMessage is:
#. Welcome {displayName}
#: i18n/src/messages.json
msgctxt "konnect.welcome.headline"
msgid "Welcome {displayName}"
msgstr ""
#. [konnect.welcome.message]
#. defaultMessage is:
#. You are signed in - awesome!
#: i18n/src/messages.json
msgctxt "konnect.welcome.message"
msgid "You are signed in - awesome!"
msgstr ""
#. [konnect.goodbye.message.close]
#. defaultMessage is:
#. You can close this window now.
#: i18n/src/messages.json
msgctxt "konnect.goodbye.message.close"
msgid "You can close this window now."
msgstr ""
#. [konnect.goodbye.confirm.subHeader]
#. defaultMessage is:
#. please confirm sign out
#: i18n/src/messages.json
msgctxt "konnect.goodbye.confirm.subHeader"
msgid "please confirm sign out"
msgstr ""
#. [konnect.chooseaccount.subHeader]
#. defaultMessage is:
#. to sign in to Kopano
#: i18n/src/messages.json
msgctxt "konnect.chooseaccount.subHeader"
msgid "to sign in to Kopano"
msgstr ""
#. [konnect.login.subHeader]
#. defaultMessage is:
#. with your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.login.subHeader"
msgid "with your Kopano account"
msgstr ""
#. [konnect.goodbye.subHeader]
#. defaultMessage is:
#. you have been signed out from your Kopano account
#: i18n/src/messages.json
msgctxt "konnect.goodbye.subHeader"
msgid "you have been signed out from your Kopano account"
msgstr ""
#. [konnect.consent.message]
#. defaultMessage is:
#. {clientDisplayName} wants to
#: i18n/src/messages.json
msgctxt "konnect.consent.message"
msgid "{clientDisplayName} wants to"
msgstr ""

View File

@@ -0,0 +1,187 @@
[
{
"id": "konnect.loading.error.headline",
"defaultMessage": "Failed to connect to server",
"filepath": "./src/components/Loading.js"
},
{
"id": "konnect.login.retryButton.label",
"defaultMessage": "Retry",
"filepath": "./src/components/Loading.js"
},
{
"id": "konnect.scopeDescription.aliasBasic",
"defaultMessage": "Access your basic account information",
"filepath": "./src/components/ScopesList.js"
},
{
"id": "konnect.scopeDescription.offlineAccess",
"defaultMessage": "Keep the allowed access persistently and forever",
"filepath": "./src/components/ScopesList.js"
},
{
"id": "konnect.scopeDescription.scope",
"defaultMessage": "Scope: {scope}",
"filepath": "./src/components/ScopesList.js"
},
{
"id": "konnect.goodbye.headline",
"defaultMessage": "Goodbye",
"filepath": "./src/containers/Goodbye/Goodbyescreen.js"
},
{
"id": "konnect.goodbye.subHeader",
"defaultMessage": "you have been signed out from your Kopano account",
"filepath": "./src/containers/Goodbye/Goodbyescreen.js"
},
{
"id": "konnect.goodbye.message.close",
"defaultMessage": "You can close this window now.",
"filepath": "./src/containers/Goodbye/Goodbyescreen.js"
},
{
"id": "konnect.goodbye.confirm.headline",
"defaultMessage": "Hello {displayName}",
"filepath": "./src/containers/Goodbye/Goodbyescreen.js"
},
{
"id": "konnect.goodbye.confirm.subHeader",
"defaultMessage": "please confirm sign out",
"filepath": "./src/containers/Goodbye/Goodbyescreen.js"
},
{
"id": "konnect.goodbye.message.confirm",
"defaultMessage": "Press the button below, to sign out from your Kopano account now.",
"filepath": "./src/containers/Goodbye/Goodbyescreen.js"
},
{
"id": "konnect.goodbye.signoutButton.label",
"defaultMessage": "Sign out",
"filepath": "./src/containers/Goodbye/Goodbyescreen.js"
},
{
"id": "konnect.chooseaccount.headline",
"defaultMessage": "Choose an account",
"filepath": "./src/containers/Login/Chooseaccount.js"
},
{
"id": "konnect.chooseaccount.subHeader",
"defaultMessage": "to sign in to Kopano",
"filepath": "./src/containers/Login/Chooseaccount.js"
},
{
"id": "konnect.chooseaccount.useOther.persona.label",
"defaultMessage": "?",
"filepath": "./src/containers/Login/Chooseaccount.js"
},
{
"id": "konnect.chooseaccount.useOther.label",
"defaultMessage": "Use another account",
"filepath": "./src/containers/Login/Chooseaccount.js"
},
{
"id": "konnect.consent.headline",
"defaultMessage": "Hi {displayName}",
"filepath": "./src/containers/Login/Consent.js"
},
{
"id": "konnect.consent.message",
"defaultMessage": "{clientDisplayName} wants to",
"filepath": "./src/containers/Login/Consent.js"
},
{
"id": "konnect.consent.tooltip.client",
"defaultMessage": "Clicking \"Allow\" will redirect you to: {redirectURI}",
"filepath": "./src/containers/Login/Consent.js"
},
{
"id": "konnect.consent.question",
"defaultMessage": "Allow {clientDisplayName} to do this?",
"filepath": "./src/containers/Login/Consent.js"
},
{
"id": "konnect.consent.consequence",
"defaultMessage": "By clicking Allow, you allow this app to use your information.",
"filepath": "./src/containers/Login/Consent.js"
},
{
"id": "konnect.consent.cancelButton.label",
"defaultMessage": "Cancel",
"filepath": "./src/containers/Login/Consent.js"
},
{
"id": "konnect.consent.allowButton.label",
"defaultMessage": "Allow",
"filepath": "./src/containers/Login/Consent.js"
},
{
"id": "konnect.login.headline",
"defaultMessage": "Sign in",
"filepath": "./src/containers/Login/Login.js"
},
{
"id": "konnect.login.subHeader",
"defaultMessage": "with your Kopano account",
"filepath": "./src/containers/Login/Login.js"
},
{
"id": "konnect.login.usernameField.label",
"defaultMessage": "Username",
"filepath": "./src/containers/Login/Login.js"
},
{
"id": "konnect.login.passwordField.label",
"defaultMessage": "Password",
"filepath": "./src/containers/Login/Login.js"
},
{
"id": "konnect.login.nextButton.label",
"defaultMessage": "Next",
"filepath": "./src/containers/Login/Login.js"
},
{
"id": "konnect.welcome.headline",
"defaultMessage": "Welcome {displayName}",
"filepath": "./src/containers/Welcome/Welcomescreen.js"
},
{
"id": "konnect.welcome.message",
"defaultMessage": "You are signed in - awesome!",
"filepath": "./src/containers/Welcome/Welcomescreen.js"
},
{
"id": "konnect.welcome.signoutButton.label",
"defaultMessage": "Sign out",
"filepath": "./src/containers/Welcome/Welcomescreen.js"
},
{
"id": "konnect.error.login.validate.missingUsername",
"defaultMessage": "Enter an username",
"filepath": "./src/errors/index.js"
},
{
"id": "konnect.error.login.validate.missingPassword",
"defaultMessage": "Enter a password",
"filepath": "./src/errors/index.js"
},
{
"id": "konnect.error.login.failed",
"defaultMessage": "Logon failed. Please verify your credentials and try again.",
"filepath": "./src/errors/index.js"
},
{
"id": "konnet.error.http.networkError",
"defaultMessage": "Network error. Please check your connection and try again.",
"filepath": "./src/errors/index.js"
},
{
"id": "konnect.error.http.unexpectedResponseStatus",
"defaultMessage": "Unexpected HTTP response: {status}. Please check your connection and try again.",
"filepath": "./src/errors/index.js"
},
{
"id": "konnect.error.http.unexpectedResponseState",
"defaultMessage": "Unexpected response state: {state}",
"filepath": "./src/errors/index.js"
}
]

View File

@@ -0,0 +1,18 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#1b223d">
<link rel="shortcut icon" href="%PUBLIC_URL%/static/favicon.ico" type="image/x-icon">
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600&display=swap" rel="stylesheet">
<meta property="csp-nonce" content="__CSP_NONCE__">
<title>Sign in &mdash; ownCloud</title>
</head>
<body>
<noscript>
You need to enable JavaScript to run this app.
</noscript>
<main id="root" class="oc-login-bg" data-path-prefix="__PATH_PREFIX__"></main>
</body>
</html>

View File

@@ -0,0 +1 @@
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="cloud" class="svg-inline--fa fa-cloud fa-w-20" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="#ffffff" d="M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4z"></path></svg>

After

Width:  |  Height:  |  Size: 479 B

45
konnectd/ui/src/Main.js Normal file
View File

@@ -0,0 +1,45 @@
import React, { PureComponent } from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import { BrowserRouter } from 'react-router-dom';
import Routes from './Routes';
class App extends PureComponent {
render() {
const { classes, hello, pathPrefix } = this.props;
return (
<BrowserRouter basename={pathPrefix}>
<Routes hello={hello}/>
</BrowserRouter>
);
}
reload(event) {
event.preventDefault();
window.location.reload();
}
}
App.propTypes = {
classes: PropTypes.object.isRequired,
hello: PropTypes.object,
updateAvailable: PropTypes.bool.isRequired,
pathPrefix: PropTypes.string.isRequired
};
const mapStateToProps = (state) => {
const { hello, updateAvailable, pathPrefix } = state.common;
return {
hello,
updateAvailable,
pathPrefix
};
};
export default connect(mapStateToProps)(App);

View File

@@ -0,0 +1,12 @@
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import store from './store';
import App from './Main';
it('renders without crashing', () => {
const div = document.createElement('div');
ReactDOM.render(<Provider store={store}><App/></Provider>, div);
});

8
konnectd/ui/src/Makefile Normal file
View File

@@ -0,0 +1,8 @@
all: images
.PHONY: images
images:
@$(MAKE) -C images
clean:
@$(MAKE) -C images clean

40
konnectd/ui/src/Routes.js Normal file
View File

@@ -0,0 +1,40 @@
import React from 'react';
import PropTypes from 'prop-types';
import { Route, Switch } from 'react-router-dom';
import AsyncComponent from 'kpop/es/AsyncComponent';
import PrivateRoute from './components/PrivateRoute';
const AsyncLogin = AsyncComponent(() =>
import(/* webpackChunkName: "containers-login" */ './containers/Login'));
const AsyncWelcome = AsyncComponent(() =>
import(/* webpackChunkName: "containers-welcome" */ './containers/Welcome'));
const AsyncGoodbye = AsyncComponent(() =>
import(/* webpackChunkName: "containers-goodbye" */ './containers/Goodbye'));
const Routes = ({ hello }) => (
<Switch>
<PrivateRoute
path="/welcome"
exact
component={AsyncWelcome}
hello={hello}
/>
<Route
path="/goodbye"
exact
component={AsyncGoodbye}
/>
<Route
path="/"
component={AsyncLogin}
/>
</Switch>
);
Routes.propTypes = {
hello: PropTypes.object
};
export default Routes;

View File

@@ -0,0 +1,133 @@
import axios from 'axios';
import { newHelloRequest } from '../models/hello';
import { withClientRequestState } from '../utils';
import {
ExtendedError,
ERROR_HTTP_UNEXPECTED_RESPONSE_STATUS,
ERROR_HTTP_UNEXPECTED_RESPONSE_STATE
} from '../errors';
import { handleAxiosError } from './utils';
import * as types from './types';
export function receiveError(error) {
return {
type: types.RECEIVE_ERROR,
error
};
}
export function resetHello() {
return {
type: types.RESET_HELLO
};
}
export function receiveHello(hello) {
const { success, username, displayName } = hello;
return {
type: types.RECEIVE_HELLO,
state: success === true,
username,
displayName,
hello
};
}
export function executeHello() {
return function(dispatch, getState) {
dispatch(resetHello());
const { flow, query } = getState().common;
const r = withClientRequestState(newHelloRequest(flow, query));
return axios.post('./identifier/_/hello', r, {
headers: {
'Kopano-Konnect-XSRF': '1'
}
}).then(response => {
switch (response.status) {
case 200:
// success.
return response.data;
case 204:
// not signed-in.
return {
success: false,
state: response.headers['kopano-konnect-state']
};
default:
// error.
throw new ExtendedError(ERROR_HTTP_UNEXPECTED_RESPONSE_STATUS, response);
}
}).then(response => {
if (response.state !== r.state) {
throw new ExtendedError(ERROR_HTTP_UNEXPECTED_RESPONSE_STATE, response);
}
dispatch(receiveHello(response));
return Promise.resolve(response);
}).catch(error => {
error = handleAxiosError(error);
dispatch(receiveError(error));
});
};
}
export function retryHello() {
return function(dispatch) {
dispatch(receiveError(null));
return dispatch(executeHello());
};
}
export function requestLogoff() {
return {
type: types.REQUEST_LOGOFF
};
}
export function receiveLogoff(state) {
return {
type: types.RECEIVE_LOGOFF,
state
};
}
export function executeLogoff() {
return function(dispatch) {
dispatch(resetHello());
dispatch(requestLogoff());
const r = withClientRequestState({});
return axios.post('./identifier/_/logoff', r, {
headers: {
'Kopano-Konnect-XSRF': '1'
}
}).then(response => {
switch (response.status) {
case 200:
// success.
return response.data;
default:
// error.
throw new ExtendedError(ERROR_HTTP_UNEXPECTED_RESPONSE_STATUS, response);
}
}).then(response => {
if (response.state !== r.state) {
throw new ExtendedError(ERROR_HTTP_UNEXPECTED_RESPONSE_STATE, response);
}
dispatch(receiveLogoff(response.success === true));
return Promise.resolve(response);
}).catch(error => {
error = handleAxiosError(error);
dispatch(receiveError(error));
});
};
}

View File

@@ -0,0 +1,291 @@
import axios from 'axios';
import queryString from 'query-string';
import { newHelloRequest } from '../models/hello';
import { withClientRequestState } from '../utils';
import {
ExtendedError,
ERROR_LOGIN_VALIDATE_MISSINGUSERNAME,
ERROR_LOGIN_VALIDATE_MISSINGPASSWORD,
ERROR_LOGIN_FAILED,
ERROR_HTTP_UNEXPECTED_RESPONSE_STATUS,
ERROR_HTTP_UNEXPECTED_RESPONSE_STATE
} from '../errors';
import * as types from './types';
import { receiveHello } from './common';
import { handleAxiosError } from './utils';
// Modes for logon.
export const ModeLogonUsernameEmptyPasswordCookie = '0';
export const ModeLogonUsernamePassword = '1';
export function updateInput(name, value) {
return {
type: types.UPDATE_INPUT,
name,
value
};
}
export function receiveValidateLogon(errors) {
return {
type: types.RECEIVE_VALIDATE_LOGON,
errors
};
}
export function requestLogon(username, password) {
return {
type: types.REQUEST_LOGON,
username,
password
};
}
export function receiveLogon(logon) {
const { success, errors } = logon;
return {
type: types.RECEIVE_LOGON,
success,
errors
};
}
export function requestConsent(allow=false) {
return {
type: allow ? types.REQUEST_CONSENT_ALLOW : types.REQUEST_CONSENT_CANCEL
};
}
export function receiveConsent(logon) {
const { success, errors } = logon;
return {
type: types.RECEIVE_CONSENT,
success,
errors
};
}
export function executeLogon(username, password, mode=ModeLogonUsernamePassword) {
return function(dispatch, getState) {
dispatch(requestLogon(username, password));
dispatch(receiveHello({
username
})); // Reset any hello state on logon.
const { flow, query } = getState().common;
// Prepare params based on mode.
const params = [];
switch (mode) {
case ModeLogonUsernamePassword:
// Username with password.
params.push(username, password, mode);
break;
case ModeLogonUsernameEmptyPasswordCookie:
// Username with empty password - this only works when the user is already signed in.
params.push(username, '', mode);
break;
}
const r = withClientRequestState({
params: params,
hello: newHelloRequest(flow, query)
});
return axios.post('./identifier/_/logon', r, {
headers: {
'Kopano-Konnect-XSRF': '1'
}
}).then(response => {
switch (response.status) {
case 200:
// success.
return response.data;
case 204:
// login failed.
return {
success: false,
state: response.headers['kopano-konnect-state'],
errors: {
http: new Error(ERROR_LOGIN_FAILED)
}
};
default:
// error.
throw new ExtendedError(ERROR_HTTP_UNEXPECTED_RESPONSE_STATUS, response);
}
}).then(response => {
if (response.state !== r.state) {
throw new ExtendedError(ERROR_HTTP_UNEXPECTED_RESPONSE_STATE, response);
}
let { hello } = response;
if (!hello) {
hello = {
success: response.success,
username
};
}
dispatch(receiveHello(hello));
dispatch(receiveLogon(response));
return Promise.resolve(response);
}).catch(error => {
error = handleAxiosError(error);
const errors = {
http: error
};
dispatch(receiveValidateLogon(errors));
return {
success: false,
errors: errors
};
});
};
}
export function executeConsent(allow=false, scope='') {
return function(dispatch, getState) {
dispatch(requestConsent(allow));
const { query } = getState().common;
const r = withClientRequestState({
allow,
scope,
client_id: query.client_id || '', // eslint-disable-line camelcase
redirect_uri: query.redirect_uri || '', // eslint-disable-line camelcase
ref: query.state || '',
flow_nonce: query.nonce || '' // eslint-disable-line camelcase
});
return axios.post('./identifier/_/consent', r, {
headers: {
'Kopano-Konnect-XSRF': '1'
}
}).then(response => {
switch (response.status) {
case 200:
// success.
return response.data;
case 204:
// cancel reply.
return {
success: true,
state: response.headers['kopano-konnect-state']
};
default:
// error.
throw new ExtendedError(ERROR_HTTP_UNEXPECTED_RESPONSE_STATUS, response);
}
}).then(response => {
if (response.state !== r.state) {
throw new ExtendedError(ERROR_HTTP_UNEXPECTED_RESPONSE_STATE, response);
}
dispatch(receiveConsent(response));
return Promise.resolve(response);
}).catch(error => {
error = handleAxiosError(error);
const errors = {
http: error
};
dispatch(receiveValidateLogon(errors));
return {
success: false,
errors: errors
};
});
};
}
export function validateUsernamePassword(username, password, isSignedIn) {
return function(dispatch) {
return new Promise((resolve, reject) => {
const errors = {};
if (!username) {
errors.username = new Error(ERROR_LOGIN_VALIDATE_MISSINGUSERNAME);
}
if (!password && !isSignedIn) {
errors.password = new Error(ERROR_LOGIN_VALIDATE_MISSINGPASSWORD);
}
dispatch(receiveValidateLogon(errors));
if (Object.keys(errors).length === 0) {
resolve(errors);
} else {
reject(errors);
}
});
};
}
export function executeLogonIfFormValid(username, password, isSignedIn) {
return (dispatch) => {
return dispatch(
validateUsernamePassword(username, password, isSignedIn)
).then(() => {
const mode = isSignedIn ? ModeLogonUsernameEmptyPasswordCookie : ModeLogonUsernamePassword;
return dispatch(executeLogon(username, password, mode));
}).catch((errors) => {
return {
success: false,
errors: errors
};
});
};
}
export function advanceLogonFlow(success, history, done=false, extraQuery={}) {
return (dispatch, getState) => {
if (!success) {
return;
}
const { flow, query, hello } = getState().common;
const q = Object.assign({}, query, extraQuery);
switch (flow) {
case 'oauth':
case 'consent':
case 'oidc':
if (hello.details.flow !== flow) {
// Ignore requested flow if hello flow does not match.
break;
}
if (!done && hello.details.next === 'consent') {
history.replace(`/consent${history.location.search}${history.location.hash}`);
return;
}
if (hello.details.continue_uri) {
q.prompt = 'none';
window.location.replace(hello.details.continue_uri + '?' + queryString.stringify(q));
return;
}
break;
default:
// Legacy stupid modes.
if (q.continue && q.continue.indexOf(document.location.origin) === 0) {
window.location.replace(q.continue);
return;
}
}
// Default action.
let target = '/welcome';
if (history.action === 'REPLACE') {
target = target + history.location.search + history.location.hash;
}
dispatch(receiveValidateLogon({})); // XXX(longsleep): hack to reset loading and errors.
history.push(target);
};
}

View File

@@ -0,0 +1,25 @@
export const RECEIVE_ERROR = 'RECEIVE_ERROR';
export const RESET_HELLO = 'RESET_HELLO';
export const EXECUTE_HELLO = 'EXECUTE_HELLO';
export const RECEIVE_HELLO = 'RECEIVE_HELLO';
export const RECEIVE_VALIDATE_LOGON = 'RECEIVE_VALIDATE_LOGON';
export const REQUEST_LOGON = 'REQUEST_LOGON';
export const EXECUTE_LOGON = 'EXECUTE_LOGON';
export const RECEIVE_LOGON = 'RECEIVE_LOGON';
export const UPDATE_INPUT = 'UPDATE_INPUT';
export const REQUEST_CONSENT_ALLOW = 'REQUEST_CONSENT_ALLOW';
export const REQUEST_CONSENT_CANCEL = 'REQUEST_CONSENT_CANCEL';
export const EXECUTE_CONSENT = 'EXECUTE_CONSENT';
export const RECEIVE_CONSENT = 'RECEIVE_CONSENT';
export const REQUEST_LOGOFF = 'REQUEST_LOGOFF';
export const EXECUTE_LOGOFF = 'EXECUTE_LOGOFF';
export const RECEIVE_LOGOFF = 'RECEIVE_LOGOFF';
export const SERVICE_WORKER_NEW_CONTENT = 'SERVICE_WORKER_NEW_CONTENT';
export const SERVICE_WORKER_READY = 'SERVICE_WORKER_READY';
export const SERVICE_WORKER_ERROR = 'SERVICE_WORKER_ERROR';
export const SERVICE_WORKER_OFFLINE = 'SERVICE_WORKER_OFFLINE';

View File

@@ -0,0 +1,18 @@
import {
ExtendedError,
ERROR_HTTP_NETWORK_ERROR,
ERROR_HTTP_UNEXPECTED_RESPONSE_STATUS
} from '../errors';
export function handleAxiosError(error) {
if (error.request) {
// Axios errors.
if (error.response) {
error = new ExtendedError(ERROR_HTTP_UNEXPECTED_RESPONSE_STATUS, error.response);
} else {
error = new ExtendedError(ERROR_HTTP_NETWORK_ERROR);
}
}
return error;
}

Some files were not shown because too many files have changed in this diff Show More