Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/passman.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpassman-bot <info@passman.cc>2021-03-22 17:29:33 +0300
committerpassman-bot <info@passman.cc>2021-03-22 17:29:33 +0300
commit3e00e9ec930674de0aad4033116ef9ac93963f26 (patch)
tree86f65d339dde694a889c3b1f77b3050950060e32
parent30bf561d97221015f14c88c3ba7c53a9983ef0d2 (diff)
Passman 2.3.72.3.7
Merge branch 'fix/noid/travismysqlerror' Signed-off-by: passman-bot <info@passman.cc>
-rw-r--r--appinfo/info.xml7
-rw-r--r--bower.json11
-rw-r--r--controller/credentialcontroller.php4
-rw-r--r--controller/translationcontroller.php4
-rw-r--r--css/passman.min.css4
-rw-r--r--js/passman.min.js12
-rw-r--r--js/settings-admin.js5
-rw-r--r--l10n/af.js2
-rw-r--r--l10n/af.json2
-rw-r--r--l10n/ar.js2
-rw-r--r--l10n/ar.json2
-rw-r--r--l10n/ast.js2
-rw-r--r--l10n/ast.json2
-rw-r--r--l10n/az.js1
-rw-r--r--l10n/az.json1
-rw-r--r--l10n/bg.js2
-rw-r--r--l10n/bg.json2
-rw-r--r--l10n/bn_BD.js1
-rw-r--r--l10n/bn_BD.json1
-rw-r--r--l10n/br.js2
-rw-r--r--l10n/br.json2
-rw-r--r--l10n/bs.js3
-rw-r--r--l10n/bs.json3
-rw-r--r--l10n/ca.js7
-rw-r--r--l10n/ca.json7
-rw-r--r--l10n/cs.js29
-rw-r--r--l10n/cs.json29
-rw-r--r--l10n/cy_GB.js1
-rw-r--r--l10n/cy_GB.json1
-rw-r--r--l10n/da.js3
-rw-r--r--l10n/da.json3
-rw-r--r--l10n/de.js15
-rw-r--r--l10n/de.json15
-rw-r--r--l10n/de_DE.js19
-rw-r--r--l10n/de_DE.json19
-rw-r--r--l10n/el.js5
-rw-r--r--l10n/el.json5
-rw-r--r--l10n/en_GB.js2
-rw-r--r--l10n/en_GB.json2
-rw-r--r--l10n/eo.js2
-rw-r--r--l10n/eo.json2
-rw-r--r--l10n/es.js5
-rw-r--r--l10n/es.json5
-rw-r--r--l10n/es_419.js1
-rw-r--r--l10n/es_419.json1
-rw-r--r--l10n/es_AR.js1
-rw-r--r--l10n/es_AR.json1
-rw-r--r--l10n/es_CL.js1
-rw-r--r--l10n/es_CL.json1
-rw-r--r--l10n/es_CO.js1
-rw-r--r--l10n/es_CO.json1
-rw-r--r--l10n/es_CR.js1
-rw-r--r--l10n/es_CR.json1
-rw-r--r--l10n/es_DO.js1
-rw-r--r--l10n/es_DO.json1
-rw-r--r--l10n/es_EC.js1
-rw-r--r--l10n/es_EC.json1
-rw-r--r--l10n/es_GT.js1
-rw-r--r--l10n/es_GT.json1
-rw-r--r--l10n/es_HN.js1
-rw-r--r--l10n/es_HN.json1
-rw-r--r--l10n/es_MX.js1
-rw-r--r--l10n/es_MX.json1
-rw-r--r--l10n/es_NI.js1
-rw-r--r--l10n/es_NI.json1
-rw-r--r--l10n/es_PA.js1
-rw-r--r--l10n/es_PA.json1
-rw-r--r--l10n/es_PE.js1
-rw-r--r--l10n/es_PE.json1
-rw-r--r--l10n/es_PR.js1
-rw-r--r--l10n/es_PR.json1
-rw-r--r--l10n/es_PY.js1
-rw-r--r--l10n/es_PY.json1
-rw-r--r--l10n/es_SV.js1
-rw-r--r--l10n/es_SV.json1
-rw-r--r--l10n/es_UY.js1
-rw-r--r--l10n/es_UY.json1
-rw-r--r--l10n/et_EE.js16
-rw-r--r--l10n/et_EE.json16
-rw-r--r--l10n/eu.js4
-rw-r--r--l10n/eu.json4
-rw-r--r--l10n/fa.js3
-rw-r--r--l10n/fa.json3
-rw-r--r--l10n/fi.js17
-rw-r--r--l10n/fi.json17
-rw-r--r--l10n/fr.js5
-rw-r--r--l10n/fr.json5
-rw-r--r--l10n/gl.js29
-rw-r--r--l10n/gl.json29
-rw-r--r--l10n/he.js3
-rw-r--r--l10n/he.json3
-rw-r--r--l10n/hr.js5
-rw-r--r--l10n/hr.json5
-rw-r--r--l10n/hu.js2
-rw-r--r--l10n/hu.json2
-rw-r--r--l10n/hy.js1
-rw-r--r--l10n/hy.json1
-rw-r--r--l10n/ia.js1
-rw-r--r--l10n/ia.json1
-rw-r--r--l10n/id.js2
-rw-r--r--l10n/id.json2
-rw-r--r--l10n/is.js4
-rw-r--r--l10n/is.json4
-rw-r--r--l10n/it.js5
-rw-r--r--l10n/it.json5
-rw-r--r--l10n/ja.js4
-rw-r--r--l10n/ja.json4
-rw-r--r--l10n/ka_GE.js1
-rw-r--r--l10n/ka_GE.json1
-rw-r--r--l10n/km.js1
-rw-r--r--l10n/km.json1
-rw-r--r--l10n/kn.js3
-rw-r--r--l10n/kn.json3
-rw-r--r--l10n/ko.js3
-rw-r--r--l10n/ko.json3
-rw-r--r--l10n/lb.js1
-rw-r--r--l10n/lb.json1
-rw-r--r--l10n/lt_LT.js3
-rw-r--r--l10n/lt_LT.json3
-rw-r--r--l10n/lv.js2
-rw-r--r--l10n/lv.json2
-rw-r--r--l10n/mk.js18
-rw-r--r--l10n/mk.json18
-rw-r--r--l10n/ms_MY.js3
-rw-r--r--l10n/ms_MY.json3
-rw-r--r--l10n/nb.js2
-rw-r--r--l10n/nb.json2
-rw-r--r--l10n/nl.js5
-rw-r--r--l10n/nl.json5
-rw-r--r--l10n/nn_NO.js1
-rw-r--r--l10n/nn_NO.json1
-rw-r--r--l10n/oc.js11
-rw-r--r--l10n/oc.json11
-rw-r--r--l10n/pl.js21
-rw-r--r--l10n/pl.json21
-rw-r--r--l10n/pt_BR.js5
-rw-r--r--l10n/pt_BR.json5
-rw-r--r--l10n/pt_PT.js1
-rw-r--r--l10n/pt_PT.json1
-rw-r--r--l10n/ro.js2
-rw-r--r--l10n/ro.json2
-rw-r--r--l10n/ru.js5
-rw-r--r--l10n/ru.json5
-rw-r--r--l10n/sc.js28
-rw-r--r--l10n/sc.json26
-rw-r--r--l10n/si.js38
-rw-r--r--l10n/si.json36
-rw-r--r--l10n/sk.js5
-rw-r--r--l10n/sk.json5
-rw-r--r--l10n/sl.js43
-rw-r--r--l10n/sl.json43
-rw-r--r--l10n/sq.js1
-rw-r--r--l10n/sq.json1
-rw-r--r--l10n/sr.js5
-rw-r--r--l10n/sr.json5
-rw-r--r--l10n/sr@latin.js1
-rw-r--r--l10n/sr@latin.json1
-rw-r--r--l10n/sv.js18
-rw-r--r--l10n/sv.json18
-rw-r--r--l10n/ta.js37
-rw-r--r--l10n/ta.json35
-rw-r--r--l10n/th.js1
-rw-r--r--l10n/th.json1
-rw-r--r--l10n/tr.js5
-rw-r--r--l10n/tr.json5
-rw-r--r--l10n/ug.js3
-rw-r--r--l10n/ug.json3
-rw-r--r--l10n/uk.js2
-rw-r--r--l10n/uk.json2
-rw-r--r--l10n/ur_PK.js1
-rw-r--r--l10n/ur_PK.json1
-rw-r--r--l10n/uz.js1
-rw-r--r--l10n/uz.json1
-rw-r--r--l10n/vi.js1
-rw-r--r--l10n/vi.json1
-rw-r--r--l10n/zh_CN.js5
-rw-r--r--l10n/zh_CN.json5
-rw-r--r--l10n/zh_HK.js366
-rw-r--r--l10n/zh_HK.json366
-rw-r--r--l10n/zh_TW.js2
-rw-r--r--l10n/zh_TW.json2
-rw-r--r--lib/AppInfo/Application.php140
-rw-r--r--lib/Search/Provider.php110
-rw-r--r--lib/Service/SettingsService.php4
-rw-r--r--templates/part.admin.php8
185 files changed, 1517 insertions, 530 deletions
diff --git a/appinfo/info.xml b/appinfo/info.xml
index f9e6c166..46d719ee 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -19,7 +19,7 @@ Features:
- Import from various password managers (KeePass, LastPass, DashLane, ZOHO, Clipperz.is )
For an demo of this app visit [https://demo.passman.cc](https://demo.passman.cc)
]]></description>
- <version>2.3.6</version>
+ <version>2.3.7</version>
<licence>agpl</licence>
<author homepage="https://github.com/brantje">Sander Brand</author>
<author homepage="https://github.com/animalillo">Marcos Zuriaga</author>
@@ -37,13 +37,12 @@ For an demo of this app visit [https://demo.passman.cc](https://demo.passman.cc)
<screenshot small-thumbnail="https://img.passman.cc/thumbs/share_credential.png">https://img.passman.cc/share_credential.png</screenshot>
<screenshot small-thumbnail="https://img.passman.cc/thumbs/password_audit.png">https://img.passman.cc/password_audit.png</screenshot>
<dependencies>
- <php min-version="7.0"/>
+ <php min-version="7.2"/>
<database>sqlite</database>
<database>pgsql</database>
<database min-version="5.5">mysql</database>
<lib>openssl</lib>
- <nextcloud min-version="17" max-version="19"/>
- <owncloud min-version="10" max-version="10"/>
+ <nextcloud min-version="20" max-version="22"/>
</dependencies>
<background-jobs>
diff --git a/bower.json b/bower.json
index 8567955a..b044148a 100644
--- a/bower.json
+++ b/bower.json
@@ -30,14 +30,17 @@
"angular-translate": "2.9.0",
"angular-xeditable": "0.3.0",
"angular-datetime-picker": "",
- "ng-clipboard": "1.5.10",
- "ng-password-meter": "0.4.0",
+ "ng-clipboard": "1.0.2",
+ "ng-password-meter": "0.1.6",
"ng-tags-input": "3.1.1",
"papa-parse": "4.1.2",
"llqrcode": "0.0.2",
- "sha": " 2.0.1",
+ "jssha": " 2.0.1",
"sjcl": " 1.0.8",
- "ui-sortable": "0.19.0",
+ "ui-sortable": "1.0",
"zxcvbn": "4.4.2"
+ },
+ "resolutions": {
+ "angular": "1.5.8"
}
}
diff --git a/controller/credentialcontroller.php b/controller/credentialcontroller.php
index 96e5accc..abc76a21 100644
--- a/controller/credentialcontroller.php
+++ b/controller/credentialcontroller.php
@@ -85,6 +85,7 @@ class CredentialController extends ApiController {
'username' => $username,
'password' => $password,
'url' => $url,
+ 'icon' => $favicon,
'favicon' => $favicon,
'renew_interval' => $renew_interval,
'expire_time' => $expire_time,
@@ -94,7 +95,6 @@ class CredentialController extends ApiController {
'otp' => $otp,
'hidden' => $hidden,
'compromised' => $compromised
-
);
$credential = $this->credentialService->createCredential($credential);
@@ -353,4 +353,4 @@ class CredentialController extends ApiController {
$this->credentialRevisionService->updateRevision($revision);
return new JSONResponse(array());
}
-} \ No newline at end of file
+}
diff --git a/controller/translationcontroller.php b/controller/translationcontroller.php
index b29873c5..f740e155 100644
--- a/controller/translationcontroller.php
+++ b/controller/translationcontroller.php
@@ -269,7 +269,7 @@ class TranslationController extends ApiController {
'enable.link.sharing' => $this->trans->t('Enable link sharing'),
'share.until.date' => $this->trans->t('Share until date'),
'expire.views' => $this->trans->t('Expire after views'),
- 'click.share' => $this->trans->t('Click \"Share\" first'),
+ 'click.share' => $this->trans->t('Click "Share" first'),
'show.files' => $this->trans->t('Show files'),
@@ -375,7 +375,7 @@ class TranslationController extends ApiController {
'new.vault.name' => $this->trans->t('Please give your new vault a name.'),
'new.vault.pass' => $this->trans->t('Vault password'),
'new.vault.passr' => $this->trans->t('Repeat vault password'),
- 'new.vault.sharing_key_notice' => $this->trans->t('Your sharing keys will have a strength of 1024 bit, which you can change in \"Settings\" later .'),
+ 'new.vault.sharing_key_notice' => $this->trans->t('Your sharing keys will have a strength of 1024 bit, which you can change in "Settings" later.'),
'new.vault.create' => $this->trans->t('Create vault'),
'go.back.vaults' => $this->trans->t('Go back to vaults'),
'input.vault.password' => $this->trans->t('Please input the password for'),
diff --git a/css/passman.min.css b/css/passman.min.css
index eecdd900..55b354de 100644
--- a/css/passman.min.css
+++ b/css/passman.min.css
@@ -1,4 +1,4 @@
-@charset "UTF-8";/*!
+/*!
angular-xeditable - 0.3.0
Edit-in-place for angular.js
Build date: 2016-09-06
@@ -27,4 +27,4 @@ Build date: 2016-09-06
*//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.row:after,.row:before{content:" ";display:table}.center-block{display:block;margin-left:auto;margin-right:auto}.fa.fa-pull-left,.fa.pull-left{margin-right:.3em}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}.fa,.fa-stack{display:inline-block}/*!
* Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */@font-face{font-family:FontAwesome;src:url(fontawesome-webfont.eot?v=4.6.3);src:url(fontawesome-webfont.eot?#iefix&v=4.6.3) format('embedded-opentype'),url(fontawesome-webfont.woff2?v=4.6.3) format('woff2'),url(fontawesome-webfont.woff?v=4.6.3) format('woff'),url(fontawesome-webfont.ttf?v=4.6.3) format('truetype'),url(fontawesome-webfont.svg?v=4.6.3#fontawesomeregular) format('svg');font-weight:400;font-style:normal}.fa{font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa.fa-pull-right,.fa.pull-right{margin-left:.3em}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.pass-meter .details,.pass-meter .pass-meter-message{font-family:"Arial Black",Gadget,sans-serif;font-size:10px;line-height:10px;color:#555;min-height:7px}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-y-combinator:before,.fa-yc:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-television:before,.fa-tv:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:"\f2a3"}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.pass-meter{width:100%;padding-top:3px;padding-bottom:30px}.pass-meter.hidden{display:none}.pass-meter .details,.pass-meter .pass-meter-message{margin-top:3px}.pass-meter-col{float:left;width:25%;padding:1px}.pass-meter-col .indicator{border-radius:3px;background-color:#eee;height:5px}.pass-meter-col.poor .indicator{background-color:#ef4e3a}.pass-meter-col.weak .indicator{background-color:#F27B1C}.pass-meter-col.good .indicator{background-color:#6c3}.pass-meter-col.strong .indicator{background-color:#33A7E3}.pass-meter .pass-meter-message{width:49%;text-align:right;float:right}.pass-meter .details{width:49%;text-align:left;float:left;cursor:pointer}.pass-meter .details:hover,.pass-meter .link{color:#06f!important}.pass-meter .link:hover{text-decoration:underline}.detail_box .row .col{float:left;width:49%}.match-sequence .sequence{float:left;width:auto;margin-right:10px}.match-sequence .sequence table td:nth-child(2){padding-left:4px}.sequence .token{text-align:center}.sequence code{border:1px solid;padding:3px}tags-input{display:block}tags-input *,tags-input :after,tags-input :before{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}tags-input .host{position:relative;margin-top:5px;margin-bottom:5px;height:100%}tags-input .host:active{outline:0}tags-input .tags{-moz-appearance:textfield;-webkit-appearance:textfield;padding:1px;overflow:hidden;word-wrap:break-word;cursor:text;background-color:#fff;border:1px solid #a9a9a9;box-shadow:1px 1px 1px 0 #d3d3d3 inset;height:100%}tags-input .tags.focused{outline:0;-webkit-box-shadow:0 0 3px 1px rgba(5,139,242,.6);-moz-box-shadow:0 0 3px 1px rgba(5,139,242,.6);box-shadow:0 0 3px 1px rgba(5,139,242,.6)}tags-input .tags .tag-list{margin:0;padding:0;list-style-type:none}tags-input .tags .tag-item{margin:2px;padding:0 5px;display:inline-block;float:left;font:14px "Helvetica Neue",Helvetica,Arial,sans-serif;height:26px;line-height:25px;border:1px solid #acacac;border-radius:3px;color:#ececec}tags-input .tags .tag-item.selected{background:#ce3702!important}tags-input .tags .tag-item .remove-button{margin:0 0 0 5px;padding:0;border:none;background:0 0;cursor:pointer;vertical-align:middle;font:700 16px Arial,sans-serif;color:#585858}tags-input .tags .input.invalid-tag,tags-input .tags .tag-item .remove-button:active{color:red}tags-input .tags .input{border:0;outline:0;margin:2px;padding:0 0 0 5px;float:left;height:26px;font:14px "Helvetica Neue",Helvetica,Arial,sans-serif}tags-input .tags .input::-ms-clear{display:none}tags-input.ng-invalid .tags{-webkit-box-shadow:0 0 3px 1px rgba(255,0,0,.6);-moz-box-shadow:0 0 3px 1px rgba(255,0,0,.6);box-shadow:0 0 3px 1px rgba(255,0,0,.6)}tags-input[disabled] .host:focus{outline:0}tags-input[disabled] .tags{background-color:#eee;cursor:default}tags-input[disabled] .tags .tag-item{opacity:.65;background:-webkit-linear-gradient(top,#f0f9ff 0,rgba(203,235,255,.75) 47%,rgba(161,219,255,.62) 100%);background:linear-gradient(to bottom,#f0f9ff 0,rgba(203,235,255,.75) 47%,rgba(161,219,255,.62) 100%)}tags-input[disabled] .tags .tag-item .remove-button{cursor:default}tags-input[disabled] .tags .tag-item .remove-button:active{color:#585858}tags-input[disabled] .tags .input{background-color:#eee;cursor:default}tags-input .autocomplete{margin-top:5px;position:absolute;padding:5px 0;z-index:999;width:100%;background-color:#fff;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.iconpicker-dialog,.iconpicker-dialog .ui-dialog,.shareincoming-dialog,.shareincoming-dialog .ui-dialog{box-shadow:0 0 30px var(--color-box-shadow)}tags-input .autocomplete .suggestion-list{margin:0;padding:0;list-style-type:none;max-height:280px;overflow-y:auto;position:relative}tags-input .autocomplete .suggestion-item{padding:5px 10px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font:16px "Helvetica Neue",Helvetica,Arial,sans-serif;color:#000;background-color:#fff}tags-input .autocomplete .suggestion-item.selected,tags-input .autocomplete .suggestion-item.selected em{color:#fff;background-color:#0097cf}tags-input .autocomplete .suggestion-item em{font:normal 700 16px "Helvetica Neue",Helvetica,Arial,sans-serif;color:#000;background-color:#fff}.button-geen{background:#37ce02;color:#fff}.button-geen:hover{background:#3ad802;color:#fff}.button-red{background:#ce3702;color:#fff}.button-red:hover{background:#d83a02;color:#fff}.tab_header{width:calc(100vw - 300px);margin:0;list-style:none;padding:0}.tab_header li.tab:first-child{margin-left:0}.tab_header li.tab{float:left;border-bottom-width:0;margin:0;padding:10px;cursor:pointer;border-right:1px solid #eee;-webkit-transition:background-color 250ms linear;-moz-transition:background-color 250ms linear;-o-transition:background-color 250ms linear;-ms-transition:background-color 250ms linear;transition:background-color 250ms linear}.tab_header li.tab .indicator{display:none}.tab_header li.inactive{background-color:#fff!important;color:unset!important}.tab_header li.active .indicator{display:inline-block;position:absolute;height:7px;left:0;right:0;bottom:-1px}.tab_container{border:1px solid #eee;border-top-color:#0082c9;border-bottom-width:0;clear:both;padding:0 1em}.pw-gen{overflow:hidden}.pw-gen input{width:calc(100% - 76px)!important;float:left;background:#fff;color:#555;cursor:text;font-family:inherit;border:1px solid #ddd;outline:0;border-radius:3px;margin:3px 3px 3px 0;padding:7px 6px 5px;font-size:13px;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;background-clip:padding-box}.pw-gen .generate_pw{float:left;margin-top:3px;margin-left:-3px;padding-bottom:1px}.pw-gen .generate_pw .cell{padding:5px;display:inline-block;font-size:14px;border:1px solid #ddd;background-color:#eaeaea;cursor:pointer}.pw-gen .generate_pw .cell:hover{color:#06f}.pw-gen .generate_pw .cell:last-child{-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;background-clip:padding-box}.iconpicker-dialog{border-radius:var(--border-radius-large)!important;z-index:9999!important}.iconpicker-dialog .ui-dialog{border-radius:var(--border-radius-large)}.iconpicker-dialog .ui-widget-header{background:0 0}.iconpicker-dialog .ui-icon-closethick{background-position:inherit}.iconpicker-dialog .ui-button .ui-icon{background-image:var(--icon-close-000)}.iconpicker-dialog .ui-button-icon,.iconpicker-dialog .ui-corner-all,.iconpicker-dialog .ui-icon,.iconpicker-dialog .ui-icon-closethick{border:none!important}.iconpicker-dialog .ui-button,.iconpicker-dialog .ui-state-default{background:#fff!important}#iconPicker .iconList{float:left;width:60%;max-height:310px;overflow:auto}#iconPicker .iconList .icon{padding:10px;cursor:pointer;float:left}#iconPicker .iconList .icon img{cursor:pointer}#iconPicker .iconModifier{margin-left:10px;float:right;width:calc(40% - 10px)}#iconPicker .iconSearch{width:100%}#iconPicker .arrow{cursor:pointer;padding-left:10px;width:10px;float:left}#iconPicker .collapsible{cursor:pointer;padding-left:10px;text-align:left;font-size:15px}#iconPicker .content{display:none}#iconPicker .content_show{display:block}.shareincoming-dialog{border-radius:var(--border-radius-large)!important;z-index:9999!important}.shareincoming-dialog .ui-dialog{border-radius:var(--border-radius-large)}.shareincoming-dialog .ui-widget-header{background:0 0!important}.shareincoming-dialog .ui-icon-closethick{background-position:inherit}.shareincoming-dialog .ui-button .ui-icon{background-image:var(--icon-close-000)}.shareincoming-dialog .ui-button:hover .ui-icon{background-image:var(--icon-close-000);cursor:pointer!important}.shareincoming-dialog .ui-button-icon,.shareincoming-dialog .ui-corner-all,.shareincoming-dialog .ui-icon,.shareincoming-dialog .ui-icon-closethick{border:none!important}.shareincoming-dialog .ui-button,.shareincoming-dialog .ui-state-default{background:#fff!important}.warning_bar{position:absolute;width:100%;padding:12px;font-weight:700;text-align:center;z-index:1800;background-color:red;color:#fff}.vault_wrapper .login_form,.vault_wrapper .reset_form{padding:16px}.warning_bar .fa-times{float:right;color:#000;cursor:pointer}.vault_wrapper{margin:0 auto auto;max-width:420px;-webkit-border-radius:5px;border-radius:5px;background-clip:padding-box;box-shadow:0 1px 1px #777;background:#eee;display:block}.vault_wrapper .vaultlist{z-index:500}.vault_wrapper .vaultlist div,.vault_wrapper .vaultlist li,.vault_wrapper .vaultlist small,.vault_wrapper .vaultlist span{cursor:pointer}.vault_wrapper .vaultlist small{color:#8e8e8e}.vault_wrapper .vaultlist li.selected{background-color:#0082c9!important;color:#ddd}.vault_wrapper .vaultlist li{border-bottom:1px solid #8e8e8e;padding:16px}.vault_wrapper .vaultlist li:hover{background-color:#f7f7f7}.vault_wrapper .login_form .error{color:#ce3702}.vault_wrapper .login_form .pw-input .last_access{color:#8e8e8e}.vault_wrapper .login_form input[type=password],.vault_wrapper .login_form input[type=text]{width:100%;-webkit-border-radius:5px;border-radius:5px;background-clip:padding-box}.vault_wrapper .login_form .button_wrapper .button{width:45%;display:inline-block}.vault_wrapper .login_form .button{margin-top:10px}.vault_wrapper .reset_form label{margin-top:20px;display:block}.vault_wrapper .reset_form input[type=text]{width:100%}.vault_wrapper .login_opts{margin-bottom:10px}@media screen and (max-width:768px){.vault_wrapper{width:90%}}#content{padding-top:47px!important;height:100%;width:100%}.icon-image{width:16px}.angularjs-datetime-picker{z-index:1000}.link{color:var(--color-primary)}#app-sidebar{height:auto}#app-sidebar .sidebar{display:inline-block}#app-sidebar .sidebar .sidebar-icon{margin-right:15px}#app-sidebar .sidebar .sidebar-icon .icon-image,#app-sidebar .sidebar .sidebar-icon i{width:44px}#app-sidebar .sidebar .sidebar-label{float:right;line-height:44px}.vaultlist_sidebar_hidden{width:100vw!important;margin-left:0!important}#app-content{margin-left:300px;overflow-x:hidden}@media only screen and (max-width:769px){#app-content{width:100vw}}@media only screen and (min-width:770px){#app-content{width:calc(100vw - 300px)}}#app-content #app-content-wrapper{min-height:95%;display:flex;height:calc(100vh - 49px)}#app-content #app-content-wrapper #passman-controls{text-align:center;border-bottom:1px solid #c9c9c9}@media screen and (max-width:765px){#app-content #app-content-wrapper #passman-controls.sidebar-shown .title{display:none}}@media screen and (min-width:769px) and (max-width:1120px){#app-content #app-content-wrapper #passman-controls.sidebar-shown .title{display:none}}#app-content #app-content-wrapper .title{text-align:center;display:inline-block;font-weight:700;margin-top:10px}@media screen and (max-width:575px){#app-content #app-content-wrapper .title{display:none}}@media screen and (min-width:769px) and (max-width:820px){#app-content #app-content-wrapper .title{display:none}}#app-content #app-content-wrapper .breadcrumb{float:left}#app-content #app-content-wrapper .actions.creatable{float:left;overflow:hidden}#app-content #app-content-wrapper .actions.creatable .bubble{position:relative;width:185px;-webkit-border-radius:5px;border-radius:5px;background-clip:padding-box;box-shadow:0 1px 10px rgba(50,50,50,.7)}#app-content #app-content-wrapper .actions.creatable .bubble ul li{padding-left:10px}#app-content #app-content-wrapper .actions.creatable .bubble ul .menuitem{font-size:12px;display:inline}#app-content #app-content-wrapper .actions.creatable .bubble:after{right:inherit;left:10px;top:-19px}#app-content #app-content-wrapper .viewModes{float:right;margin-right:5px;margin-top:3px}#app-content #app-content-wrapper .viewModes .view-mode:first-child{-webkit-border-bottom-left-radius:5px;border-bottom-left-radius:5px;-webkit-border-top-left-radius:5px;border-top-left-radius:5px;background-clip:padding-box;border:1px solid rgba(240,240,240,.9)}#app-content #app-content-wrapper .viewModes .view-mode:last-child{-webkit-border-bottom-right-radius:5px;border-bottom-right-radius:5px;-webkit-border-top-right-radius:5px;border-top-right-radius:5px;background-clip:padding-box;border:1px solid rgba(240,240,240,.9)}#app-content #app-content-wrapper .viewModes .view-mode{background-color:rgba(240,240,240,.9);cursor:pointer;display:inline-block;padding:7px}#app-content #app-content-wrapper .viewModes .view-mode.active{display:inline-block;padding:7px;background-color:rgba(226,226,226,.9)}#app-content #app-content-wrapper .searchboxContainer{visibility:hidden;display:none;margin-right:14px;float:right}#app-content #app-content-wrapper .searchboxContainer .searchbox{display:inline-block}#app-content #app-content-wrapper .searchboxContainer .searchclear{color:#ccc;cursor:pointer;font-size:18px;height:14px;margin:auto;position:absolute!important;right:10px;top:12px;z-index:99999999}#app-content #app-content-wrapper .searchboxContainer .searchOptions{position:relative;bottom:5px;background:#fff;border:1px solid #ddd;padding:5px;width:calc(100% - 3px);box-shadow:3px 3px 5px #888;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;background-clip:padding-box}#app-content #app-content-wrapper .credential-table{width:100%}#app-content #app-content-wrapper .credential-table tr:hover{background-color:#f5f5f5}#app-content #app-content-wrapper .credential-table tr.selected{background-color:#f8f8f8}#app-content #app-content-wrapper .credential-table tr .compromised{background-color:#f74040}#app-content #app-content-wrapper .credential-table tr .compromised:hover{background-color:#e10909}#app-content #app-content-wrapper .credential-table tr .compromised-list{display:inline-block;margin-left:50px}#app-content #app-content-wrapper .credential-table tr .compromised-list .icon{height:18px}#app-content #app-content-wrapper .credential-table tr .compromised-list .text{font-style:italic;font-weight:700}#app-content #app-content-wrapper .credential-table tr td{cursor:pointer;padding:5px;border-bottom:1px solid #eee}#app-content #app-content-wrapper .credential-table tr td .icon{font-size:19px;float:left;margin-right:5px;margin-left:3px}#app-content #app-content-wrapper .credential-table tr td .icon-more{display:inline-block;float:right;margin-left:5px;margin-top:1px;opacity:.4;height:20px;width:32px;cursor:pointer}#app-content #app-content-wrapper .credential-table tr td .icon-more:hover{opacity:1}#app-content #app-content-wrapper .credential-table tr td .popovermenu{margin-top:25px;height:100px;width:100px;right:-2px!important;box-shadow:0 1px 10px rgba(50,50,50,.7)}#app-content #app-content-wrapper .credential-table tr td .popovermenu ul{display:block;width:100px;height:75px}#app-content #app-content-wrapper .credential-table tr td .popovermenu ul li{padding:0}#app-content #app-content-wrapper .credential-table tr td .popovermenu ul .menuitem{font-size:12px;display:inline}#app-content #app-content-wrapper .credential-table tr td .popovermenu .action{padding:10px;margin:-10px}#app-content #app-content-wrapper .tags{float:right}#app-content #app-content-wrapper .tags .tag{background-color:rgba(240,240,240,.9);padding:4px;font-size:12px;margin-right:3px;-webkit-border-radius:5px;border-radius:5px;background-clip:padding-box}#app-content #app-content-wrapper .tags .tag:last-child{margin-right:8px}#app-content #app-content-wrapper .grid-view{width:100%;height:100%;display:flex;flex-wrap:wrap}#app-content #app-content-wrapper .grid-view .credential{display:flex;width:100%;border:2px solid rgba(240,240,240,.9);margin:25px;-webkit-border-radius:10px;border-radius:10px;background-clip:padding-box}#app-content #app-content-wrapper .grid-view .credential .credential_content{display:flex;padding:2px;flex-direction:column;width:100%;cursor:pointer;font-size:1.75em}#app-content #app-content-wrapper .grid-view .credential .credential_content .label{padding-top:.5em;padding-right:1em;line-height:1.3em;word-wrap:break-word;float:right}#app-content #app-content-wrapper .grid-view .credential .credential_content .tags{margin:0 0 auto;text-align:right}#app-content #app-content-wrapper .grid-view .credential .credential_content .tags .tag{color:#000!important;margin-top:5px;display:inline-block;left:0}@media all and (min-width:40em){#app-content #app-content-wrapper .grid-view .credential{width:40%}}@media all and (min-width:58em){#app-content #app-content-wrapper .grid-view .credential{width:26%}}@media all and (min-width:78em){#app-content #app-content-wrapper .grid-view .credential{width:20%}}#app-content #app-content-wrapper .edit_credential input[type=password],#app-content #app-content-wrapper .edit_credential input[type=text],#app-content #app-content-wrapper .edit_credential tags-input .tags{width:100%}#app-content #app-content-wrapper .edit_credential{padding-top:10px}#app-content #app-content-wrapper .edit_credential label{display:block}#app-content #app-content-wrapper .edit_credential .compromised-button{margin-top:15px;background-color:#e60000;color:#000}#app-content #app-content-wrapper .edit_credential .compromised-details{margin-top:15px;display:flex}#app-content #app-content-wrapper .edit_credential .compromised-details .icon{float:left;height:20px}#app-content #app-content-wrapper .edit_credential .compromised-details .text{padding-left:5px;padding-right:30px;color:#e9322d}#app-content #app-content-wrapper .edit_credential .tags{float:left}#app-content #app-content-wrapper .edit_credential .tags .tag{background-color:rgba(240,240,240,.9);padding:4px;font-size:11px}#app-content #app-content-wrapper .edit_credential .credential_textarea{width:100%;height:100px}#app-content #app-content-wrapper .edit_credential .password_settings label{overflow:hidden}#app-content #app-content-wrapper .edit_credential .password_settings label input[type=checkbox]{width:auto!important;float:left}#app-content #app-content-wrapper .edit_credential .password_settings label .label{float:left}#app-content #app-content-wrapper .edit_credential .password_settings label .label.sm{font-size:12px}#app-content #app-content-wrapper .edit_credential .password_settings .password-settings-padding-left-fix{padding-left:0!important}#app-content #app-content-wrapper .edit_credential .field-value .valueInput{padding-right:0}#app-content #app-content-wrapper .edit_credential .field-value .valueInput .pw-gen .generate_pw .cell:last-child,#app-content #app-content-wrapper .edit_credential .field-value .valueInput input{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;background-clip:padding-box}#app-content #app-content-wrapper .edit_credential .field-value .selectType{padding-left:0;margin-left:0}#app-content #app-content-wrapper .edit_credential .field-value .selectType select{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;background-clip:padding-box}#app-content #app-content-wrapper .edit_credential .custom_fields,#app-content #app-content-wrapper .edit_credential .files{margin-top:10px}#app-content #app-content-wrapper .edit_credential .custom_fields table,#app-content #app-content-wrapper .edit_credential .files table{width:100%}#app-content #app-content-wrapper .edit_credential .custom_fields table thead th.dragger,#app-content #app-content-wrapper .edit_credential .files table thead th.dragger{width:3%}#app-content #app-content-wrapper .edit_credential .custom_fields table thead th,#app-content #app-content-wrapper .edit_credential .files table thead th{color:#fff}#app-content #app-content-wrapper .edit_credential .custom_fields table thead th.field_actions,#app-content #app-content-wrapper .edit_credential .files table thead th.field_actions{width:15%}#app-content #app-content-wrapper .edit_credential .custom_fields table tr:hover,#app-content #app-content-wrapper .edit_credential .files table tr:hover{background-color:transparent}#app-content #app-content-wrapper .edit_credential .custom_fields table tr td.dragger,#app-content #app-content-wrapper .edit_credential .files table tr td.dragger{width:3%;text-align:center;cursor:move;cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}#app-content #app-content-wrapper .edit_credential .custom_fields table tr td.field_actions,#app-content #app-content-wrapper .edit_credential .files table tr td.field_actions{font-size:13px;width:15%}#app-content #app-content-wrapper .edit_credential .custom_fields table tr td.field_actions i,#app-content #app-content-wrapper .edit_credential .files table tr td.field_actions i{cursor:pointer}#app-content #app-content-wrapper .edit_credential .custom_fields table tr td,#app-content #app-content-wrapper .edit_credential .custom_fields table tr th,#app-content #app-content-wrapper .edit_credential .files table tr td,#app-content #app-content-wrapper .edit_credential .files table tr th{width:20%;padding:5px}#app-content #app-content-wrapper .edit_credential .custom_fields table tr td .editable-has-buttons.editable-input,#app-content #app-content-wrapper .edit_credential .custom_fields table tr th .editable-has-buttons.editable-input,#app-content #app-content-wrapper .edit_credential .files table tr td .editable-has-buttons.editable-input,#app-content #app-content-wrapper .edit_credential .files table tr th .editable-has-buttons.editable-input{width:55%}#app-content #app-content-wrapper .edit_credential .custom_fields table tr td,#app-content #app-content-wrapper .edit_credential .files table tr td{height:50px;vertical-align:middle}#app-content #app-content-wrapper .edit_credential .otpText{padding-right:10px}#app-content #app-content-wrapper .edit_credential .import-selection select{margin-left:15px}#app-content #app-content-wrapper .main_list{flex:1;float:left;height:auto;overflow:auto;width:100%}#app-content #app-content-wrapper .main_list .share{overflow:hidden}#app-content #app-content-wrapper .main_list .nopasswords{margin-right:auto;margin-left:auto;margin-top:10%;text-align:center}#app-content #app-content-wrapper .main_list .belowList{margin-right:auto;margin-left:auto;margin-top:1%;text-align:center}#app-content #app-content-wrapper .app_sidebar{float:right;padding:10px;overflow-y:auto}.credential_field,.credential_field .tools,.icon-label,.inputfile{overflow:hidden}#app-content #app-content-wrapper .app_sidebar h2{margin-bottom:10px;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:90%}#app-content #app-content-wrapper .app_sidebar .close.icon-close{position:absolute;top:10px;right:10px;cursor:pointer}#app-content #app-content-wrapper .app_sidebar.item_selected{height:25%;display:inline-block}#app-content #app-content-wrapper .app_sidebar .credential-data .compromised-details{margin-top:15px;margin-bottom:15px;display:flex}#app-content #app-content-wrapper .app_sidebar .credential-data .compromised-details .icon{float:left;height:20px}#app-content #app-content-wrapper .app_sidebar .credential-data .compromised-details .text{padding-left:5px;padding-right:30px;color:#e9322d}#app-content #app-content-wrapper .app_sidebar .credential-data .row{margin-bottom:11px}#app-content #app-content-wrapper .app_sidebar .credential-data .tags{margin-top:15px;margin-bottom:15px;float:none}#app-content #app-content-wrapper .app_sidebar .credential-data .tags .tag{background-color:rgba(240,240,240,.9);padding:4px;margin-right:3px}.credential_field .tools .cell,.inputfile+label{margin-right:4px;cursor:pointer}.credential_field .cell,.credential_field .value{float:left}.credential_field .value{white-space:nowrap;text-overflow:ellipsis;max-width:100%}.credential_field .tools{margin-left:10px;margin-top:8px;float:left}.progress{margin-top:10px;height:20px}.progress .progress-bar{position:relative;height:20px;background-image:none;background-color:#0082c9}.progress .progress-bar .progress-label{position:absolute;top:0;z-index:2;text-align:center;width:100%}.loaderContainer{height:140px;width:120px;margin-top:30px;margin-left:-60px;top:30%;left:50%;position:absolute}.loaderContainer .text{width:120px;text-align:center}.loader{border-bottom:10px solid #1d2d44;border-left:10px solid #c9c9c9;border-right:10px solid #c9c9c9;border-top:10px solid #c9c9c9;height:120px;width:120px;border-radius:120px;animation:1.1s linear 0s normal none infinite running load8}@keyframes load8{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.inputfile{width:.1px;height:.1px;opacity:0;position:absolute;z-index:-1}.inputfile+label{font-size:1.25em;background-color:rgba(240,240,240,.9);margin-top:4px;padding:5px;border-right:1px solid #c9c9c9}.inputfile+label:hover,.inputfile:focus+label{background-color:#c9c9c9}.btn-danger{color:#000;background-color:red}.icon-label{display:flex}.icon-label input{float:left;background:#fff;color:#555;cursor:text;font-family:inherit;border:1px solid #ddd;outline:0;border-radius:3px;margin:3px 0;padding:7px 6px 5px;font-size:13px;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;background-clip:padding-box}.icon-label .icon-picker{float:left;margin-top:3px}.icon-label .icon-picker .cell{height:32px;padding:7px 12px 2px;font-size:14px;border:1px solid #ddd;background-color:#eaeaea;cursor:pointer;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;background-clip:padding-box}.settings-container div,.settings-container-label{padding-left:15px}.icon-label .icon-picker .cell:hover{color:#06f}.error,.shared_table .fa-trash:hover{color:#ce3702}.settings-container button{width:80%;margin-left:15px;margin-right:15px}#app-navigation>ul>li>a{z-index:auto}#app-navigation>ul>li{display:block}.nav-trashbin{width:inherit!important;border-right:1px solid #eee}.nav-trashbin a{background-color:#fff!important;opacity:1!important;z-index:140}.nav-trashbin a.active{background-image:var(--icon-delete-e9322d)}.nav-trashbin a .fa{margin-right:15px}#app-navigation .collapsible:hover .app-navigation-entry-bullet{background:var(--color-primary)!important}#app-navigation a .selected{opacity:1!important;box-shadow:inset 4px 0 var(--color-primary)!important}#app-navigation li a tags-input,#app-navigation li a.taginput{opacity:1}#app-navigation li .app-navigation-entry-bullet-color{background-color:var(--color-primary)}#app-navigation li .bullet-color-red{background-color:red}#app-navigation li .bullet-color-yellow{background-color:#ebbb00}#app-navigation li .bullet-color-green{background-color:#4db728}#app-navigation li .highlight-selected{background-color:var(--color-primary)}#app-navigation li .autocomplete{position:relative}#app-navigation li a{overflow:visible}#app-navigation li a tags-input li{width:auto!important}.hidden-list{display:none!important}.icon-expired{background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'><path d='M0 0h24v24H0z' fill='none'/><path d='M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z'/></svg>")}.sharing_table .button{min-height:42px;margin:5px 0 0}.sharing_table td:first-child{width:55%}.sharing_table td:first-child tags-input .tags,.table{width:100%}.sharing_table td:first-child .autocomplete{margin-top:35px}.share_credential{padding-top:10px}.share_credential input{width:auto}.share_credential>div{margin-bottom:10px}.shared_table .pending{margin-right:10px}.shared_table .fa-trash{cursor:pointer}.spacer-top-30{margin-top:30px}.scan-result-table td{vertical-align:top!important}.scan-result-table .score{width:55%;padding-left:0;padding-right:15px}.scan-result-table .label-audit{width:15%}.detail_box{border:1px solid var(--color-border-dark);margin-top:25px;padding:5px}.import_log{max-height:600px;overflow-y:auto}.import_log textarea{width:90%;height:200px}.tab_container.settings{margin-bottom:50px}.tab_container.settings textarea{height:300px}.import-steps{padding-left:16px;margin-bottom:10px}.import-steps li{list-style-type:disc}.import-table-outter{overflow-x:scroll}.import-table{padding-right:15px}.import-table .inspect{text-align:center;width:25px;cursor:pointer}.import-table td,.import-table th{text-align:left;padding:3px 5px}.searchbox button{position:relative!important}.searchbox-settings{position:relative;top:50%;opacity:.6}.searchbox-settings:hover{opacity:1;cursor:pointer}.custom-search-dialog{border-radius:var(--border-radius-large)!important;box-shadow:0 0 30px var(--color-box-shadow);z-index:9999!important}.custom-search-dialog .ui-dialog{border-radius:var(--border-radius-large);box-shadow:0 0 30px var(--color-box-shadow)}.custom-search-dialog .ui-widget-header{background:0 0}.custom-search-dialog .ui-icon-closethick{background-position:inherit;border:none!important}.custom-search-dialog .ui-button-icon,.custom-search-dialog .ui-icon{border:none!important}.custom-search-dialog .ui-button .ui-icon{background-image:var(--icon-close-000)}.custom-search-dialog .ui-dialog-buttonpane.ui-helper-clearfix{display:none}.app-passman{overflow-x:hidden}.template-hidden{display:none!important}.hide-animation{display:inherit!important;transition:ease-in-out .15s}.hide-animation.ng-hide{opacity:0}.ui-dialog{z-index:9999}#notification .row{margin-left:0!important;margin-right:0!important}#passman-controls{position:fixed;margin:-45px 0 0;right:0;left:0;border-bottom:1px solid #c9c9c9;padding:0!important;background-color:rgba(255,255,255,.95);z-index:50;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;height:44px!important}@media only screen and (max-width:769px){#passman-controls .breadcrumb{padding-left:15px}}#passman-controls .breadcrumb .addCredential{padding-top:1px}@media only screen and (max-width:768px){#passman-controls{width:100%}}@media only screen and (min-width:768px){#app-navigation+#app-content #passman-controls{left:300px;width:calc(100% - 300px)!important}}#passman-controls,#passman-controls .button,#passman-controls input[type=submit],#passman-controls input[type=text],#passman-controls input[type=password],#passman-controls select{box-sizing:border-box;display:inline-block;height:36px;padding:7px 10px}.nopadding{padding-right:0;padding-left:0}input[type=checkbox]{min-height:inherit}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.ui-button.ui-widget{min-height:unset!important} \ No newline at end of file
+ */@font-face{font-family:FontAwesome;src:url(fontawesome-webfont.eot?v=4.6.3);src:url(fontawesome-webfont.eot?#iefix&v=4.6.3) format('embedded-opentype'),url(fontawesome-webfont.woff2?v=4.6.3) format('woff2'),url(fontawesome-webfont.woff?v=4.6.3) format('woff'),url(fontawesome-webfont.ttf?v=4.6.3) format('truetype'),url(fontawesome-webfont.svg?v=4.6.3#fontawesomeregular) format('svg');font-weight:400;font-style:normal}.fa{font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa.fa-pull-right,.fa.pull-right{margin-left:.3em}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.pass-meter .details,.pass-meter .pass-meter-message{font-family:"Arial Black",Gadget,sans-serif;font-size:10px;line-height:10px;color:#555;min-height:7px}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-y-combinator:before,.fa-yc:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-television:before,.fa-tv:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:"\f2a3"}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.pass-meter{width:100%;padding-top:3px;padding-bottom:30px}.pass-meter.hidden{display:none}.pass-meter .details,.pass-meter .pass-meter-message{margin-top:3px}.pass-meter-col{float:left;width:25%;padding:1px}.pass-meter-col .indicator{border-radius:3px;background-color:#eee;height:5px}.pass-meter-col.poor .indicator{background-color:#ef4e3a}.pass-meter-col.weak .indicator{background-color:#F27B1C}.pass-meter-col.good .indicator{background-color:#6c3}.pass-meter-col.strong .indicator{background-color:#33A7E3}.pass-meter .pass-meter-message{width:49%;text-align:right;float:right}.pass-meter .details{width:49%;text-align:left;float:left;cursor:pointer}.pass-meter .details:hover,.pass-meter .link{color:#06f!important}.pass-meter .link:hover{text-decoration:underline}.detail_box .row .col{float:left;width:49%}.match-sequence .sequence{float:left;width:auto;margin-right:10px}.match-sequence .sequence table td:nth-child(2){padding-left:4px}.sequence .token{text-align:center}.sequence code{border:1px solid;padding:3px}tags-input{display:block}tags-input *,tags-input :after,tags-input :before{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}tags-input .host{position:relative;margin-top:5px;margin-bottom:5px;height:100%}tags-input .host:active{outline:0}tags-input .tags{-moz-appearance:textfield;-webkit-appearance:textfield;padding:1px;overflow:hidden;word-wrap:break-word;cursor:text;background-color:#fff;border:1px solid #a9a9a9;box-shadow:1px 1px 1px 0 #d3d3d3 inset;height:100%}tags-input .tags.focused{outline:0;-webkit-box-shadow:0 0 3px 1px rgba(5,139,242,.6);-moz-box-shadow:0 0 3px 1px rgba(5,139,242,.6);box-shadow:0 0 3px 1px rgba(5,139,242,.6)}tags-input .tags .tag-list{margin:0;padding:0;list-style-type:none}tags-input .tags .tag-item{margin:2px;padding:0 5px;display:inline-block;float:left;font:14px "Helvetica Neue",Helvetica,Arial,sans-serif;height:26px;line-height:25px;border:1px solid #acacac;border-radius:3px;color:#ececec}tags-input .tags .tag-item.selected{background:#ce3702!important}tags-input .tags .tag-item .remove-button{margin:0 0 0 5px;padding:0;border:none;background:0 0;cursor:pointer;vertical-align:middle;font:700 16px Arial,sans-serif;color:#585858}tags-input .tags .input.invalid-tag,tags-input .tags .tag-item .remove-button:active{color:red}tags-input .tags .input{border:0;outline:0;margin:2px;padding:0 0 0 5px;float:left;height:26px;font:14px "Helvetica Neue",Helvetica,Arial,sans-serif}tags-input .tags .input::-ms-clear{display:none}tags-input.ng-invalid .tags{-webkit-box-shadow:0 0 3px 1px rgba(255,0,0,.6);-moz-box-shadow:0 0 3px 1px rgba(255,0,0,.6);box-shadow:0 0 3px 1px rgba(255,0,0,.6)}tags-input[disabled] .host:focus{outline:0}tags-input[disabled] .tags{background-color:#eee;cursor:default}tags-input[disabled] .tags .tag-item{opacity:.65;background:-webkit-linear-gradient(top,#f0f9ff 0,rgba(203,235,255,.75) 47%,rgba(161,219,255,.62) 100%);background:linear-gradient(to bottom,#f0f9ff 0,rgba(203,235,255,.75) 47%,rgba(161,219,255,.62) 100%)}tags-input[disabled] .tags .tag-item .remove-button{cursor:default}tags-input[disabled] .tags .tag-item .remove-button:active{color:#585858}tags-input[disabled] .tags .input{background-color:#eee;cursor:default}tags-input .autocomplete{margin-top:5px;position:absolute;padding:5px 0;z-index:999;width:100%;background-color:#fff;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.iconpicker-dialog,.iconpicker-dialog .ui-dialog,.shareincoming-dialog,.shareincoming-dialog .ui-dialog{box-shadow:0 0 30px var(--color-box-shadow)}tags-input .autocomplete .suggestion-list{margin:0;padding:0;list-style-type:none;max-height:280px;overflow-y:auto;position:relative}tags-input .autocomplete .suggestion-item{padding:5px 10px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font:16px "Helvetica Neue",Helvetica,Arial,sans-serif;color:#000;background-color:#fff}tags-input .autocomplete .suggestion-item.selected,tags-input .autocomplete .suggestion-item.selected em{color:#fff;background-color:#0097cf}tags-input .autocomplete .suggestion-item em{font:normal 700 16px "Helvetica Neue",Helvetica,Arial,sans-serif;color:#000;background-color:#fff}.button-geen{background:#37ce02;color:#fff}.button-geen:hover{background:#3ad802;color:#fff}.button-red{background:#ce3702;color:#fff}.button-red:hover{background:#d83a02;color:#fff}.tab_header{width:calc(100vw - 300px);margin:0;list-style:none;padding:0}.tab_header li.tab:first-child{margin-left:0}.tab_header li.tab{float:left;border-bottom-width:0;margin:0;padding:10px;cursor:pointer;border-right:1px solid #eee;-webkit-transition:background-color 250ms linear;-moz-transition:background-color 250ms linear;-o-transition:background-color 250ms linear;-ms-transition:background-color 250ms linear;transition:background-color 250ms linear}.tab_header li.tab .indicator{display:none}.tab_header li.inactive{background-color:#fff!important;color:unset!important}.tab_header li.active .indicator{display:inline-block;position:absolute;height:7px;left:0;right:0;bottom:-1px}.tab_container{border:1px solid #eee;border-top-color:#0082c9;border-bottom-width:0;clear:both;padding:0 1em}.pw-gen{overflow:hidden}.pw-gen input{width:calc(100% - 76px)!important;float:left;background:#fff;color:#555;cursor:text;font-family:inherit;border:1px solid #ddd;outline:0;border-radius:3px;margin:3px 3px 3px 0;padding:7px 6px 5px;font-size:13px;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;background-clip:padding-box}.pw-gen .generate_pw{float:left;margin-top:3px;margin-left:-3px;padding-bottom:1px}.pw-gen .generate_pw .cell{padding:5px;display:inline-block;font-size:14px;border:1px solid #ddd;background-color:#eaeaea;cursor:pointer}.pw-gen .generate_pw .cell:hover{color:#06f}.pw-gen .generate_pw .cell:last-child{-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;background-clip:padding-box}.iconpicker-dialog{border-radius:var(--border-radius-large)!important;z-index:9999!important}.iconpicker-dialog .ui-dialog{border-radius:var(--border-radius-large)}.iconpicker-dialog .ui-widget-header{background:0 0}.iconpicker-dialog .ui-icon-closethick{background-position:inherit}.iconpicker-dialog .ui-button .ui-icon{background-image:var(--icon-close-000)}.iconpicker-dialog .ui-button-icon,.iconpicker-dialog .ui-corner-all,.iconpicker-dialog .ui-icon,.iconpicker-dialog .ui-icon-closethick{border:none!important}.iconpicker-dialog .ui-button,.iconpicker-dialog .ui-state-default{background:#fff!important}#iconPicker .iconList{float:left;width:60%;max-height:310px;overflow:auto}#iconPicker .iconList .icon{padding:10px;cursor:pointer;float:left}#iconPicker .iconList .icon img{cursor:pointer}#iconPicker .iconModifier{margin-left:10px;float:right;width:calc(40% - 10px)}#iconPicker .iconSearch{width:100%}#iconPicker .arrow{cursor:pointer;padding-left:10px;width:10px;float:left}#iconPicker .collapsible{cursor:pointer;padding-left:10px;text-align:left;font-size:15px}#iconPicker .content{display:none}#iconPicker .content_show{display:block}.shareincoming-dialog{border-radius:var(--border-radius-large)!important;z-index:9999!important}.shareincoming-dialog .ui-dialog{border-radius:var(--border-radius-large)}.shareincoming-dialog .ui-widget-header{background:0 0!important}.shareincoming-dialog .ui-icon-closethick{background-position:inherit}.shareincoming-dialog .ui-button .ui-icon{background-image:var(--icon-close-000)}.shareincoming-dialog .ui-button:hover .ui-icon{background-image:var(--icon-close-000);cursor:pointer!important}.shareincoming-dialog .ui-button-icon,.shareincoming-dialog .ui-corner-all,.shareincoming-dialog .ui-icon,.shareincoming-dialog .ui-icon-closethick{border:none!important}.shareincoming-dialog .ui-button,.shareincoming-dialog .ui-state-default{background:#fff!important}.warning_bar{position:absolute;width:100%;padding:12px;font-weight:700;text-align:center;z-index:1800;background-color:red;color:#fff}.vault_wrapper .login_form,.vault_wrapper .reset_form{padding:16px}.warning_bar .fa-times{float:right;color:#000;cursor:pointer}.vault_wrapper{margin:0 auto auto;max-width:420px;-webkit-border-radius:5px;border-radius:5px;background-clip:padding-box;box-shadow:0 1px 1px #777;background:#eee;display:block}.vault_wrapper .vaultlist{z-index:500}.vault_wrapper .vaultlist div,.vault_wrapper .vaultlist li,.vault_wrapper .vaultlist small,.vault_wrapper .vaultlist span{cursor:pointer}.vault_wrapper .vaultlist small{color:#8e8e8e}.vault_wrapper .vaultlist li.selected{background-color:#0082c9!important;color:#ddd}.vault_wrapper .vaultlist li{border-bottom:1px solid #8e8e8e;padding:16px}.vault_wrapper .vaultlist li:hover{background-color:#f7f7f7}.vault_wrapper .login_form .error{color:#ce3702}.vault_wrapper .login_form .pw-input .last_access{color:#8e8e8e}.vault_wrapper .login_form input[type=password],.vault_wrapper .login_form input[type=text]{width:100%;-webkit-border-radius:5px;border-radius:5px;background-clip:padding-box}.vault_wrapper .login_form .button_wrapper .button{width:45%;display:inline-block}.vault_wrapper .login_form .button{margin-top:10px}.vault_wrapper .reset_form label{margin-top:20px;display:block}.vault_wrapper .reset_form input[type=text]{width:100%}.vault_wrapper .login_opts{margin-bottom:10px}@media screen and (max-width:768px){.vault_wrapper{width:90%}}#content{padding-top:47px!important;height:100%;width:100%}.icon-image{width:16px}.angularjs-datetime-picker{z-index:1000}.link{color:var(--color-primary)}#app-sidebar{height:auto}#app-sidebar .sidebar{display:inline-block}#app-sidebar .sidebar .sidebar-icon{margin-right:15px}#app-sidebar .sidebar .sidebar-icon .icon-image,#app-sidebar .sidebar .sidebar-icon i{width:44px}#app-sidebar .sidebar .sidebar-label{float:right;line-height:44px}.vaultlist_sidebar_hidden{width:100vw!important;margin-left:0!important}#app-content{margin-left:300px;overflow-x:hidden}@media only screen and (max-width:769px){#app-content{width:100vw}}@media only screen and (min-width:770px){#app-content{width:calc(100vw - 300px)}}#app-content #app-content-wrapper{min-height:95%;display:flex;height:calc(100vh - 49px)}#app-content #app-content-wrapper #passman-controls{text-align:center;border-bottom:1px solid #c9c9c9}@media screen and (max-width:765px){#app-content #app-content-wrapper #passman-controls.sidebar-shown .title{display:none}}@media screen and (min-width:769px) and (max-width:1120px){#app-content #app-content-wrapper #passman-controls.sidebar-shown .title{display:none}}#app-content #app-content-wrapper .title{text-align:center;display:inline-block;font-weight:700;margin-top:10px}@media screen and (max-width:820px){#app-content #app-content-wrapper .title{display:none}}#app-content #app-content-wrapper .breadcrumb{float:left}#app-content #app-content-wrapper .actions.creatable{float:left;overflow:hidden}#app-content #app-content-wrapper .actions.creatable .bubble{position:relative;width:185px;-webkit-border-radius:5px;border-radius:5px;background-clip:padding-box;box-shadow:0 1px 10px rgba(50,50,50,.7)}#app-content #app-content-wrapper .actions.creatable .bubble ul li{padding-left:10px}#app-content #app-content-wrapper .actions.creatable .bubble ul .menuitem{font-size:12px;display:inline}#app-content #app-content-wrapper .actions.creatable .bubble:after{right:inherit;left:10px;top:-19px}#app-content #app-content-wrapper .viewModes{float:right;margin-right:5px;margin-top:3px}#app-content #app-content-wrapper .viewModes .view-mode:first-child{-webkit-border-bottom-left-radius:5px;border-bottom-left-radius:5px;-webkit-border-top-left-radius:5px;border-top-left-radius:5px;background-clip:padding-box;border:1px solid rgba(240,240,240,.9)}#app-content #app-content-wrapper .viewModes .view-mode:last-child{-webkit-border-bottom-right-radius:5px;border-bottom-right-radius:5px;-webkit-border-top-right-radius:5px;border-top-right-radius:5px;background-clip:padding-box;border:1px solid rgba(240,240,240,.9)}#app-content #app-content-wrapper .viewModes .view-mode{background-color:rgba(240,240,240,.9);cursor:pointer;display:inline-block;padding:7px}#app-content #app-content-wrapper .viewModes .view-mode.active{display:inline-block;padding:7px;background-color:rgba(226,226,226,.9)}#app-content #app-content-wrapper .searchboxContainer{display:inline-block;visibility:visible;float:right}#app-content #app-content-wrapper .searchboxContainer .searchbox{display:inline-block;width:calc(100% - 3px)}#app-content #app-content-wrapper .searchboxContainer .searchclear{color:#ccc;cursor:pointer;font-size:18px;height:14px;margin:auto;position:absolute!important;right:10px;top:12px;z-index:99999999}#app-content #app-content-wrapper .searchboxContainer .searchOptions{position:relative;bottom:5px;background:#fff;border:1px solid #ddd;padding:5px;box-shadow:3px 3px 5px #888;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;background-clip:padding-box}#app-content #app-content-wrapper .searchboxContainer .searchOptions input{cursor:pointer}#app-content #app-content-wrapper .credential-table{width:100%}#app-content #app-content-wrapper .credential-table tr:hover{background-color:#f5f5f5}#app-content #app-content-wrapper .credential-table tr.selected{background-color:#f8f8f8}#app-content #app-content-wrapper .credential-table tr .compromised{background-color:#f74040}#app-content #app-content-wrapper .credential-table tr .compromised:hover{background-color:#e10909}#app-content #app-content-wrapper .credential-table tr .compromised-list{display:inline-block;margin-left:50px}#app-content #app-content-wrapper .credential-table tr .compromised-list .icon{height:18px}#app-content #app-content-wrapper .credential-table tr .compromised-list .text{font-style:italic;font-weight:700}#app-content #app-content-wrapper .credential-table tr td{cursor:pointer;padding:5px;border-bottom:1px solid #eee}#app-content #app-content-wrapper .credential-table tr td .icon{font-size:19px;float:left;margin-right:5px;margin-left:3px}#app-content #app-content-wrapper .credential-table tr td .icon-more{display:inline-block;float:right;margin-left:5px;margin-top:1px;opacity:.4;height:20px;width:32px;cursor:pointer}#app-content #app-content-wrapper .credential-table tr td .icon-more:hover{opacity:1}#app-content #app-content-wrapper .credential-table tr td .popovermenu{margin-top:25px;height:100px;width:100px;right:-2px!important;box-shadow:0 1px 10px rgba(50,50,50,.7)}#app-content #app-content-wrapper .credential-table tr td .popovermenu ul{display:block;width:100px;height:75px}#app-content #app-content-wrapper .credential-table tr td .popovermenu ul li{padding:0}#app-content #app-content-wrapper .credential-table tr td .popovermenu ul .menuitem{font-size:12px;display:inline}#app-content #app-content-wrapper .credential-table tr td .popovermenu .action{padding:10px;margin:-10px}#app-content #app-content-wrapper .tags{float:right}#app-content #app-content-wrapper .tags .tag{background-color:rgba(240,240,240,.9);padding:4px;font-size:12px;margin-right:3px;-webkit-border-radius:5px;border-radius:5px;background-clip:padding-box}#app-content #app-content-wrapper .tags .tag:last-child{margin-right:8px}#app-content #app-content-wrapper .grid-view{width:100%;height:100%;display:flex;flex-wrap:wrap}#app-content #app-content-wrapper .grid-view .credential{display:flex;width:100%;border:2px solid rgba(240,240,240,.9);margin:25px;-webkit-border-radius:10px;border-radius:10px;background-clip:padding-box}#app-content #app-content-wrapper .grid-view .credential .credential_content{display:flex;padding:2px;flex-direction:column;width:100%;cursor:pointer;font-size:1.75em}#app-content #app-content-wrapper .grid-view .credential .credential_content .label{padding-top:.5em;padding-right:1em;line-height:1.3em;word-wrap:break-word;float:right}#app-content #app-content-wrapper .grid-view .credential .credential_content .tags{margin:0 0 auto;text-align:right}#app-content #app-content-wrapper .grid-view .credential .credential_content .tags .tag{color:#000!important;margin-top:5px;display:inline-block;left:0}@media all and (min-width:40em){#app-content #app-content-wrapper .grid-view .credential{width:40%}}@media all and (min-width:58em){#app-content #app-content-wrapper .grid-view .credential{width:26%}}@media all and (min-width:78em){#app-content #app-content-wrapper .grid-view .credential{width:20%}}#app-content #app-content-wrapper .edit_credential input[type=password],#app-content #app-content-wrapper .edit_credential input[type=text],#app-content #app-content-wrapper .edit_credential tags-input .tags{width:100%}#app-content #app-content-wrapper .edit_credential{padding-top:10px}#app-content #app-content-wrapper .edit_credential label{display:block}#app-content #app-content-wrapper .edit_credential .compromised-button{margin-top:15px;background-color:#e60000;color:#000}#app-content #app-content-wrapper .edit_credential .compromised-details{margin-top:15px;display:flex}#app-content #app-content-wrapper .edit_credential .compromised-details .icon{float:left;height:20px}#app-content #app-content-wrapper .edit_credential .compromised-details .text{padding-left:5px;padding-right:30px;color:#e9322d}#app-content #app-content-wrapper .edit_credential .tags{float:left}#app-content #app-content-wrapper .edit_credential .tags .tag{background-color:rgba(240,240,240,.9);padding:4px;font-size:11px}#app-content #app-content-wrapper .edit_credential .credential_textarea{width:100%;height:100px}#app-content #app-content-wrapper .edit_credential .password_settings label{overflow:hidden}#app-content #app-content-wrapper .edit_credential .password_settings label input[type=checkbox]{width:auto!important;float:left}#app-content #app-content-wrapper .edit_credential .password_settings label .label{float:left}#app-content #app-content-wrapper .edit_credential .password_settings label .label.sm{font-size:12px}#app-content #app-content-wrapper .edit_credential .password_settings .password-settings-padding-left-fix{padding-left:0!important}#app-content #app-content-wrapper .edit_credential .field-value .valueInput{padding-right:0}#app-content #app-content-wrapper .edit_credential .field-value .valueInput .pw-gen .generate_pw .cell:last-child,#app-content #app-content-wrapper .edit_credential .field-value .valueInput input{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;background-clip:padding-box}#app-content #app-content-wrapper .edit_credential .field-value .selectType{padding-left:0;margin-left:0}#app-content #app-content-wrapper .edit_credential .field-value .selectType select{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;background-clip:padding-box}#app-content #app-content-wrapper .edit_credential .custom_fields,#app-content #app-content-wrapper .edit_credential .files{margin-top:10px}#app-content #app-content-wrapper .edit_credential .custom_fields table,#app-content #app-content-wrapper .edit_credential .files table{width:100%}#app-content #app-content-wrapper .edit_credential .custom_fields table thead th.dragger,#app-content #app-content-wrapper .edit_credential .files table thead th.dragger{width:3%}#app-content #app-content-wrapper .edit_credential .custom_fields table thead th,#app-content #app-content-wrapper .edit_credential .files table thead th{color:#fff}#app-content #app-content-wrapper .edit_credential .custom_fields table thead th.field_actions,#app-content #app-content-wrapper .edit_credential .files table thead th.field_actions{width:15%}#app-content #app-content-wrapper .edit_credential .custom_fields table tr:hover,#app-content #app-content-wrapper .edit_credential .files table tr:hover{background-color:transparent}#app-content #app-content-wrapper .edit_credential .custom_fields table tr td.dragger,#app-content #app-content-wrapper .edit_credential .files table tr td.dragger{width:3%;text-align:center;cursor:move;cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}#app-content #app-content-wrapper .edit_credential .custom_fields table tr td.field_actions,#app-content #app-content-wrapper .edit_credential .files table tr td.field_actions{font-size:13px;width:15%}#app-content #app-content-wrapper .edit_credential .custom_fields table tr td.field_actions i,#app-content #app-content-wrapper .edit_credential .files table tr td.field_actions i{cursor:pointer}#app-content #app-content-wrapper .edit_credential .custom_fields table tr td,#app-content #app-content-wrapper .edit_credential .custom_fields table tr th,#app-content #app-content-wrapper .edit_credential .files table tr td,#app-content #app-content-wrapper .edit_credential .files table tr th{width:20%;padding:5px}#app-content #app-content-wrapper .edit_credential .custom_fields table tr td .editable-has-buttons.editable-input,#app-content #app-content-wrapper .edit_credential .custom_fields table tr th .editable-has-buttons.editable-input,#app-content #app-content-wrapper .edit_credential .files table tr td .editable-has-buttons.editable-input,#app-content #app-content-wrapper .edit_credential .files table tr th .editable-has-buttons.editable-input{width:55%}#app-content #app-content-wrapper .edit_credential .custom_fields table tr td,#app-content #app-content-wrapper .edit_credential .files table tr td{height:50px;vertical-align:middle}#app-content #app-content-wrapper .edit_credential .otpText{padding-right:10px}#app-content #app-content-wrapper .edit_credential .import-selection select{margin-left:15px}#app-content #app-content-wrapper .main_list{flex:1;float:left;height:auto;overflow:auto;width:100%}#app-content #app-content-wrapper .main_list .share{overflow:hidden}#app-content #app-content-wrapper .main_list .nopasswords{margin-right:auto;margin-left:auto;margin-top:10%;text-align:center}#app-content #app-content-wrapper .main_list .belowList{margin-right:auto;margin-left:auto;margin-top:1%;text-align:center}#app-content #app-content-wrapper .app_sidebar{float:right;padding:10px;overflow-y:auto}.credential_field,.credential_field .tools,.icon-label,.inputfile{overflow:hidden}#app-content #app-content-wrapper .app_sidebar h2{margin-bottom:10px;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:90%}#app-content #app-content-wrapper .app_sidebar .close.icon-close{position:absolute;top:10px;right:10px;cursor:pointer}#app-content #app-content-wrapper .app_sidebar.item_selected{height:25%;display:inline-block}#app-content #app-content-wrapper .app_sidebar .credential-data .compromised-details{margin-top:15px;margin-bottom:15px;display:flex}#app-content #app-content-wrapper .app_sidebar .credential-data .compromised-details .icon{float:left;height:20px}#app-content #app-content-wrapper .app_sidebar .credential-data .compromised-details .text{padding-left:5px;padding-right:30px;color:#e9322d}#app-content #app-content-wrapper .app_sidebar .credential-data .row{margin-bottom:11px}#app-content #app-content-wrapper .app_sidebar .credential-data .tags{margin-top:15px;margin-bottom:15px;float:none}#app-content #app-content-wrapper .app_sidebar .credential-data .tags .tag{background-color:rgba(240,240,240,.9);padding:4px;margin-right:3px}.credential_field .tools .cell,.inputfile+label{margin-right:4px;cursor:pointer}.credential_field .cell,.credential_field .value{float:left}.credential_field .value{white-space:nowrap;text-overflow:ellipsis;max-width:100%}.credential_field .tools{margin-left:10px;margin-top:8px;float:left}.progress{margin-top:10px;height:20px}.progress .progress-bar{position:relative;height:20px;background-image:none;background-color:#0082c9}.progress .progress-bar .progress-label{position:absolute;top:0;z-index:2;text-align:center;width:100%}.loaderContainer{height:140px;width:120px;margin-top:30px;margin-left:-60px;top:30%;left:50%;position:absolute}.loaderContainer .text{width:120px;text-align:center}.loader{border-bottom:10px solid #1d2d44;border-left:10px solid #c9c9c9;border-right:10px solid #c9c9c9;border-top:10px solid #c9c9c9;height:120px;width:120px;border-radius:120px;animation:1.1s linear 0s normal none infinite running load8}@keyframes load8{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.inputfile{width:.1px;height:.1px;opacity:0;position:absolute;z-index:-1}.inputfile+label{font-size:1.25em;background-color:rgba(240,240,240,.9);margin-top:4px;padding:5px;border-right:1px solid #c9c9c9}.inputfile+label:hover,.inputfile:focus+label{background-color:#c9c9c9}.btn-danger{color:#000;background-color:red}.icon-label{display:flex}.icon-label input{float:left;background:#fff;color:#555;cursor:text;font-family:inherit;border:1px solid #ddd;outline:0;border-radius:3px;margin:3px 0;padding:7px 6px 5px;font-size:13px;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;background-clip:padding-box}.icon-label .icon-picker{float:left;margin-top:3px}.icon-label .icon-picker .cell{height:32px;padding:7px 12px 2px;font-size:14px;border:1px solid #ddd;background-color:#eaeaea;cursor:pointer;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;background-clip:padding-box}.settings-container div,.settings-container-label{padding-left:15px}.icon-label .icon-picker .cell:hover{color:#06f}.error,.shared_table .fa-trash:hover{color:#ce3702}.settings-container button{width:80%;margin-left:15px;margin-right:15px}#app-navigation>ul>li>a{z-index:auto}#app-navigation>ul>li{display:block}.nav-trashbin{width:inherit!important;border-right:1px solid #eee}.nav-trashbin a{background-color:#fff!important;opacity:1!important;z-index:140}.nav-trashbin a.active{background-image:var(--icon-delete-e9322d)}.nav-trashbin a .fa{margin-right:15px}#app-navigation .collapsible:hover .app-navigation-entry-bullet{background:var(--color-primary)!important}#app-navigation a .selected{opacity:1!important;box-shadow:inset 4px 0 var(--color-primary)!important}#app-navigation li a tags-input,#app-navigation li a.taginput{opacity:1}#app-navigation li .app-navigation-entry-bullet-color{background-color:var(--color-primary)}#app-navigation li .bullet-color-red{background-color:red}#app-navigation li .bullet-color-yellow{background-color:#ebbb00}#app-navigation li .bullet-color-green{background-color:#4db728}#app-navigation li .highlight-selected{background-color:var(--color-primary)}#app-navigation li .autocomplete{position:relative}#app-navigation li a{overflow:visible}#app-navigation li a tags-input li{width:auto!important}.hidden-list{display:none!important}.icon-expired{background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'><path d='M0 0h24v24H0z' fill='none'/><path d='M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z'/></svg>")}.sharing_table .button{min-height:42px;margin:5px 0 0}.sharing_table td:first-child{width:55%}.sharing_table td:first-child tags-input .tags,.table{width:100%}.sharing_table td:first-child .autocomplete{margin-top:35px}.share_credential{padding-top:10px}.share_credential input{width:auto}.share_credential>div{margin-bottom:10px}.shared_table .pending{margin-right:10px}.shared_table .fa-trash{cursor:pointer}.spacer-top-30{margin-top:30px}.scan-result-table td{vertical-align:top!important}.scan-result-table .score{width:55%;padding-left:0;padding-right:15px}.scan-result-table .label-audit{width:15%}.detail_box{border:1px solid var(--color-border-dark);margin-top:25px;padding:5px}.import_log{max-height:600px;overflow-y:auto}.import_log textarea{width:90%;height:200px}.tab_container.settings{margin-bottom:50px}.tab_container.settings textarea{height:300px}.import-steps{padding-left:16px;margin-bottom:10px}.import-steps li{list-style-type:disc}.import-table-outter{overflow-x:scroll}.import-table{padding-right:15px}.import-table .inspect{text-align:center;width:25px;cursor:pointer}.import-table td,.import-table th{text-align:left;padding:3px 5px}.searchbox button{position:relative!important}.searchbox-settings{position:relative;top:50%;opacity:.6}.searchbox-settings:hover{opacity:1;cursor:pointer}.custom-search-dialog{border-radius:var(--border-radius-large)!important;box-shadow:0 0 30px var(--color-box-shadow);z-index:9999!important}.custom-search-dialog .ui-dialog{border-radius:var(--border-radius-large);box-shadow:0 0 30px var(--color-box-shadow)}.custom-search-dialog .ui-widget-header{background:0 0}.custom-search-dialog .ui-icon-closethick{background-position:inherit;border:none!important}.custom-search-dialog .ui-button-icon,.custom-search-dialog .ui-icon{border:none!important}.custom-search-dialog .ui-button .ui-icon{background-image:var(--icon-close-000)}.custom-search-dialog .ui-dialog-buttonpane.ui-helper-clearfix{display:none}.app-passman{overflow-x:hidden}.template-hidden{display:none!important}.hide-animation{display:inherit!important;transition:ease-in-out .15s}.hide-animation.ng-hide{opacity:0}.ui-dialog{z-index:9999}#notification .row{margin-left:0!important;margin-right:0!important}#passman-controls{position:fixed;margin:-45px 0 0;right:0;left:0;border-bottom:1px solid #c9c9c9;padding:0!important;background-color:rgba(255,255,255,.95);z-index:50;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;height:44px!important}@media only screen and (max-width:769px){#passman-controls .breadcrumb{padding-left:15px}}#passman-controls .breadcrumb .addCredential{padding-top:1px}@media only screen and (max-width:768px){#passman-controls{width:100%}}@media only screen and (min-width:1024px){#app-navigation+#app-content #passman-controls{left:300px;width:calc(100% - 300px)!important}}#passman-controls,#passman-controls .button,#passman-controls input[type=submit],#passman-controls input[type=text],#passman-controls input[type=password],#passman-controls select{box-sizing:border-box;display:inline-block;height:36px;padding:7px 10px}.nopadding{padding-right:0;padding-left:0}input[type=checkbox]{min-height:inherit}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.ui-button.ui-widget{min-height:unset!important} \ No newline at end of file
diff --git a/js/passman.min.js b/js/passman.min.js
index 8f2af4da..14bbdbd1 100644
--- a/js/passman.min.js
+++ b/js/passman.min.js
@@ -1,4 +1,4 @@
-/*! Passman 2020-09-20 */
+/*! Passman 2021-03-22 */
function _a1(b,a){this.count=b,this._fc=a,this.__defineGetter__("Count",function(){return this.count}),this.__defineGetter__("_dm",function(){return this._fc})}function _a2(a,c,b){this._bm=a,b?this._do=new Array(c,b):this._do=new Array(c),this.__defineGetter__("_bo",function(){return this._bm}),this.__defineGetter__("_dn",function(){return this._bm*this._fo}),this.__defineGetter__("_fo",function(){for(var e=0,d=0;d<this._do.length;d++)e+=this._do[d].length;return e}),this._fb=function(){return this._do}}function _a3(k,l,h,g,f,e){this._bs=k,this._ar=l,this._do=new Array(h,g,f,e);for(var j=0,b=h._bo,a=h._fb(),d=0;d<a.length;d++){var c=a[d];j+=c.Count*(c._dm+b)}this._br=j,this.__defineGetter__("_fd",function(){return this._bs}),this.__defineGetter__("_as",function(){return this._ar}),this.__defineGetter__("_dp",function(){return this._br}),this.__defineGetter__("_cr",function(){return 17+4*this._bs}),this._aq=function(){var r=this._cr,o=new _ac(r);o._bq(0,0,9,9),o._bq(r-8,0,8,9),o._bq(0,r-8,9,8);for(var n=this._ar.length,m=0;m<n;m++)for(var q=this._ar[m]-2,s=0;s<n;s++)0==m&&(0==s||s==n-1)||m==n-1&&0==s||o._bq(this._ar[s]-2,q,5,5);return o._bq(6,9,1,r-17),o._bq(9,6,r-17,1),this._bs>6&&(o._bq(r-11,0,3,6),o._bq(0,r-11,6,3)),o},this._bu=function(i){return this._do[i.ordinal()]}}function _ay(){return new Array(new _a3(1,new Array,new _a2(7,new _a1(1,19)),new _a2(10,new _a1(1,16)),new _a2(13,new _a1(1,13)),new _a2(17,new _a1(1,9))),new _a3(2,new Array(6,18),new _a2(10,new _a1(1,34)),new _a2(16,new _a1(1,28)),new _a2(22,new _a1(1,22)),new _a2(28,new _a1(1,16))),new _a3(3,new Array(6,22),new _a2(15,new _a1(1,55)),new _a2(26,new _a1(1,44)),new _a2(18,new _a1(2,17)),new _a2(22,new _a1(2,13))),new _a3(4,new Array(6,26),new _a2(20,new _a1(1,80)),new _a2(18,new _a1(2,32)),new _a2(26,new _a1(2,24)),new _a2(16,new _a1(4,9))),new _a3(5,new Array(6,30),new _a2(26,new _a1(1,108)),new _a2(24,new _a1(2,43)),new _a2(18,new _a1(2,15),new _a1(2,16)),new _a2(22,new _a1(2,11),new _a1(2,12))),new _a3(6,new Array(6,34),new _a2(18,new _a1(2,68)),new _a2(16,new _a1(4,27)),new _a2(24,new _a1(4,19)),new _a2(28,new _a1(4,15))),new _a3(7,new Array(6,22,38),new _a2(20,new _a1(2,78)),new _a2(18,new _a1(4,31)),new _a2(18,new _a1(2,14),new _a1(4,15)),new _a2(26,new _a1(4,13),new _a1(1,14))),new _a3(8,new Array(6,24,42),new _a2(24,new _a1(2,97)),new _a2(22,new _a1(2,38),new _a1(2,39)),new _a2(22,new _a1(4,18),new _a1(2,19)),new _a2(26,new _a1(4,14),new _a1(2,15))),new _a3(9,new Array(6,26,46),new _a2(30,new _a1(2,116)),new _a2(22,new _a1(3,36),new _a1(2,37)),new _a2(20,new _a1(4,16),new _a1(4,17)),new _a2(24,new _a1(4,12),new _a1(4,13))),new _a3(10,new Array(6,28,50),new _a2(18,new _a1(2,68),new _a1(2,69)),new _a2(26,new _a1(4,43),new _a1(1,44)),new _a2(24,new _a1(6,19),new _a1(2,20)),new _a2(28,new _a1(6,15),new _a1(2,16))),new _a3(11,new Array(6,30,54),new _a2(20,new _a1(4,81)),new _a2(30,new _a1(1,50),new _a1(4,51)),new _a2(28,new _a1(4,22),new _a1(4,23)),new _a2(24,new _a1(3,12),new _a1(8,13))),new _a3(12,new Array(6,32,58),new _a2(24,new _a1(2,92),new _a1(2,93)),new _a2(22,new _a1(6,36),new _a1(2,37)),new _a2(26,new _a1(4,20),new _a1(6,21)),new _a2(28,new _a1(7,14),new _a1(4,15))),new _a3(13,new Array(6,34,62),new _a2(26,new _a1(4,107)),new _a2(22,new _a1(8,37),new _a1(1,38)),new _a2(24,new _a1(8,20),new _a1(4,21)),new _a2(22,new _a1(12,11),new _a1(4,12))),new _a3(14,new Array(6,26,46,66),new _a2(30,new _a1(3,115),new _a1(1,116)),new _a2(24,new _a1(4,40),new _a1(5,41)),new _a2(20,new _a1(11,16),new _a1(5,17)),new _a2(24,new _a1(11,12),new _a1(5,13))),new _a3(15,new Array(6,26,48,70),new _a2(22,new _a1(5,87),new _a1(1,88)),new _a2(24,new _a1(5,41),new _a1(5,42)),new _a2(30,new _a1(5,24),new _a1(7,25)),new _a2(24,new _a1(11,12),new _a1(7,13))),new _a3(16,new Array(6,26,50,74),new _a2(24,new _a1(5,98),new _a1(1,99)),new _a2(28,new _a1(7,45),new _a1(3,46)),new _a2(24,new _a1(15,19),new _a1(2,20)),new _a2(30,new _a1(3,15),new _a1(13,16))),new _a3(17,new Array(6,30,54,78),new _a2(28,new _a1(1,107),new _a1(5,108)),new _a2(28,new _a1(10,46),new _a1(1,47)),new _a2(28,new _a1(1,22),new _a1(15,23)),new _a2(28,new _a1(2,14),new _a1(17,15))),new _a3(18,new Array(6,30,56,82),new _a2(30,new _a1(5,120),new _a1(1,121)),new _a2(26,new _a1(9,43),new _a1(4,44)),new _a2(28,new _a1(17,22),new _a1(1,23)),new _a2(28,new _a1(2,14),new _a1(19,15))),new _a3(19,new Array(6,30,58,86),new _a2(28,new _a1(3,113),new _a1(4,114)),new _a2(26,new _a1(3,44),new _a1(11,45)),new _a2(26,new _a1(17,21),new _a1(4,22)),new _a2(26,new _a1(9,13),new _a1(16,14))),new _a3(20,new Array(6,34,62,90),new _a2(28,new _a1(3,107),new _a1(5,108)),new _a2(26,new _a1(3,41),new _a1(13,42)),new _a2(30,new _a1(15,24),new _a1(5,25)),new _a2(28,new _a1(15,15),new _a1(10,16))),new _a3(21,new Array(6,28,50,72,94),new _a2(28,new _a1(4,116),new _a1(4,117)),new _a2(26,new _a1(17,42)),new _a2(28,new _a1(17,22),new _a1(6,23)),new _a2(30,new _a1(19,16),new _a1(6,17))),new _a3(22,new Array(6,26,50,74,98),new _a2(28,new _a1(2,111),new _a1(7,112)),new _a2(28,new _a1(17,46)),new _a2(30,new _a1(7,24),new _a1(16,25)),new _a2(24,new _a1(34,13))),new _a3(23,new Array(6,30,54,74,102),new _a2(30,new _a1(4,121),new _a1(5,122)),new _a2(28,new _a1(4,47),new _a1(14,48)),new _a2(30,new _a1(11,24),new _a1(14,25)),new _a2(30,new _a1(16,15),new _a1(14,16))),new _a3(24,new Array(6,28,54,80,106),new _a2(30,new _a1(6,117),new _a1(4,118)),new _a2(28,new _a1(6,45),new _a1(14,46)),new _a2(30,new _a1(11,24),new _a1(16,25)),new _a2(30,new _a1(30,16),new _a1(2,17))),new _a3(25,new Array(6,32,58,84,110),new _a2(26,new _a1(8,106),new _a1(4,107)),new _a2(28,new _a1(8,47),new _a1(13,48)),new _a2(30,new _a1(7,24),new _a1(22,25)),new _a2(30,new _a1(22,15),new _a1(13,16))),new _a3(26,new Array(6,30,58,86,114),new _a2(28,new _a1(10,114),new _a1(2,115)),new _a2(28,new _a1(19,46),new _a1(4,47)),new _a2(28,new _a1(28,22),new _a1(6,23)),new _a2(30,new _a1(33,16),new _a1(4,17))),new _a3(27,new Array(6,34,62,90,118),new _a2(30,new _a1(8,122),new _a1(4,123)),new _a2(28,new _a1(22,45),new _a1(3,46)),new _a2(30,new _a1(8,23),new _a1(26,24)),new _a2(30,new _a1(12,15),new _a1(28,16))),new _a3(28,new Array(6,26,50,74,98,122),new _a2(30,new _a1(3,117),new _a1(10,118)),new _a2(28,new _a1(3,45),new _a1(23,46)),new _a2(30,new _a1(4,24),new _a1(31,25)),new _a2(30,new _a1(11,15),new _a1(31,16))),new _a3(29,new Array(6,30,54,78,102,126),new _a2(30,new _a1(7,116),new _a1(7,117)),new _a2(28,new _a1(21,45),new _a1(7,46)),new _a2(30,new _a1(1,23),new _a1(37,24)),new _a2(30,new _a1(19,15),new _a1(26,16))),new _a3(30,new Array(6,26,52,78,104,130),new _a2(30,new _a1(5,115),new _a1(10,116)),new _a2(28,new _a1(19,47),new _a1(10,48)),new _a2(30,new _a1(15,24),new _a1(25,25)),new _a2(30,new _a1(23,15),new _a1(25,16))),new _a3(31,new Array(6,30,56,82,108,134),new _a2(30,new _a1(13,115),new _a1(3,116)),new _a2(28,new _a1(2,46),new _a1(29,47)),new _a2(30,new _a1(42,24),new _a1(1,25)),new _a2(30,new _a1(23,15),new _a1(28,16))),new _a3(32,new Array(6,34,60,86,112,138),new _a2(30,new _a1(17,115)),new _a2(28,new _a1(10,46),new _a1(23,47)),new _a2(30,new _a1(10,24),new _a1(35,25)),new _a2(30,new _a1(19,15),new _a1(35,16))),new _a3(33,new Array(6,30,58,86,114,142),new _a2(30,new _a1(17,115),new _a1(1,116)),new _a2(28,new _a1(14,46),new _a1(21,47)),new _a2(30,new _a1(29,24),new _a1(19,25)),new _a2(30,new _a1(11,15),new _a1(46,16))),new _a3(34,new Array(6,34,62,90,118,146),new _a2(30,new _a1(13,115),new _a1(6,116)),new _a2(28,new _a1(14,46),new _a1(23,47)),new _a2(30,new _a1(44,24),new _a1(7,25)),new _a2(30,new _a1(59,16),new _a1(1,17))),new _a3(35,new Array(6,30,54,78,102,126,150),new _a2(30,new _a1(12,121),new _a1(7,122)),new _a2(28,new _a1(12,47),new _a1(26,48)),new _a2(30,new _a1(39,24),new _a1(14,25)),new _a2(30,new _a1(22,15),new _a1(41,16))),new _a3(36,new Array(6,24,50,76,102,128,154),new _a2(30,new _a1(6,121),new _a1(14,122)),new _a2(28,new _a1(6,47),new _a1(34,48)),new _a2(30,new _a1(46,24),new _a1(10,25)),new _a2(30,new _a1(2,15),new _a1(64,16))),new _a3(37,new Array(6,28,54,80,106,132,158),new _a2(30,new _a1(17,122),new _a1(4,123)),new _a2(28,new _a1(29,46),new _a1(14,47)),new _a2(30,new _a1(49,24),new _a1(10,25)),new _a2(30,new _a1(24,15),new _a1(46,16))),new _a3(38,new Array(6,32,58,84,110,136,162),new _a2(30,new _a1(4,122),new _a1(18,123)),new _a2(28,new _a1(13,46),new _a1(32,47)),new _a2(30,new _a1(48,24),new _a1(14,25)),new _a2(30,new _a1(42,15),new _a1(32,16))),new _a3(39,new Array(6,26,54,82,110,138,166),new _a2(30,new _a1(20,117),new _a1(4,118)),new _a2(28,new _a1(40,47),new _a1(7,48)),new _a2(30,new _a1(43,24),new _a1(22,25)),new _a2(30,new _a1(10,15),new _a1(67,16))),new _a3(40,new Array(6,30,58,86,114,142,170),new _a2(30,new _a1(19,118),new _a1(6,119)),new _a2(28,new _a1(18,47),new _a1(31,48)),new _a2(30,new _a1(34,24),new _a1(34,25)),new _a2(30,new _a1(20,15),new _a1(61,16))))}function _ae(i,f,c,h,e,b,g,d,a){this.a11=i,this.a12=h,this.a13=g,this.a21=f,this.a22=e,this.a23=d,this.a31=c,this.a32=b,this.a33=a,this._ad=function(w){for(var t=w.length,A=this.a11,z=this.a12,v=this.a13,r=this.a21,q=this.a22,o=this.a23,m=this.a31,k=this.a32,j=this.a33,n=0;n<t;n+=2){var u=w[n],s=w[n+1],l=v*u+o*s+j;w[n]=(A*u+r*s+m)/l,w[n+1]=(z*u+q*s+k)/l}},this._fp=function(m,k){for(var r=m.length,l=0;l<r;l++){var j=m[l],q=k[l],o=this.a13*j+this.a23*q+this.a33;m[l]=(this.a11*j+this.a21*q+this.a31)/o,k[l]=(this.a12*j+this.a22*q+this.a32)/o}},this._fr=function(){return new _ae(this.a22*this.a33-this.a23*this.a32,this.a23*this.a31-this.a21*this.a33,this.a21*this.a32-this.a22*this.a31,this.a13*this.a32-this.a12*this.a33,this.a11*this.a33-this.a13*this.a31,this.a12*this.a31-this.a11*this.a32,this.a12*this.a23-this.a13*this.a22,this.a13*this.a21-this.a11*this.a23,this.a11*this.a22-this.a12*this.a21)},this.times=function(j){return new _ae(this.a11*j.a11+this.a21*j.a12+this.a31*j.a13,this.a11*j.a21+this.a21*j.a22+this.a31*j.a23,this.a11*j.a31+this.a21*j.a32+this.a31*j.a33,this.a12*j.a11+this.a22*j.a12+this.a32*j.a13,this.a12*j.a21+this.a22*j.a22+this.a32*j.a23,this.a12*j.a31+this.a22*j.a32+this.a32*j.a33,this.a13*j.a11+this.a23*j.a12+this.a33*j.a13,this.a13*j.a21+this.a23*j.a22+this.a33*j.a23,this.a13*j.a31+this.a23*j.a32+this.a33*j.a33)}}function _bg(b,a){this.bits=b,this.points=a}function Detector(a){this.image=a,this._am=null,this._bi=function(m,l,c,b){var d=Math.abs(b-l)>Math.abs(c-m);if(d){var s=m;m=l,l=s,s=c,c=b,b=s}for(var j=Math.abs(c-m),i=Math.abs(b-l),q=-j>>1,v=l<b?1:-1,f=m<c?1:-1,e=0,h=m,g=l;h!=c;h+=f){var u=d?g:h,t=d?h:g;if(1==e?this.image[u+t*qrcode.width]&&e++:this.image[u+t*qrcode.width]||e++,3==e){var o=h-m,n=g-l;return Math.sqrt(o*o+n*n)}if(q+=i,q>0){if(g==b)break;g+=v,q-=j}}var k=c-m,r=b-l;return Math.sqrt(k*k+r*r)},this._bh=function(i,g,h,f){var b=this._bi(i,g,h,f),e=1,d=i-(h-i);d<0?(e=i/(i-d),d=0):d>=qrcode.width&&(e=(qrcode.width-1-i)/(d-i),d=qrcode.width-1);var c=Math.floor(g-(f-g)*e);return e=1,c<0?(e=g/(g-c),c=0):c>=qrcode.height&&(e=(qrcode.height-1-g)/(c-g),c=qrcode.height-1),d=Math.floor(i+(d-i)*e),b+=this._bi(i,g,d,c),b-1},this._bj=function(c,d){var b=this._bh(Math.floor(c.X),Math.floor(c.Y),Math.floor(d.X),Math.floor(d.Y)),e=this._bh(Math.floor(d.X),Math.floor(d.Y),Math.floor(c.X),Math.floor(c.Y));return isNaN(b)?e/7:isNaN(e)?b/7:(b+e)/14},this._bk=function(d,c,b){return(this._bj(d,c)+this._bj(d,b))/2},this.distance=function(c,b){return xDiff=c.X-b.X,yDiff=c.Y-b.Y,Math.sqrt(xDiff*xDiff+yDiff*yDiff)},this._bx=function(g,f,d,e){var b=Math.round(this.distance(g,f)/e),c=Math.round(this.distance(g,d)/e),h=(b+c>>1)+7;switch(3&h){case 0:h++;break;case 2:h--;break;case 3:throw"Error"}return h},this._bl=function(g,f,d,j){var k=Math.floor(j*g),h=Math.max(0,f-k),i=Math.min(qrcode.width-1,f+k);if(i-h<3*g)throw"Error";var b=Math.max(0,d-k),c=Math.min(qrcode.height-1,d+k),e=new _ak(this.image,h,b,i-h,c-b,g,this._am);return e.find()},this.createTransform=function(l,h,k,b,g){var i,f,e,c,j=g-3.5;null!=b?(i=b.X,f=b.Y,e=c=j-3):(i=h.X-l.X+k.X,f=h.Y-l.Y+k.Y,e=c=j);var d=_ae._ag(3.5,3.5,j,3.5,e,c,3.5,j,l.X,l.Y,h.X,h.Y,i,f,k.X,k.Y);return d},this._bz=function(e,b,d){var c=_aa;return c._af(e,d,b)},this._cd=function(r){var j=r._gq,h=r._gs,n=r._gp,d=this._bk(j,h,n);if(d<1)throw"Error";var s=this._bx(j,h,n,d),b=_a3._at(s),k=b._cr-7,l=null;if(b._as.length>0)for(var f=h.X-j.X+n.X,e=h.Y-j.Y+n.Y,c=1-3/k,u=Math.floor(j.X+c*(f-j.X)),t=Math.floor(j.Y+c*(e-j.Y)),q=4;q<=16;q<<=1){l=this._bl(d,u,t,q);break}var o,g=this.createTransform(j,h,n,l,s),m=this._bz(this.image,g,s);return o=null==l?new Array(n,j,h):new Array(n,j,h,l),new _bg(m,o)},this.detect=function(){var b=(new _cc)._ce(this.image);return this._cd(b)}}function _ax(a){this._cf=_cg.forBits(a>>3&3),this._fe=7&a,this.__defineGetter__("_cg",function(){return this._cf}),this.__defineGetter__("_dx",function(){return this._fe}),this.GetHashCode=function(){return this._cf.ordinal()<<3|_fe},this.Equals=function(c){var b=c;return this._cf==b._cf&&this._fe==b._fe}}function _cg(a,c,b){this._ff=a,this.bits=c,this.name=b,this.__defineGetter__("Bits",function(){return this.bits}),this.__defineGetter__("Name",function(){return this.name}),this.ordinal=function(){return this._ff}}function _ac(d,a){if(a||(a=d),d<1||a<1)throw"Both dimensions must be greater than 0";this.width=d,this.height=a;var c=d>>5;0!=(31&d)&&c++,this.rowSize=c,this.bits=new Array(c*a);for(var b=0;b<this.bits.length;b++)this.bits[b]=0;this.__defineGetter__("Width",function(){return this.width}),this.__defineGetter__("Height",function(){return this.height}),this.__defineGetter__("Dimension",function(){if(this.width!=this.height)throw"Can't call getDimension() on a non-square matrix";return this.width}),this._ds=function(e,g){var f=g*this.rowSize+(e>>5);return 0!=(1&_ew(this.bits[f],31&e))},this._dq=function(e,g){var f=g*this.rowSize+(e>>5);this.bits[f]|=1<<(31&e)},this.flip=function(e,g){var f=g*this.rowSize+(e>>5);this.bits[f]^=1<<(31&e)},this.clear=function(){for(var e=this.bits.length,f=0;f<e;f++)this.bits[f]=0},this._bq=function(g,j,f,m){if(j<0||g<0)throw"Left and top must be nonnegative";if(m<1||f<1)throw"Height and width must be at least 1";var l=g+f,e=j+m;if(e>this.height||l>this.width)throw"The region must fit inside the matrix";for(var i=j;i<e;i++)for(var h=i*this.rowSize,k=g;k<l;k++)this.bits[h+(k>>5)]|=1<<(31&k)}}function _dl(a,b){this._dv=a,this._dw=b,this.__defineGetter__("_du",function(){return this._dv}),this.__defineGetter__("Codewords",function(){return this._dw})}function _cl(a){var b=a.Dimension;if(b<21||1!=(3&b))throw"Error _cl";this._au=a,this._cp=null,this._co=null,this._dk=function(d,c,e){return this._au._ds(d,c)?e<<1|1:e<<1},this._cm=function(){if(null!=this._co)return this._co;for(var g=0,e=0;e<6;e++)g=this._dk(e,8,g);g=this._dk(7,8,g),g=this._dk(8,8,g),g=this._dk(8,7,g);for(var c=5;c>=0;c--)g=this._dk(8,c,g);if(this._co=_ax._ci(g),null!=this._co)return this._co;var f=this._au.Dimension;g=0;for(var d=f-8,e=f-1;e>=d;e--)g=this._dk(e,8,g);for(var c=f-7;c<f;c++)g=this._dk(8,c,g);if(this._co=_ax._ci(g),null!=this._co)return this._co;throw"Error _cm"},this._cq=function(){if(null!=this._cp)return this._cp;var h=this._au.Dimension,f=h-17>>2;if(f<=6)return _a3._av(f);for(var g=0,e=h-11,c=5;c>=0;c--)for(var d=h-9;d>=e;d--)g=this._dk(d,c,g);if(this._cp=_a3._aw(g),null!=this._cp&&this._cp._cr==h)return this._cp;g=0;for(var d=5;d>=0;d--)for(var c=h-9;c>=e;c--)g=this._dk(d,c,g);if(this._cp=_a3._aw(g),null!=this._cp&&this._cp._cr==h)return this._cp;throw"Error _cq"},this._gk=function(){var r=this._cm(),o=this._cq(),c=_dx._gl(r._dx),f=this._au.Dimension;c._dj(this._au,f);for(var k=o._aq(),n=!0,s=new Array(o._dp),m=0,q=0,h=0,e=f-1;e>0;e-=2){6==e&&e--;for(var l=0;l<f;l++)for(var g=n?f-1-l:l,d=0;d<2;d++)k._ds(e-d,g)||(h++,q<<=1,this._au._ds(e-d,g)&&(q|=1),8==h&&(s[m++]=q,h=0,q=0));n^=!0}if(m!=o._dp)throw"Error _gk";return s}}function _fg(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(b,a){return 0==(b+a&1)}}function _fh(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(b,a){return 0==(1&b)}}function _fi(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(b,a){return a%3==0}}function _fj(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(b,a){return(b+a)%3==0}}function _fk(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(b,a){return 0==(_ew(b,1)+a/3&1)}}function _fl(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(c,b){var a=c*b;return(1&a)+a%3==0}}function _fm(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(c,b){var a=c*b;return 0==((1&a)+a%3&1)}}function _fn(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(b,a){return 0==((b+a&1)+b*a%3&1)}}function _db(_fa){this._fa=_fa,this.decode=function(received,_fv){for(var poly=new _bp(this._fa,received),_dh=new Array(_fv),i=0;i<_dh.length;i++)_dh[i]=0;for(var _fq=!1,noError=!0,i=0;i<_fv;i++){var eval=poly.evaluateAt(this._fa.exp(_fq?i+1:i));_dh[_dh.length-1-i]=eval,0!=eval&&(noError=!1)}if(!noError)for(var _fu=new _bp(this._fa,_dh),_dg=this._eb(this._fa._ba(_fv,1),_fu,_fv),sigma=_dg[0],omega=_dg[1],_dz=this._ey(sigma),_ea=this._di(omega,_dz,_fq),i=0;i<_dz.length;i++){var position=received.length-1-this._fa.log(_dz[i]);if(position<0)throw"ReedSolomonException Bad error location";received[position]=_az._bd(received[position],_ea[i])}},this._eb=function(a,b,R){if(a._ec<b._ec){var temp=a;a=b,b=temp}for(var rLast=a,r=b,sLast=this._fa.One,s=this._fa.Zero,tLast=this._fa.Zero,t=this._fa.One;r._ec>=Math.floor(R/2);){var rLastLast=rLast,_ga=sLast,_gb=tLast;if(rLast=r,sLast=s,tLast=t,rLast.Zero)throw"r_{i-1} was zero";r=rLastLast;for(var q=this._fa.Zero,_df=rLast._ex(rLast._ec),_fy=this._fa.inverse(_df);r._ec>=rLast._ec&&!r.Zero;){var _fx=r._ec-rLast._ec,scale=this._fa.multiply(r._ex(r._ec),_fy);q=q._bd(this._fa._ba(_fx,scale)),r=r._bd(rLast._dc(_fx,scale))}s=q.multiply1(sLast)._bd(_ga),t=q.multiply1(tLast)._bd(_gb)}var _de=t._ex(0);if(0==_de)throw"ReedSolomonException sigmaTilde(0) was zero";var inverse=this._fa.inverse(_de),sigma=t.multiply2(inverse),omega=r.multiply2(inverse);return new Array(sigma,omega)},this._ey=function(_ez){var _fz=_ez._ec;if(1==_fz)return new Array(_ez._ex(1));for(var result=new Array(_fz),e=0,i=1;i<256&&e<_fz;i++)0==_ez.evaluateAt(i)&&(result[e]=this._fa.inverse(i),e++);if(e!=_fz)throw"Error locator degree does not match number of roots";return result},this._di=function(_fs,_dz,_fq){for(var s=_dz.length,result=new Array(s),i=0;i<s;i++){for(var _gc=this._fa.inverse(_dz[i]),_dr=1,j=0;j<s;j++)i!=j&&(_dr=this._fa.multiply(_dr,_az._bd(1,this._fa.multiply(_dz[j],_gc))));result[i]=this._fa.multiply(_fs.evaluateAt(_gc),this._fa.inverse(_dr)),_fq&&(result[i]=this._fa.multiply(result[i],_gc))}return result}}function _bp(f,e){if(null==e||0==e.length)throw"bad arguments";this._fa=f;var c=e.length;if(c>1&&0==e[0]){for(var d=1;d<c&&0==e[d];)d++;if(d==c)this._dd=f.Zero._dd;else{this._dd=new Array(c-d);for(var b=0;b<this._dd.length;b++)this._dd[b]=0;for(var a=0;a<this._dd.length;a++)this._dd[a]=e[d+a]}}else this._dd=e;this.__defineGetter__("Zero",function(){return 0==this._dd[0]}),this.__defineGetter__("_ec",function(){return this._dd.length-1}),this.__defineGetter__("Coefficients",function(){return this._dd}),this._ex=function(g){return this._dd[this._dd.length-1-g]},this.evaluateAt=function(h){if(0==h)return this._ex(0);var l=this._dd.length;if(1==h){for(var g=0,k=0;k<l;k++)g=_az._bd(g,this._dd[k]);return g}for(var j=this._dd[0],k=1;k<l;k++)j=_az._bd(this._fa.multiply(h,j),this._dd[k]);return j},this._bd=function(g){if(this._fa!=g._fa)throw"GF256Polys do not have same _az _fa";if(this.Zero)return g;if(g.Zero)return this;var o=this._dd,n=g._dd;if(o.length>n.length){var j=o;o=n,n=j}for(var h=new Array(n.length),k=n.length-o.length,m=0;m<k;m++)h[m]=n[m];for(var l=k;l<n.length;l++)h[l]=_az._bd(o[l-k],n[l]);return new _bp(f,h)},this.multiply1=function(o){if(this._fa!=o._fa)throw"GF256Polys do not have same _az _fa";if(this.Zero||o.Zero)return this._fa.Zero;for(var r=this._dd,g=r.length,l=o._dd,n=l.length,q=new Array(g+n-1),m=0;m<g;m++)for(var h=r[m],k=0;k<n;k++)q[m+k]=_az._bd(q[m+k],this._fa.multiply(h,l[k]));return new _bp(this._fa,q)},this.multiply2=function(g){if(0==g)return this._fa.Zero;if(1==g)return this;for(var j=this._dd.length,k=new Array(j),h=0;h<j;h++)k[h]=this._fa.multiply(this._dd[h],g);return new _bp(this._fa,k)},this._dc=function(l,g){if(l<0)throw"bad arguments";if(0==g)return this._fa.Zero;for(var j=this._dd.length,k=new Array(j+l),h=0;h<k.length;h++)k[h]=0;for(var h=0;h<j;h++)k[h]=this._fa.multiply(this._dd[h],g);return new _bp(this._fa,k)},this.divide=function(l){if(this._fa!=l._fa)throw"GF256Polys do not have same _az _fa";if(l.Zero)throw"Divide by 0";for(var j=this._fa.Zero,o=this,g=l._ex(l._ec),n=this._fa.inverse(g);o._ec>=l._ec&&!o.Zero;){var m=o._ec-l._ec,h=this._fa.multiply(o._ex(o._ec),n),i=l._dc(m,h),k=this._fa._ba(m,h);j=j._bd(k),o=o._bd(i)}return new Array(j,o)}}function _az(b){this._gh=new Array(256),this._gi=new Array(256);for(var a=1,e=0;e<256;e++)this._gh[e]=a,a<<=1,a>=256&&(a^=b);for(var e=0;e<255;e++)this._gi[this._gh[e]]=e;var d=new Array(1);d[0]=0,this.zero=new _bp(this,new Array(d));var c=new Array(1);c[0]=1,this.one=new _bp(this,new Array(c)),this.__defineGetter__("Zero",function(){return this.zero}),this.__defineGetter__("One",function(){return this.one}),this._ba=function(j,f){if(j<0)throw"bad arguments";if(0==f)return zero;for(var h=new Array(j+1),g=0;g<h.length;g++)h[g]=0;return h[0]=f,new _bp(this,h)},this.exp=function(f){return this._gh[f]},this.log=function(f){if(0==f)throw"bad arguments";return this._gi[f]},this.inverse=function(f){if(0==f)throw"System.ArithmeticException";return this._gh[255-this._gi[f]]},this.multiply=function(g,f){return 0==g||0==f?0:1==g?f:1==f?g:this._gh[(this._gi[g]+this._gi[f])%255]}}function _ew(a,b){return a>=0?a>>b:(a>>b)+(2<<~b)}function _cz(c,a,b){this.x=c,this.y=a,this.count=1,this._aj=b,this.__defineGetter__("_ei",function(){return this._aj}),this.__defineGetter__("Count",function(){return this.count}),this.__defineGetter__("X",function(){return this.x}),this.__defineGetter__("Y",function(){return this.y}),this._ek=function(){this.count++},this._ev=function(f,e,d){if(Math.abs(e-this.y)<=f&&Math.abs(d-this.x)<=f){var g=Math.abs(f-this._aj);return g<=1||g/this._aj<=1}return!1}}function _es(a){this._go=a[0],this._gu=a[1],this._gr=a[2],this.__defineGetter__("_gp",function(){return this._go}),this.__defineGetter__("_gq",function(){return this._gu}),this.__defineGetter__("_gs",function(){return this._gr})}function _cc(){this.image=null,this._cv=[],this._ge=!1,this._al=new Array(0,0,0,0,0),this._am=null,this.__defineGetter__("_da",function(){return this._al[0]=0,this._al[1]=0,this._al[2]=0,this._al[3]=0,this._al[4]=0,this._al}),this._ao=function(f){for(var b=0,d=0;d<5;d++){var e=f[d];if(0==e)return!1;b+=e}if(b<7)return!1;var c=Math.floor((b<<_el)/7),a=Math.floor(c/2);return Math.abs(c-(f[0]<<_el))<a&&Math.abs(c-(f[1]<<_el))<a&&Math.abs(3*c-(f[2]<<_el))<3*a&&Math.abs(c-(f[3]<<_el))<a&&Math.abs(c-(f[4]<<_el))<a},this._an=function(b,a){return a-b[4]-b[3]-b[2]/2},this._ap=function(a,j,d,g){for(var c=this.image,h=qrcode.height,b=this._da,f=a;f>=0&&c[j+f*qrcode.width];)b[2]++,f--;if(f<0)return NaN;for(;f>=0&&!c[j+f*qrcode.width]&&b[1]<=d;)b[1]++,f--;if(f<0||b[1]>d)return NaN;for(;f>=0&&c[j+f*qrcode.width]&&b[0]<=d;)b[0]++,f--;if(b[0]>d)return NaN;for(f=a+1;f<h&&c[j+f*qrcode.width];)b[2]++,f++;if(f==h)return NaN;for(;f<h&&!c[j+f*qrcode.width]&&b[3]<d;)b[3]++,f++;if(f==h||b[3]>=d)return NaN;for(;f<h&&c[j+f*qrcode.width]&&b[4]<d;)b[4]++,f++;if(b[4]>=d)return NaN;var e=b[0]+b[1]+b[2]+b[3]+b[4];return 5*Math.abs(e-g)>=2*g?NaN:this._ao(b)?this._an(b,f):NaN},this._ej=function(b,a,e,h){for(var d=this.image,i=qrcode.width,c=this._da,g=b;g>=0&&d[g+a*qrcode.width];)c[2]++,g--;if(g<0)return NaN;for(;g>=0&&!d[g+a*qrcode.width]&&c[1]<=e;)c[1]++,g--;if(g<0||c[1]>e)return NaN;for(;g>=0&&d[g+a*qrcode.width]&&c[0]<=e;)c[0]++,g--;if(c[0]>e)return NaN;for(g=b+1;g<i&&d[g+a*qrcode.width];)c[2]++,g++;if(g==i)return NaN;for(;g<i&&!d[g+a*qrcode.width]&&c[3]<e;)c[3]++,g++;if(g==i||c[3]>=e)return NaN;for(;g<i&&d[g+a*qrcode.width]&&c[4]<e;)c[4]++,g++;if(c[4]>=e)return NaN;var f=c[0]+c[1]+c[2]+c[3]+c[4];return 5*Math.abs(f-h)>=h?NaN:this._ao(c)?this._an(c,g):NaN},this._cu=function(c,f,e){var d=c[0]+c[1]+c[2]+c[3]+c[4],n=this._an(c,e),b=this._ap(f,Math.floor(n),c[2],d);if(!isNaN(b)&&(n=this._ej(Math.floor(n),Math.floor(b),c[2],d),!isNaN(n))){for(var l=d/7,m=!1,h=this._cv.length,g=0;g<h;g++){var a=this._cv[g];if(a._ev(l,b,n)){a._ek(),m=!0;break}}if(!m){var k=new _cz(n,b,l);this._cv.push(k),null!=this._am&&this._am._ep(k)}return!0}return!1},this._ee=function(){var a=this._cv.length;if(a<3)throw"Couldn't find enough finder patterns";if(a>3){for(var b=0,c=0;c<a;c++)b+=this._cv[c]._ei;for(var d=b/a,c=0;c<this._cv.length&&this._cv.length>3;c++){var e=this._cv[c];Math.abs(e._ei-d)>.2*d&&(this._cv.remove(c),c--)}}return this._cv.length>3&&this._cv.sort(function(g,f){return g.count>f.count?-1:g.count<f.count?1:0}),new Array(this._cv[0],this._cv[1],this._cv[2])},this._eq=function(){var b=this._cv.length;if(b<=1)return 0;for(var c=null,d=0;d<b;d++){var a=this._cv[d];if(a.Count>=_eg){if(null!=c)return this._ge=!0,Math.floor((Math.abs(c.X-a.X)-Math.abs(c.Y-a.Y))/2);c=a}}return 0},this._cx=function(){for(var g=0,c=0,a=this._cv.length,d=0;d<a;d++){var f=this._cv[d];f.Count>=_eg&&(g++,c+=f._ei)}if(g<3)return!1;for(var e=c/a,b=0,d=0;d<a;d++)f=this._cv[d],b+=Math.abs(f._ei-e);return b<=.05*c},this._ce=function(e){var o=!1;this.image=e;var n=qrcode.height,k=qrcode.width,a=Math.floor(3*n/(4*_eh));(a<_gf||o)&&(a=_gf);for(var g=!1,d=new Array(5),h=a-1;h<n&&!g;h+=a){d[0]=0,d[1]=0,d[2]=0,d[3]=0,d[4]=0;for(var b=0,f=0;f<k;f++)if(e[f+h*qrcode.width])1==(1&b)&&b++,d[b]++;else if(0==(1&b))if(4==b)if(this._ao(d)){var c=this._cu(d,h,f);if(c)if(a=2,this._ge)g=this._cx();else{var m=this._eq();m>d[2]&&(h+=m-d[2]-a,f=k-1)}else{do f++;while(f<k&&!e[f+h*qrcode.width]);f--}b=0,d[0]=0,d[1]=0,d[2]=0,d[3]=0,d[4]=0}else d[0]=d[2],d[1]=d[3],d[2]=d[4],d[3]=1,d[4]=0,b=3;else d[++b]++;else d[b]++;if(this._ao(d)){var c=this._cu(d,h,k);c&&(a=d[0],this._ge&&(g=_cx()))}}var l=this._ee();return qrcode._er(l),new _es(l)}}function _ai(c,a,b){this.x=c,this.y=a,this.count=1,this._aj=b,this.__defineGetter__("_ei",function(){return this._aj}),this.__defineGetter__("Count",function(){return this.count}),this.__defineGetter__("X",function(){return Math.floor(this.x)}),this.__defineGetter__("Y",function(){return Math.floor(this.y)}),this._ek=function(){this.count++},this._ev=function(f,e,d){if(Math.abs(e-this.y)<=f&&Math.abs(d-this.x)<=f){var g=Math.abs(f-this._aj);return g<=1||g/this._aj<=1}return!1}}function _ak(g,c,b,f,a,e,d){this.image=g,this._cv=new Array,this.startX=c,this.startY=b,this.width=f,this.height=a,this._ef=e,this._al=new Array(0,0,0),this._am=d,this._an=function(i,h){return h-i[2]-i[1]/2},this._ao=function(l){for(var k=this._ef,h=k/2,j=0;j<3;j++)if(Math.abs(k-l[j])>=h)return!1;return!0},this._ap=function(h,r,l,o){var k=this.image,q=qrcode.height,j=this._al;j[0]=0,j[1]=0,j[2]=0;for(var n=h;n>=0&&k[r+n*qrcode.width]&&j[1]<=l;)j[1]++,n--;if(n<0||j[1]>l)return NaN;for(;n>=0&&!k[r+n*qrcode.width]&&j[0]<=l;)j[0]++,n--;if(j[0]>l)return NaN;for(n=h+1;n<q&&k[r+n*qrcode.width]&&j[1]<=l;)j[1]++,n++;if(n==q||j[1]>l)return NaN;for(;n<q&&!k[r+n*qrcode.width]&&j[2]<=l;)j[2]++,n++;if(j[2]>l)return NaN;var m=j[0]+j[1]+j[2];return 5*Math.abs(m-o)>=2*o?NaN:this._ao(j)?this._an(j,n):NaN},this._cu=function(l,o,n){var m=l[0]+l[1]+l[2],u=this._an(l,n),k=this._ap(o,Math.floor(u),2*l[1],m);if(!isNaN(k)){for(var t=(l[0]+l[1]+l[2])/3,r=this._cv.length,q=0;q<r;q++){var h=this._cv[q];if(h._ev(t,k,u))return new _ai(u,k,t)}var s=new _ai(u,k,t);this._cv.push(s),null!=this._am&&this._am._ep(s)}return null},this.find=function(){for(var q=this.startX,t=this.height,r=q+f,s=b+(t>>1),m=new Array(0,0,0),k=0;k<t;k++){var o=s+(0==(1&k)?k+1>>1:-(k+1>>1));m[0]=0,m[1]=0,m[2]=0;for(var n=q;n<r&&!g[n+qrcode.width*o];)n++;for(var h=0;n<r;){if(g[n+o*qrcode.width])if(1==h)m[h]++;else if(2==h){if(this._ao(m)){var l=this._cu(m,o,n);if(null!=l)return l}m[0]=m[2],m[1]=1,m[2]=0,h=1}else m[++h]++;else 1==h&&h++,m[h]++;n++}if(this._ao(m)){var l=this._cu(m,o,r);if(null!=l)return l}}if(0!=this._cv.length)return this._cv[0];throw"Couldn't find enough alignment patterns"}}function QRCodeDataBlockReader(c,a,b){this._ed=0,this._cw=7,this.dataLength=0,this.blocks=c,this._en=b,a<=9?this.dataLengthMode=0:a>=10&&a<=26?this.dataLengthMode=1:a>=27&&a<=40&&(this.dataLengthMode=2),this._gd=function(f){var k=0;if(f<this._cw+1){for(var m=0,e=0;e<f;e++)m+=1<<e;return m<<=this._cw-f+1,k=(this.blocks[this._ed]&m)>>this._cw-f+1,this._cw-=f,k}if(f<this._cw+1+8){for(var j=0,e=0;e<this._cw+1;e++)j+=1<<e;return k=(this.blocks[this._ed]&j)<<f-(this._cw+1),this._ed++,k+=this.blocks[this._ed]>>8-(f-(this._cw+1)),this._cw=this._cw-f%8,this._cw<0&&(this._cw=8+this._cw),k}if(f<this._cw+1+16){for(var j=0,h=0,e=0;e<this._cw+1;e++)j+=1<<e;var g=(this.blocks[this._ed]&j)<<f-(this._cw+1);this._ed++;var d=this.blocks[this._ed]<<f-(this._cw+1+8);this._ed++;for(var e=0;e<f-(this._cw+1+8);e++)h+=1<<e;h<<=8-(f-(this._cw+1+8));var l=(this.blocks[this._ed]&h)>>8-(f-(this._cw+1+8));return k=g+d+l,this._cw=this._cw-(f-8)%8,this._cw<0&&(this._cw=8+this._cw),k}return 0},this.NextMode=function(){return this._ed>this.blocks.length-this._en-2?0:this._gd(4)},this.getDataLength=function(d){for(var e=0;;){if(d>>e==1)break;e++}return this._gd(qrcode._eo[this.dataLengthMode][e])},this.getRomanAndFigureString=function(h){var f=h,g=0,j="",d=new Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":");do if(f>1){g=this._gd(11);var i=Math.floor(g/45),e=g%45;j+=d[i],j+=d[e],f-=2}else 1==f&&(g=this._gd(6),j+=d[g],f-=1);while(f>0);return j},this.getFigureString=function(f){var d=f,e=0,g="";do d>=3?(e=this._gd(10),e<100&&(g+="0"),e<10&&(g+="0"),d-=3):2==d?(e=this._gd(7),e<10&&(g+="0"),d-=2):1==d&&(e=this._gd(4),d-=1),g+=e;while(d>0);return g},this.get8bitByteArray=function(g){var e=g,f=0,d=new Array;do f=this._gd(8),d.push(f),e--;while(e>0);return d},this.getKanjiString=function(j){var g=j,i=0,h="";do{i=_gd(13);var e=i%192,f=i/192,k=(f<<8)+e,d=0;d=k+33088<=40956?k+33088:k+49472,h+=String.fromCharCode(d),g--}while(g>0);return h},this.__defineGetter__("DataByte",function(){for(var g=new Array,e=1,f=2,d=4,n=8;;){var k=this.NextMode();if(0==k){if(g.length>0)break;throw"Empty data block"}if(k!=e&&k!=f&&k!=d&&k!=n)throw"Invalid mode: "+k+" in (block:"+this._ed+" bit:"+this._cw+")";if(dataLength=this.getDataLength(k),dataLength<1)throw"Invalid data length: "+dataLength;switch(k){case e:for(var l=this.getFigureString(dataLength),i=new Array(l.length),h=0;h<l.length;h++)i[h]=l.charCodeAt(h);g.push(i);break;case f:for(var l=this.getRomanAndFigureString(dataLength),i=new Array(l.length),h=0;h<l.length;h++)i[h]=l.charCodeAt(h);g.push(i);break;case d:var m=this.get8bitByteArray(dataLength);g.push(m);break;case n:var l=this.getKanjiString(dataLength);g.push(l)}}return g})}function C_Promise(workload,context){this.parent=context,this.update=null,this.finally=null,this.error_function=null,this.then=function(callback){return this.finally=callback,this},this.progress=function(callback){return this.update=callback,this},this.error=function(callback){return this.error_function=callback,this},this.call_then=function(data){null!==this.finally&&this.finally(data);
},this.call_progress=function(data){null!==this.update&&this.update(data)},this.call_error=function(data){null!==this.error_function&&this.error_function(data)},setTimeout(workload.bind(this),100)}!function(C){function N(a){return function(){var d,b=arguments[0];for(d="["+(a?a+":":"")+b+"] http://errors.angularjs.org/1.5.8/"+(a?a+"/":"")+b,b=1;b<arguments.length;b++){d=d+(1==b?"?":"&")+"p"+(b-1)+"=";var e,c=encodeURIComponent;e=arguments[b],e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e,d+=c(e)}return Error(d)}}function ta(a){if(null==a||Va(a))return!1;if(L(a)||G(a)||F&&a instanceof F)return!0;var b="length"in Object(a)&&a.length;return T(b)&&(0<=b&&(b-1 in a||a instanceof Array)||"function"==typeof a.item)}function q(a,b,d){var c,e;if(a)if(z(a))for(c in a)"prototype"==c||"length"==c||"name"==c||a.hasOwnProperty&&!a.hasOwnProperty(c)||b.call(d,a[c],c,a);else if(L(a)||ta(a)){var f="object"!=typeof a;for(c=0,e=a.length;c<e;c++)(f||c in a)&&b.call(d,a[c],c,a)}else if(a.forEach&&a.forEach!==q)a.forEach(b,d,a);else if(sc(a))for(c in a)b.call(d,a[c],c,a);else if("function"==typeof a.hasOwnProperty)for(c in a)a.hasOwnProperty(c)&&b.call(d,a[c],c,a);else for(c in a)ua.call(a,c)&&b.call(d,a[c],c,a);return a}function tc(a,b,d){for(var c=Object.keys(a).sort(),e=0;e<c.length;e++)b.call(d,a[c[e]],c[e]);return c}function uc(a){return function(b,d){a(d,b)}}function Yd(){return++pb}function Pb(a,b,d){for(var c=a.$$hashKey,e=0,f=b.length;e<f;++e){var g=b[e];if(D(g)||z(g))for(var h=Object.keys(g),k=0,l=h.length;k<l;k++){var m=h[k],n=g[m];d&&D(n)?da(n)?a[m]=new Date(n.valueOf()):Wa(n)?a[m]=new RegExp(n):n.nodeName?a[m]=n.cloneNode(!0):Qb(n)?a[m]=n.clone():(D(a[m])||(a[m]=L(n)?[]:{}),Pb(a[m],[n],!0)):a[m]=n}}return c?a.$$hashKey=c:delete a.$$hashKey,a}function S(a){return Pb(a,va.call(arguments,1),!1)}function Zd(a){return Pb(a,va.call(arguments,1),!0)}function Z(a){return parseInt(a,10)}function Rb(a,b){return S(Object.create(a),b)}function A(){}function Xa(a){return a}function ha(a){return function(){return a}}function vc(a){return z(a.toString)&&a.toString!==ma}function y(a){return"undefined"==typeof a}function w(a){return"undefined"!=typeof a}function D(a){return null!==a&&"object"==typeof a}function sc(a){return null!==a&&"object"==typeof a&&!wc(a)}function G(a){return"string"==typeof a}function T(a){return"number"==typeof a}function da(a){return"[object Date]"===ma.call(a)}function z(a){return"function"==typeof a}function Wa(a){return"[object RegExp]"===ma.call(a)}function Va(a){return a&&a.window===a}function Ya(a){return a&&a.$evalAsync&&a.$watch}function Ga(a){return"boolean"==typeof a}function $d(a){return a&&T(a.length)&&ae.test(ma.call(a))}function Qb(a){return!(!a||!(a.nodeName||a.prop&&a.attr&&a.find))}function be(a){var b={};a=a.split(",");var d;for(d=0;d<a.length;d++)b[a[d]]=!0;return b}function wa(a){return Q(a.nodeName||a[0]&&a[0].nodeName)}function Za(a,b){var d=a.indexOf(b);return 0<=d&&a.splice(d,1),d}function pa(a,b){function d(a,b){var e,d=b.$$hashKey;if(L(a)){e=0;for(var f=a.length;e<f;e++)b.push(c(a[e]))}else if(sc(a))for(e in a)b[e]=c(a[e]);else if(a&&"function"==typeof a.hasOwnProperty)for(e in a)a.hasOwnProperty(e)&&(b[e]=c(a[e]));else for(e in a)ua.call(a,e)&&(b[e]=c(a[e]));return d?b.$$hashKey=d:delete b.$$hashKey,b}function c(a){if(!D(a))return a;var b=f.indexOf(a);if(-1!==b)return g[b];if(Va(a)||Ya(a))throw xa("cpws");var b=!1,c=e(a);return void 0===c&&(c=L(a)?[]:Object.create(wc(a)),b=!0),f.push(a),g.push(c),b?d(a,c):c}function e(a){switch(ma.call(a)){case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Float32Array]":case"[object Float64Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return new a.constructor(c(a.buffer),a.byteOffset,a.length);case"[object ArrayBuffer]":if(!a.slice){var b=new ArrayBuffer(a.byteLength);return new Uint8Array(b).set(new Uint8Array(a)),b}return a.slice(0);case"[object Boolean]":case"[object Number]":case"[object String]":case"[object Date]":return new a.constructor(a.valueOf());case"[object RegExp]":return b=new RegExp(a.source,a.toString().match(/[^\/]*$/)[0]),b.lastIndex=a.lastIndex,b;case"[object Blob]":return new a.constructor([a],{type:a.type})}if(z(a.cloneNode))return a.cloneNode(!0)}var f=[],g=[];if(b){if($d(b)||"[object ArrayBuffer]"===ma.call(b))throw xa("cpta");if(a===b)throw xa("cpi");return L(b)?b.length=0:q(b,function(a,d){"$$hashKey"!==d&&delete b[d]}),f.push(a),g.push(b),d(a,b)}return c(a)}function na(a,b){if(a===b)return!0;if(null===a||null===b)return!1;if(a!==a&&b!==b)return!0;var c,d=typeof a;if(d==typeof b&&"object"==d){if(!L(a)){if(da(a))return!!da(b)&&na(a.getTime(),b.getTime());if(Wa(a))return!!Wa(b)&&a.toString()==b.toString();if(Ya(a)||Ya(b)||Va(a)||Va(b)||L(b)||da(b)||Wa(b))return!1;d=U();for(c in a)if("$"!==c.charAt(0)&&!z(a[c])){if(!na(a[c],b[c]))return!1;d[c]=!0}for(c in b)if(!(c in d)&&"$"!==c.charAt(0)&&w(b[c])&&!z(b[c]))return!1;return!0}if(!L(b))return!1;if((d=a.length)==b.length){for(c=0;c<d;c++)if(!na(a[c],b[c]))return!1;return!0}}return!1}function $a(a,b,d){return a.concat(va.call(b,d))}function ab(a,b){var d=2<arguments.length?va.call(arguments,2):[];return!z(b)||b instanceof RegExp?b:d.length?function(){return arguments.length?b.apply(a,$a(d,arguments,0)):b.apply(a,d)}:function(){return arguments.length?b.apply(a,arguments):b.call(a)}}function ce(a,b){var d=b;return"string"==typeof a&&"$"===a.charAt(0)&&"$"===a.charAt(1)?d=void 0:Va(b)?d="$WINDOW":b&&C.document===b?d="$DOCUMENT":Ya(b)&&(d="$SCOPE"),d}function bb(a,b){if(!y(a))return T(b)||(b=b?2:null),JSON.stringify(a,ce,b)}function xc(a){return G(a)?JSON.parse(a):a}function yc(a,b){a=a.replace(de,"");var d=Date.parse("Jan 01, 1970 00:00:00 "+a)/6e4;return isNaN(d)?b:d}function Sb(a,b,d){d=d?-1:1;var c=a.getTimezoneOffset();return b=yc(b,c),d*=b-c,a=new Date(a.getTime()),a.setMinutes(a.getMinutes()+d),a}function ya(a){a=F(a).clone();try{a.empty()}catch(b){}var d=F("<div>").append(a).html();try{return a[0].nodeType===Ma?Q(d):d.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+Q(b)})}catch(c){return Q(d)}}function zc(a){try{return decodeURIComponent(a)}catch(b){}}function Ac(a){var b={};return q((a||"").split("&"),function(a){var c,e,f;a&&(e=a=a.replace(/\+/g,"%20"),c=a.indexOf("="),-1!==c&&(e=a.substring(0,c),f=a.substring(c+1)),e=zc(e),w(e)&&(f=!w(f)||zc(f),ua.call(b,e)?L(b[e])?b[e].push(f):b[e]=[b[e],f]:b[e]=f))}),b}function Tb(a){var b=[];return q(a,function(a,c){L(a)?q(a,function(a){b.push(ea(c,!0)+(!0===a?"":"="+ea(a,!0)))}):b.push(ea(c,!0)+(!0===a?"":"="+ea(a,!0)))}),b.length?b.join("&"):""}function qb(a){return ea(a,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function ea(a,b){return encodeURIComponent(a).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,b?"%20":"+")}function ee(a,b){var d,c,e=Na.length;for(c=0;c<e;++c)if(d=Na[c]+b,G(d=a.getAttribute(d)))return d;return null}function fe(a,b){var d,c,e={};q(Na,function(b){b+="app",!d&&a.hasAttribute&&a.hasAttribute(b)&&(d=a,c=a.getAttribute(b))}),q(Na,function(b){b+="app";var e;!d&&(e=a.querySelector("["+b.replace(":","\\:")+"]"))&&(d=e,c=e.getAttribute(b))}),d&&(e.strictDi=null!==ee(d,"strict-di"),b(d,c?[c]:[],e))}function Bc(a,b,d){D(d)||(d={}),d=S({strictDi:!1},d);var c=function(){if(a=F(a),a.injector()){var c=a[0]===C.document?"document":ya(a);throw xa("btstrpd",c.replace(/</,"&lt;").replace(/>/,"&gt;"))}return b=b||[],b.unshift(["$provide",function(b){b.value("$rootElement",a)}]),d.debugInfoEnabled&&b.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]),b.unshift("ng"),c=cb(b,d.strictDi),c.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d),c(b)(a)})}]),c},e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;return C&&e.test(C.name)&&(d.debugInfoEnabled=!0,C.name=C.name.replace(e,"")),C&&!f.test(C.name)?c():(C.name=C.name.replace(f,""),ca.resumeBootstrap=function(a){return q(a,function(a){b.push(a)}),c()},void(z(ca.resumeDeferredBootstrap)&&ca.resumeDeferredBootstrap()))}function ge(){C.name="NG_ENABLE_DEBUG_INFO!"+C.name,C.location.reload()}function he(a){if(a=ca.element(a).injector(),!a)throw xa("test");return a.get("$$testability")}function Cc(a,b){return b=b||"_",a.replace(ie,function(a,c){return(c?b:"")+a.toLowerCase()})}function je(){var a;if(!Dc){var b=rb();(qa=y(b)?C.jQuery:b?C[b]:void 0)&&qa.fn.on?(F=qa,S(qa.fn,{scope:Oa.scope,isolateScope:Oa.isolateScope,controller:Oa.controller,injector:Oa.injector,inheritedData:Oa.inheritedData}),a=qa.cleanData,qa.cleanData=function(b){for(var c,f,e=0;null!=(f=b[e]);e++)(c=qa._data(f,"events"))&&c.$destroy&&qa(f).triggerHandler("$destroy");a(b)}):F=O,ca.element=F,Dc=!0}}function sb(a,b,d){if(!a)throw xa("areq",b||"?",d||"required");return a}function Pa(a,b,d){return d&&L(a)&&(a=a[a.length-1]),sb(z(a),b,"not a function, got "+(a&&"object"==typeof a?a.constructor.name||"Object":typeof a)),a}function Qa(a,b){if("hasOwnProperty"===a)throw xa("badname",b)}function Ec(a,b,d){if(!b)return a;b=b.split(".");for(var c,e=a,f=b.length,g=0;g<f;g++)c=b[g],a&&(a=(e=a)[c]);return!d&&z(a)?ab(e,a):a}function tb(a){for(var c,b=a[0],d=a[a.length-1],e=1;b!==d&&(b=b.nextSibling);e++)(c||a[e]!==b)&&(c||(c=F(va.call(a,0,e))),c.push(b));return c||a}function U(){return Object.create(null)}function ke(a){function b(a,b,c){return a[b]||(a[b]=c())}var d=N("$injector"),c=N("ng");return a=b(a,"angular",Object),a.$$minErr=a.$$minErr||N,b(a,"module",function(){var a={};return function(f,g,h){if("hasOwnProperty"===f)throw c("badname","module");return g&&a.hasOwnProperty(f)&&(a[f]=null),b(a,f,function(){function a(b,d,e,f){return f||(f=c),function(){return f[e||"push"]([b,d,arguments]),R}}function b(a,d){return function(b,e){return e&&z(e)&&(e.$$moduleName=f),c.push([a,d,arguments]),R}}if(!g)throw d("nomod",f);var c=[],e=[],p=[],u=a("$injector","invoke","push",e),R={_invokeQueue:c,_configBlocks:e,_runBlocks:p,requires:g,name:f,provider:b("$provide","provider"),factory:b("$provide","factory"),service:b("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),decorator:b("$provide","decorator"),animation:b("$animateProvider","register"),filter:b("$filterProvider","register"),controller:b("$controllerProvider","register"),directive:b("$compileProvider","directive"),component:b("$compileProvider","component"),config:u,run:function(a){return p.push(a),this}};return h&&u(h),R})}})}function ia(a,b){if(L(a)){b=b||[];for(var d=0,c=a.length;d<c;d++)b[d]=a[d]}else if(D(a))for(d in b=b||{},a)"$"===d.charAt(0)&&"$"===d.charAt(1)||(b[d]=a[d]);return b||a}function le(a){S(a,{bootstrap:Bc,copy:pa,extend:S,merge:Zd,equals:na,element:F,forEach:q,injector:cb,noop:A,bind:ab,toJson:bb,fromJson:xc,identity:Xa,isUndefined:y,isDefined:w,isString:G,isFunction:z,isObject:D,isNumber:T,isElement:Qb,isArray:L,version:me,isDate:da,lowercase:Q,uppercase:ub,callbacks:{$$counter:0},getTestability:he,$$minErr:N,$$csp:Ba,reloadWithDebugInfo:ge}),(Ub=ke(C))("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:ne}),a.provider("$compile",Fc).directive({a:oe,input:Gc,textarea:Gc,form:pe,script:qe,select:re,style:se,option:te,ngBind:ue,ngBindHtml:ve,ngBindTemplate:we,ngClass:xe,ngClassEven:ye,ngClassOdd:ze,ngCloak:Ae,ngController:Be,ngForm:Ce,ngHide:De,ngIf:Ee,ngInclude:Fe,ngInit:Ge,ngNonBindable:He,ngPluralize:Ie,ngRepeat:Je,ngShow:Ke,ngStyle:Le,ngSwitch:Me,ngSwitchWhen:Ne,ngSwitchDefault:Oe,ngOptions:Pe,ngTransclude:Qe,ngModel:Re,ngList:Se,ngChange:Te,pattern:Hc,ngPattern:Hc,required:Ic,ngRequired:Ic,minlength:Jc,ngMinlength:Jc,maxlength:Kc,ngMaxlength:Kc,ngValue:Ue,ngModelOptions:Ve}).directive({ngInclude:We}).directive(vb).directive(Lc),a.provider({$anchorScroll:Xe,$animate:Ye,$animateCss:Ze,$$animateJs:$e,$$animateQueue:af,$$AnimateRunner:bf,$$animateAsyncRun:cf,$browser:df,$cacheFactory:ef,$controller:ff,$document:gf,$exceptionHandler:hf,$filter:Mc,$$forceReflow:jf,$interpolate:kf,$interval:lf,$http:mf,$httpParamSerializer:nf,$httpParamSerializerJQLike:of,$httpBackend:pf,$xhrFactory:qf,$jsonpCallbacks:rf,$location:sf,$log:tf,$parse:uf,$rootScope:vf,$q:wf,$$q:xf,$sce:yf,$sceDelegate:zf,$sniffer:Af,$templateCache:Bf,$templateRequest:Cf,$$testability:Df,$timeout:Ef,$window:Ff,$$rAF:Gf,$$jqLite:Hf,$$HashMap:If,$$cookieReader:Jf})}])}function db(a){return a.replace(Kf,function(a,d,c,e){return e?c.toUpperCase():c}).replace(Lf,"Moz$1")}function Nc(a){return a=a.nodeType,1===a||!a||9===a}function Oc(a,b){var d,c,e=b.createDocumentFragment(),f=[];if(Vb.test(a)){for(d=e.appendChild(b.createElement("div")),c=(Mf.exec(a)||["",""])[1].toLowerCase(),c=ja[c]||ja._default,d.innerHTML=c[1]+a.replace(Nf,"<$1></$2>")+c[2],c=c[0];c--;)d=d.lastChild;f=$a(f,d.childNodes),d=e.firstChild,d.textContent=""}else f.push(b.createTextNode(a));return e.textContent="",e.innerHTML="",q(f,function(a){e.appendChild(a)}),e}function Pc(a,b){var d=a.parentNode;d&&d.replaceChild(b,a),b.appendChild(a)}function O(a){if(a instanceof O)return a;var b;if(G(a)&&(a=W(a),b=!0),!(this instanceof O)){if(b&&"<"!=a.charAt(0))throw Wb("nosel");return new O(a)}if(b){b=C.document;var d;a=(d=Of.exec(a))?[b.createElement(d[1])]:(d=Oc(a,b))?d.childNodes:[]}Qc(this,a)}function Xb(a){return a.cloneNode(!0)}function wb(a,b){if(b||eb(a),a.querySelectorAll)for(var d=a.querySelectorAll("*"),c=0,e=d.length;c<e;c++)eb(d[c])}function Rc(a,b,d,c){if(w(c))throw Wb("offargs");var e=(c=xb(a))&&c.events,f=c&&c.handle;if(f)if(b){var g=function(b){var c=e[b];w(d)&&Za(c||[],d),w(d)&&c&&0<c.length||(a.removeEventListener(b,f,!1),delete e[b])};q(b.split(" "),function(a){g(a),yb[a]&&g(yb[a])})}else for(b in e)"$destroy"!==b&&a.removeEventListener(b,f,!1),delete e[b]}function eb(a,b){var d=a.ng339,c=d&&fb[d];c&&(b?delete c.data[b]:(c.handle&&(c.events.$destroy&&c.handle({},"$destroy"),Rc(a)),delete fb[d],a.ng339=void 0))}function xb(a,b){var d=a.ng339,d=d&&fb[d];return b&&!d&&(a.ng339=d=++Pf,d=fb[d]={events:{},data:{},handle:void 0}),d}function Yb(a,b,d){if(Nc(a)){var c=w(d),e=!c&&b&&!D(b),f=!b;if(a=(a=xb(a,!e))&&a.data,c)a[b]=d;else{if(f)return a;if(e)return a&&a[b];S(a,b)}}}function zb(a,b){return!!a.getAttribute&&-1<(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+b+" ")}function Ab(a,b){b&&a.setAttribute&&q(b.split(" "),function(b){a.setAttribute("class",W((" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+W(b)+" "," ")))})}function Bb(a,b){if(b&&a.setAttribute){var d=(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");q(b.split(" "),function(a){a=W(a),-1===d.indexOf(" "+a+" ")&&(d+=a+" ")}),a.setAttribute("class",W(d))}}function Qc(a,b){if(b)if(b.nodeType)a[a.length++]=b;else{var d=b.length;if("number"==typeof d&&b.window!==b){if(d)for(var c=0;c<d;c++)a[a.length++]=b[c]}else a[a.length++]=b}}function Sc(a,b){return Cb(a,"$"+(b||"ngController")+"Controller")}function Cb(a,b,d){for(9==a.nodeType&&(a=a.documentElement),b=L(b)?b:[b];a;){for(var c=0,e=b.length;c<e;c++)if(w(d=F.data(a,b[c])))return d;a=a.parentNode||11===a.nodeType&&a.host}}function Tc(a){for(wb(a,!0);a.firstChild;)a.removeChild(a.firstChild)}function Db(a,b){b||wb(a);var d=a.parentNode;d&&d.removeChild(a)}function Qf(a,b){b=b||C,"complete"===b.document.readyState?b.setTimeout(a):F(b).on("load",a)}function Uc(a,b){var d=Eb[b.toLowerCase()];return d&&Vc[wa(a)]&&d}function Rf(a,b){var d=function(c,d){c.isDefaultPrevented=function(){return c.defaultPrevented};var f=b[d||c.type],g=f?f.length:0;if(g){if(y(c.immediatePropagationStopped)){var h=c.stopImmediatePropagation;c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0,c.stopPropagation&&c.stopPropagation(),h&&h.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};var k=f.specialHandlerWrapper||Sf;1<g&&(f=ia(f));for(var l=0;l<g;l++)c.isImmediatePropagationStopped()||k(a,c,f[l])}};return d.elem=a,d}function Sf(a,b,d){d.call(a,b)}function Tf(a,b,d){var c=b.relatedTarget;c&&(c===a||Uf.call(a,c))||d.call(a,b)}function Hf(){this.$get=function(){return S(O,{hasClass:function(a,b){return a.attr&&(a=a[0]),zb(a,b)},addClass:function(a,b){return a.attr&&(a=a[0]),Bb(a,b)},removeClass:function(a,b){return a.attr&&(a=a[0]),Ab(a,b)}})}}function Ca(a,b){var d=a&&a.$$hashKey;return d?("function"==typeof d&&(d=a.$$hashKey()),d):(d=typeof a,d="function"==d||"object"==d&&null!==a?a.$$hashKey=d+":"+(b||Yd)():d+":"+a)}function Ra(a,b){if(b){var d=0;this.nextUid=function(){return++d}}q(a,this.put,this)}function Wc(a){return a=(Function.prototype.toString.call(a)+" ").replace(Vf,""),a.match(Wf)||a.match(Xf)}function Yf(a){return(a=Wc(a))?"function("+(a[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function cb(a,b){function d(a){return function(b,c){return D(b)?void q(b,uc(a)):a(b,c)}}function c(a,b){if(Qa(a,"service"),(z(b)||L(b))&&(b=p.instantiate(b)),!b.$get)throw Ha("pget",a);return n[a+"Provider"]=b}function e(a,b){return function(){var c=B.invoke(b,this);if(y(c))throw Ha("undef",a);return c}}function f(a,b,d){return c(a,{$get:!1!==d?e(a,b):b})}function g(a){sb(y(a)||L(a),"modulesToLoad","not an array");var c,b=[];return q(a,function(a){function d(a){var b,c;for(b=0,c=a.length;b<c;b++){var e=a[b],f=p.get(e[0]);f[e[1]].apply(f,e[2])}}if(!m.get(a)){m.put(a,!0);try{G(a)?(c=Ub(a),b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):z(a)?b.push(p.invoke(a)):L(a)?b.push(p.invoke(a)):Pa(a,"module")}catch(e){throw L(a)&&(a=a[a.length-1]),e.message&&e.stack&&-1==e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),Ha("modulerr",a,e.stack||e.message||e)}}}),b}function h(a,c){function d(b,e){if(a.hasOwnProperty(b)){if(a[b]===k)throw Ha("cdep",b+" <- "+l.join(" <- "));return a[b]}try{return l.unshift(b),a[b]=k,a[b]=c(b,e)}catch(f){throw a[b]===k&&delete a[b],f}finally{l.shift()}}function e(a,c,f){var g=[];a=cb.$$annotate(a,b,f);for(var h=0,k=a.length;h<k;h++){var l=a[h];if("string"!=typeof l)throw Ha("itkn",l);g.push(c&&c.hasOwnProperty(l)?c[l]:d(l,f))}return g}return{invoke:function(a,b,c,d){return"string"==typeof c&&(d=c,c=null),c=e(a,c,d),L(a)&&(a=a[a.length-1]),d=!(11>=Ea)&&("function"==typeof a&&/^(?:class\b|constructor\()/.test(Function.prototype.toString.call(a)+" ")),d?(c.unshift(null),new(Function.prototype.bind.apply(a,c))):a.apply(b,c)},instantiate:function(a,b,c){var d=L(a)?a[a.length-1]:a;return a=e(a,b,c),a.unshift(null),new(Function.prototype.bind.apply(d,a))},get:d,annotate:cb.$$annotate,has:function(b){return n.hasOwnProperty(b+"Provider")||a.hasOwnProperty(b)}}}b=!0===b;var k={},l=[],m=new Ra([],!0),n={$provide:{provider:d(c),factory:d(f),service:d(function(a,b){return f(a,["$injector",function(a){return a.instantiate(b)}])}),value:d(function(a,b){return f(a,ha(b),!1)}),constant:d(function(a,b){Qa(a,"constant"),n[a]=b,u[a]=b}),decorator:function(a,b){var c=p.get(a+"Provider"),d=c.$get;c.$get=function(){var a=B.invoke(d,c);return B.invoke(b,null,{$delegate:a})}}}},p=n.$injector=h(n,function(a,b){throw ca.isString(b)&&l.push(b),Ha("unpr",l.join(" <- "))}),u={},R=h(u,function(a,b){var c=p.get(a+"Provider",b);return B.invoke(c.$get,c,void 0,a)}),B=R;n.$injectorProvider={$get:ha(R)};var r=g(a),B=R.get("$injector");return B.strictDi=b,q(r,function(a){a&&B.invoke(a)}),B}function Xe(){var a=!0;this.disableAutoScrolling=function(){a=!1},this.$get=["$window","$location","$rootScope",function(b,d,c){function e(a){var b=null;return Array.prototype.some.call(a,function(a){if("a"===wa(a))return b=a,!0}),b}function f(a){if(a){a.scrollIntoView();var c;c=g.yOffset,z(c)?c=c():Qb(c)?(c=c[0],c="fixed"!==b.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):T(c)||(c=0),c&&(a=a.getBoundingClientRect().top,b.scrollBy(0,a-c))}else b.scrollTo(0,0)}function g(a){a=G(a)?a:d.hash();var b;a?(b=h.getElementById(a))?f(b):(b=e(h.getElementsByName(a)))?f(b):"top"===a&&f(null):f(null)}var h=b.document;return a&&c.$watch(function(){return d.hash()},function(a,b){a===b&&""===a||Qf(function(){c.$evalAsync(g)})}),g}]}function gb(a,b){return a||b?a?b?(L(a)&&(a=a.join(" ")),L(b)&&(b=b.join(" ")),a+" "+b):a:b:""}function Zf(a){G(a)&&(a=a.split(" "));var b=U();return q(a,function(a){a.length&&(b[a]=!0)}),b}function Ia(a){return D(a)?a:{}}function $f(a,b,d,c){function e(a){try{a.apply(null,va.call(arguments,1))}finally{if(R--,0===R)for(;B.length;)try{B.pop()()}catch(b){d.error(b)}}}function f(){t=null,g(),h()}function g(){r=K(),r=y(r)?null:r,na(r,E)&&(r=E),E=r}function h(){v===k.url()&&J===r||(v=k.url(),J=r,q(M,function(a){a(k.url(),r)}))}var k=this,l=a.location,m=a.history,n=a.setTimeout,p=a.clearTimeout,u={};k.isMock=!1;var R=0,B=[];k.$$completeOutstandingRequest=e,k.$$incOutstandingRequestCount=function(){R++},k.notifyWhenNoOutstandingRequests=function(a){0===R?a():B.push(a)};var r,J,v=l.href,fa=b.find("base"),t=null,K=c.history?function(){try{return m.state}catch(a){}}:A;g(),J=r,k.url=function(b,d,e){if(y(e)&&(e=null),l!==a.location&&(l=a.location),m!==a.history&&(m=a.history),b){var f=J===e;if(v===b&&(!c.history||f))return k;var h=v&&Ja(v)===Ja(b);return v=b,J=e,!c.history||h&&f?(h||(t=b),d?l.replace(b):h?(d=l,e=b.indexOf("#"),e=-1===e?"":b.substr(e),d.hash=e):l.href=b,l.href!==b&&(t=b)):(m[d?"replaceState":"pushState"](e,"",b),g(),J=r),t&&(t=b),k}return t||l.href.replace(/%27/g,"'")},k.state=function(){return r};var M=[],H=!1,E=null;k.onUrlChange=function(b){return H||(c.history&&F(a).on("popstate",f),F(a).on("hashchange",f),H=!0),M.push(b),b},k.$$applicationDestroyed=function(){F(a).off("hashchange popstate",f)},k.$$checkUrlChange=h,k.baseHref=function(){var a=fa.attr("href");return a?a.replace(/^(https?\:)?\/\/[^\/]*/,""):""},k.defer=function(a,b){var c;return R++,c=n(function(){delete u[c],e(a)},b||0),u[c]=!0,c},k.defer.cancel=function(a){return!!u[a]&&(delete u[a],p(a),e(A),!0)}}function df(){this.$get=["$window","$log","$sniffer","$document",function(a,b,d,c){return new $f(a,c,b,d)}]}function ef(){this.$get=function(){function a(a,c){function e(a){a!=n&&(p?p==a&&(p=a.n):p=a,f(a.n,a.p),f(a,n),n=a,n.n=null)}function f(a,b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(a in b)throw N("$cacheFactory")("iid",a);var g=0,h=S({},c,{id:a}),k=U(),l=c&&c.capacity||Number.MAX_VALUE,m=U(),n=null,p=null;return b[a]={put:function(a,b){if(!y(b)){if(l<Number.MAX_VALUE){var c=m[a]||(m[a]={key:a});e(c)}return a in k||g++,k[a]=b,g>l&&this.remove(p.key),b}},get:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;e(b)}return k[a]},remove:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;b==n&&(n=b.p),b==p&&(p=b.n),f(b.n,b.p),delete m[a]}a in k&&(delete k[a],g--)},removeAll:function(){k=U(),g=0,m=U(),n=p=null},destroy:function(){m=h=k=null,delete b[a]},info:function(){return S({},h,{size:g})}}}var b={};return a.info=function(){var a={};return q(b,function(b,e){a[e]=b.info()}),a},a.get=function(a){return b[a]},a}}function Bf(){this.$get=["$cacheFactory",function(a){return a("templates")}]}function Fc(a,b){function d(a,b,c){var d=/^\s*([@&<]|=(\*?))(\??)\s*(\w*)\s*$/,e=U();return q(a,function(a,f){if(a in n)e[f]=n[a];else{var g=a.match(d);if(!g)throw ga("iscp",b,f,a,c?"controller bindings definition":"isolate scope definition");e[f]={mode:g[1][0],collection:"*"===g[2],optional:"?"===g[3],attrName:g[4]||f},g[4]&&(n[a]=e[f])}}),e}function c(a){var b=a.charAt(0);if(!b||b!==Q(b))throw ga("baddir",a);if(a!==a.trim())throw ga("baddir",a)}function e(a){var b=a.require||a.controller&&a.name;return!L(b)&&D(b)&&q(b,function(a,c){var d=a.match(l);a.substring(d[0].length)||(b[c]=d[0]+c)}),b}var f={},g=/^\s*directive\:\s*([\w\-]+)\s+(.*)$/,h=/(([\w\-]+)(?:\:([^;]+))?;?)/,k=be("ngSrc,ngSrcset,src,srcset"),l=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,m=/^(on[a-z]+|formaction)$/,n=U();this.directive=function B(b,d){return Qa(b,"directive"),G(b)?(c(b),sb(d,"directiveFactory"),f.hasOwnProperty(b)||(f[b]=[],a.factory(b+"Directive",["$injector","$exceptionHandler",function(a,c){var d=[];return q(f[b],function(f,g){try{var h=a.invoke(f);z(h)?h={compile:ha(h)}:!h.compile&&h.link&&(h.compile=ha(h.link)),h.priority=h.priority||0,h.index=g,h.name=h.name||b,h.require=e(h),h.restrict=h.restrict||"EA",h.$$moduleName=f.$$moduleName,d.push(h)}catch(k){c(k)}}),d}])),f[b].push(d)):q(b,uc(B)),this},this.component=function(a,b){function c(a){function e(b){return z(b)||L(b)?function(c,d){return a.invoke(b,this,{$element:c,$attrs:d})}:b}var f=b.template||b.templateUrl?b.template:"",g={controller:d,controllerAs:Xc(b.controller)||b.controllerAs||"$ctrl",template:e(f),templateUrl:e(b.templateUrl),transclude:b.transclude,scope:{},bindToController:b.bindings||{},restrict:"E",require:b.require};return q(b,function(a,b){"$"===b.charAt(0)&&(g[b]=a)}),g}var d=b.controller||function(){};return q(b,function(a,b){"$"===b.charAt(0)&&(c[b]=a,z(d)&&(d[b]=a))}),c.$inject=["$injector"],this.directive(a,c)},this.aHrefSanitizationWhitelist=function(a){return w(a)?(b.aHrefSanitizationWhitelist(a),this):b.aHrefSanitizationWhitelist()},this.imgSrcSanitizationWhitelist=function(a){return w(a)?(b.imgSrcSanitizationWhitelist(a),this):b.imgSrcSanitizationWhitelist()};var p=!0;this.debugInfoEnabled=function(a){return w(a)?(p=a,this):p};var u=10;this.onChangesTtl=function(a){return arguments.length?(u=a,this):u},this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$sce","$animate","$$sanitizeUri",function(a,b,c,e,n,t,K,M,H,E){function I(){try{if(!--qa)throw Y=void 0,ga("infchng",u);K.$apply(function(){for(var a=[],b=0,c=Y.length;b<c;++b)try{Y[b]()}catch(d){a.push(d)}if(Y=void 0,a.length)throw a})}finally{qa++}}function Da(a,b){if(b){var d,e,f,c=Object.keys(b);for(d=0,e=c.length;d<e;d++)f=c[d],this[f]=b[f]}else this.$attr={};this.$$element=a}function P(a,b,c){pa.innerHTML="<span "+b+">",b=pa.firstChild.attributes;var d=b[0];b.removeNamedItem(d.name),d.value=c,a.attributes.setNamedItem(d)}function x(a,b){try{a.addClass(b)}catch(c){}}function aa(a,b,c,d,e){a instanceof F||(a=F(a));for(var f=/\S+/,g=0,h=a.length;g<h;g++){var k=a[g];k.nodeType===Ma&&k.nodeValue.match(f)&&Pc(k,a[g]=C.document.createElement("span"))}var l=s(a,b,a,c,d,e);aa.$$addScopeClass(a);var m=null;return function(b,c,d){sb(b,"scope"),e&&e.needsNewScope&&(b=b.$parent.$new()),d=d||{};var f=d.parentBoundTranscludeFn,g=d.transcludeControllers;if(d=d.futureParentElement,f&&f.$$boundTransclude&&(f=f.$$boundTransclude),m||(m=(d=d&&d[0])&&"foreignobject"!==wa(d)&&ma.call(d).match(/SVG/)?"svg":"html"),d="html"!==m?F(da(m,F("<div>").append(a).html())):c?Oa.clone.call(a):a,g)for(var h in g)d.data("$"+h+"Controller",g[h].instance);return aa.$$addScopeInfo(d,b),c&&c(d,b),l&&l(b,d,d,f),d}}function s(a,b,c,d,e,f){function g(a,c,d,e){var f,k,l,m,p,r,v;if(n)for(v=Array(c.length),m=0;m<h.length;m+=3)f=h[m],v[f]=c[f];else v=c;for(m=0,p=h.length;m<p;)k=v[h[m++]],c=h[m++],f=h[m++],c?(c.scope?(l=a.$new(),aa.$$addScopeInfo(F(k),l)):l=a,r=c.transcludeOnThisElement?za(a,c.transclude,e):!c.templateOnThisElement&&e?e:!e&&b?za(a,b):null,c(f,l,k,d,r)):f&&f(a,k.childNodes,void 0,e)}for(var k,l,m,p,n,h=[],r=0;r<a.length;r++)k=new Da,l=$b(a[r],[],k,0===r?d:void 0,e),(f=l.length?oa(l,a[r],k,b,c,null,[],[],f):null)&&f.scope&&aa.$$addScopeClass(k.$$element),k=f&&f.terminal||!(m=a[r].childNodes)||!m.length?null:s(m,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b),(f||k)&&(h.push(r,f,k),p=!0,n=n||f),f=null;return p?g:null}function za(a,b,c){function d(e,f,g,h,k){return e||(e=a.$new(!1,k),e.$$transcluded=!0),b(e,f,{parentBoundTranscludeFn:c,transcludeControllers:g,futureParentElement:h})}var f,e=d.$$slots=U();for(f in b.$$slots)e[f]=b.$$slots[f]?za(a,b.$$slots[f],c):null;return d}function $b(a,b,c,d,e){var f=c.$attr;switch(a.nodeType){case 1:O(b,Aa(wa(a)),"E",d,e);for(var g,k,l,m,p=a.attributes,n=0,r=p&&p.length;n<r;n++){var v=!1,u=!1;g=p[n],k=g.name,l=W(g.value),g=Aa(k),(m=Ba.test(g))&&(k=k.replace(Yc,"").substr(8).replace(/_(.)/g,function(a,b){return b.toUpperCase()})),(g=g.match(Ca))&&V(g[1])&&(v=k,u=k.substr(0,k.length-5)+"end",k=k.substr(0,k.length-6)),g=Aa(k.toLowerCase()),f[g]=k,!m&&c.hasOwnProperty(g)||(c[g]=l,Uc(a,g)&&(c[g]=!0)),ia(a,b,l,g,m),O(b,g,"A",d,e,v,u)}if(f=a.className,D(f)&&(f=f.animVal),G(f)&&""!==f)for(;a=h.exec(f);)g=Aa(a[2]),O(b,g,"C",d,e)&&(c[g]=W(a[3])),f=f.substr(a.index+a[0].length);break;case Ma:if(11===Ea)for(;a.parentNode&&a.nextSibling&&a.nextSibling.nodeType===Ma;)a.nodeValue+=a.nextSibling.nodeValue,a.parentNode.removeChild(a.nextSibling);ca(b,a.nodeValue);break;case 8:hb(a,b,c,d,e)}return b.sort(Z),b}function hb(a,b,c,d,e){try{var f=g.exec(a.nodeValue);if(f){var h=Aa(f[1]);O(b,h,"M",d,e)&&(c[h]=W(f[2]))}}catch(k){}}function N(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw ga("uterdir",b,c);1==a.nodeType&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--),d.push(a),a=a.nextSibling}while(0<e)}else d.push(a);return F(d)}function Zc(a,b,c){return function(d,e,f,g,h){return e=N(e[0],b,c),a(d,e,f,g,h)}}function ac(a,b,c,d,e,f){var g;return a?aa(b,c,d,e,f):function(){return g||(g=aa(b,c,d,e,f),b=c=f=null),g.apply(this,arguments)}}function oa(a,b,d,e,f,g,h,k,l){function m(a,b,c,d){a&&(c&&(a=Zc(a,c,d)),a.require=x.require,a.directiveName=I,(u===x||x.$$isolateScope)&&(a=ja(a,{isolateScope:!0})),h.push(a)),b&&(c&&(b=Zc(b,c,d)),b.require=x.require,b.directiveName=I,(u===x||x.$$isolateScope)&&(b=ja(b,{isolateScope:!0})),k.push(b))}function p(a,e,f,g,l){function m(a,b,c,d){var e;if(Ya(a)||(d=c,c=b,b=a,a=void 0),fa&&(e=t),c||(c=fa?I.parent():I),!d)return l(a,b,e,c,s);var f=l.$$slots[d];if(f)return f(a,b,e,c,s);if(y(f))throw ga("noslot",d,ya(I))}var n,E,x,M,B,t,P,I;b===f?(g=d,I=d.$$element):(I=F(f),g=new Da(I,d)),B=e,u?M=e.$new(!0):r&&(B=e.$parent),l&&(P=m,P.$$boundTransclude=l,P.isSlotFilled=function(a){return!!l.$$slots[a]}),v&&(t=ag(I,g,P,v,M,e,u)),u&&(aa.$$addScopeInfo(I,M,!0,!(H&&(H===u||H===u.$$originalDirective))),aa.$$addScopeClass(I,!0),M.$$isolateBindings=u.$$isolateBindings,E=ka(e,g,M,M.$$isolateBindings,u),E.removeWatches&&M.$on("$destroy",E.removeWatches));for(n in t){E=v[n],x=t[n];var Zb=E.$$bindings.bindToController;x.bindingInfo=x.identifier&&Zb?ka(B,g,x.instance,Zb,E):{};var K=x();K!==x.instance&&(x.instance=K,I.data("$"+E.name+"Controller",K),x.bindingInfo.removeWatches&&x.bindingInfo.removeWatches(),x.bindingInfo=ka(B,g,x.instance,Zb,E))}for(q(v,function(a,b){var c=a.require;a.bindToController&&!L(c)&&D(c)&&S(t[b].instance,ib(b,c,I,t))}),q(t,function(a){var b=a.instance;if(z(b.$onChanges))try{b.$onChanges(a.bindingInfo.initialChanges)}catch(d){c(d)}if(z(b.$onInit))try{b.$onInit()}catch(e){c(e)}z(b.$doCheck)&&(B.$watch(function(){b.$doCheck()}),b.$doCheck()),z(b.$onDestroy)&&B.$on("$destroy",function(){b.$onDestroy()})}),n=0,E=h.length;n<E;n++)x=h[n],la(x,x.isolateScope?M:e,I,g,x.require&&ib(x.directiveName,x.require,I,t),P);var s=e;for(u&&(u.template||null===u.templateUrl)&&(s=M),a&&a(s,f.childNodes,void 0,l),n=k.length-1;0<=n;n--)x=k[n],la(x,x.isolateScope?M:e,I,g,x.require&&ib(x.directiveName,x.require,I,t),P);q(t,function(a){a=a.instance,z(a.$postLink)&&a.$postLink()})}l=l||{};for(var x,I,P,s,w,n=-Number.MAX_VALUE,r=l.newScopeDirective,v=l.controllerDirectives,u=l.newIsolateScopeDirective,H=l.templateDirective,E=l.nonTlbTranscludeDirective,M=!1,B=!1,fa=l.hasElementTranscludeDirective,t=d.$$element=F(b),K=e,Fa=!1,za=!1,A=0,C=a.length;A<C;A++){x=a[A];var G=x.$$start,hb=x.$$end;if(G&&(t=N(b,G,hb)),P=void 0,n>x.priority)break;if((w=x.scope)&&(x.templateUrl||(D(w)?(X("new/isolated scope",u||r,x,t),u=x):X("new/isolated scope",u,x,t)),r=r||x),I=x.name,!Fa&&(x.replace&&(x.templateUrl||x.template)||x.transclude&&!x.$$tlb)){for(w=A+1;Fa=a[w++];)if(Fa.transclude&&!Fa.$$tlb||Fa.replace&&(Fa.templateUrl||Fa.template)){za=!0;break}Fa=!0}if(!x.templateUrl&&x.controller&&(w=x.controller,
v=v||U(),X("'"+I+"' controller",v[I],x,t),v[I]=x),w=x.transclude)if(M=!0,x.$$tlb||(X("transclusion",E,x,t),E=x),"element"==w)fa=!0,n=x.priority,P=t,t=d.$$element=F(aa.$$createComment(I,d[I])),b=t[0],ea(f,va.call(P,0),b),P[0].$$parentNode=P[0].parentNode,K=ac(za,P,e,n,g&&g.name,{nonTlbTranscludeDirective:E});else{var oa=U();if(P=F(Xb(b)).contents(),D(w)){P=[];var Q=U(),O=U();q(w,function(a,b){var c="?"===a.charAt(0);a=c?a.substring(1):a,Q[a]=b,oa[b]=null,O[b]=c}),q(t.contents(),function(a){var b=Q[Aa(wa(a))];b?(O[b]=!0,oa[b]=oa[b]||[],oa[b].push(a)):P.push(a)}),q(O,function(a,b){if(!a)throw ga("reqslot",b)});for(var V in oa)oa[V]&&(oa[V]=ac(za,oa[V],e))}t.empty(),K=ac(za,P,e,void 0,void 0,{needsNewScope:x.$$isolateScope||x.$$newScope}),K.$$slots=oa}if(x.template)if(B=!0,X("template",H,x,t),H=x,w=z(x.template)?x.template(t,d):x.template,w=xa(w),x.replace){if(g=x,P=Vb.test(w)?$c(da(x.templateNamespace,W(w))):[],b=P[0],1!=P.length||1!==b.nodeType)throw ga("tplrt",I,"");ea(f,t,b),C={$attr:{}},w=$b(b,[],C);var Z=a.splice(A+1,a.length-(A+1));(u||r)&&T(w,u,r),a=a.concat(w).concat(Z),$(d,C),C=a.length}else t.html(w);if(x.templateUrl)B=!0,X("template",H,x,t),H=x,x.replace&&(g=x),p=ba(a.splice(A,a.length-A),t,d,f,M&&K,h,k,{controllerDirectives:v,newScopeDirective:r!==x&&r,newIsolateScopeDirective:u,templateDirective:H,nonTlbTranscludeDirective:E}),C=a.length;else if(x.compile)try{s=x.compile(t,d,K);var Y=x.$$originalDirective||x;z(s)?m(null,ab(Y,s),G,hb):s&&m(ab(Y,s.pre),ab(Y,s.post),G,hb)}catch(ca){c(ca,ya(t))}x.terminal&&(p.terminal=!0,n=Math.max(n,x.priority))}return p.scope=r&&!0===r.scope,p.transcludeOnThisElement=M,p.templateOnThisElement=B,p.transclude=K,l.hasElementTranscludeDirective=fa,p}function ib(a,b,c,d){var e;if(G(b)){var f=b.match(l);b=b.substring(f[0].length);var g=f[1]||f[3],f="?"===f[2];if("^^"===g?c=c.parent():e=(e=d&&d[b])&&e.instance,!e){var h="$"+b+"Controller";e=g?c.inheritedData(h):c.data(h)}if(!e&&!f)throw ga("ctreq",b,a)}else if(L(b))for(e=[],g=0,f=b.length;g<f;g++)e[g]=ib(a,b[g],c,d);else D(b)&&(e={},q(b,function(b,f){e[f]=ib(a,b,c,d)}));return e||null}function ag(a,b,c,d,e,f,g){var k,h=U();for(k in d){var l=d[k],m={$scope:l===g||l.$$isolateScope?e:f,$element:a,$attrs:b,$transclude:c},p=l.controller;"@"==p&&(p=b[l.name]),m=t(p,m,!0,l.controllerAs),h[l.name]=m,a.data("$"+l.name+"Controller",m.instance)}return h}function T(a,b,c){for(var d=0,e=a.length;d<e;d++)a[d]=Rb(a[d],{$$isolateScope:b,$$newScope:c})}function O(b,e,g,h,k,l,m){if(e===k)return null;if(k=null,f.hasOwnProperty(e)){var p;e=a.get(e+"Directive");for(var n=0,r=e.length;n<r;n++)try{if(p=e[n],(y(h)||h>p.priority)&&-1!=p.restrict.indexOf(g)){if(l&&(p=Rb(p,{$$start:l,$$end:m})),!p.$$bindings){var u=p,v=p,x=p.name,H={isolateScope:null,bindToController:null};if(D(v.scope)&&(!0===v.bindToController?(H.bindToController=d(v.scope,x,!0),H.isolateScope={}):H.isolateScope=d(v.scope,x,!1)),D(v.bindToController)&&(H.bindToController=d(v.bindToController,x,!0)),D(H.bindToController)){var E=v.controller,M=v.controllerAs;if(!E)throw ga("noctrl",x);if(!Xc(E,M))throw ga("noident",x)}var t=u.$$bindings=H;D(t.isolateScope)&&(p.$$isolateBindings=t.isolateScope)}b.push(p),k=p}}catch(I){c(I)}}return k}function V(b){if(f.hasOwnProperty(b))for(var c=a.get(b+"Directive"),d=0,e=c.length;d<e;d++)if(b=c[d],b.multiElement)return!0;return!1}function $(a,b){var c=b.$attr,d=a.$attr;q(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))}),q(b,function(b,e){a.hasOwnProperty(e)||"$"===e.charAt(0)||(a[e]=b,"class"!==e&&"style"!==e&&(d[e]=c[e]))})}function ba(a,b,c,d,f,g,h,k){var m,p,l=[],n=b[0],r=a.shift(),u=Rb(r,{templateUrl:null,transclude:null,replace:null,$$originalDirective:r}),H=z(r.templateUrl)?r.templateUrl(b,c):r.templateUrl,E=r.templateNamespace;return b.empty(),e(H).then(function(e){var v,M;if(e=xa(e),r.replace){if(e=Vb.test(e)?$c(da(E,W(e))):[],v=e[0],1!=e.length||1!==v.nodeType)throw ga("tplrt",r.name,H);e={$attr:{}},ea(d,b,v);var B=$b(v,[],e);D(r.scope)&&T(B,!0),a=B.concat(a),$(c,e)}else v=n,b.html(e);for(a.unshift(u),m=oa(a,v,c,f,b,r,g,h,k),q(d,function(a,c){a==v&&(d[c]=b[0])}),p=s(b[0].childNodes,f);l.length;){e=l.shift(),M=l.shift();var t=l.shift(),I=l.shift(),B=b[0];if(!e.$$destroyed){if(M!==n){var P=M.className;k.hasElementTranscludeDirective&&r.replace||(B=Xb(v)),ea(t,F(M),B),x(F(B),P)}M=m.transcludeOnThisElement?za(e,m.transclude,I):I,m(p,e,B,d,M)}}l=null}),function(a,b,c,d,e){a=e,b.$$destroyed||(l?l.push(b,c,d,a):(m.transcludeOnThisElement&&(a=za(b,m.transclude,e)),m(p,b,c,d,a)))}}function Z(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function X(a,b,c,d){function e(a){return a?" (module: "+a+")":""}if(b)throw ga("multidir",b.name,e(b.$$moduleName),c.name,e(c.$$moduleName),a,ya(d))}function ca(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;return b&&aa.$$addBindingClass(a),function(a,c){var e=c.parent();b||aa.$$addBindingClass(e),aa.$$addBindingInfo(e,d.expressions),a.$watch(d,function(a){c[0].nodeValue=a})}}})}function da(a,b){switch(a=Q(a||"html")){case"svg":case"math":var c=C.document.createElement("div");return c.innerHTML="<"+a+">"+b+"</"+a+">",c.childNodes[0].childNodes;default:return b}}function ha(a,b){if("srcdoc"==b)return M.HTML;var c=wa(a);return"xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b||"ngSrc"==b)?M.RESOURCE_URL:void 0}function ia(a,c,d,e,f){var g=ha(a,e);f=k[e]||f;var h=b(d,!0,g,f);if(h){if("multiple"===e&&"select"===wa(a))throw ga("selmulti",ya(a));c.push({priority:100,compile:function(){return{pre:function(a,c,k){if(c=k.$$observers||(k.$$observers=U()),m.test(e))throw ga("nodomevents");var l=k[e];l!==d&&(h=l&&b(l,!0,g,f),d=l),h&&(k[e]=h(a),(c[e]||(c[e]=[])).$$inter=!0,(k.$$observers&&k.$$observers[e].$$scope||a).$watch(h,function(a,b){"class"===e&&a!=b?k.$updateClass(a,b):k.$set(e,a)}))}}}})}}function ea(a,b,c){var g,h,d=b[0],e=b.length,f=d.parentNode;if(a)for(g=0,h=a.length;g<h;g++)if(a[g]==d){a[g++]=c,h=g+e-1;for(var k=a.length;g<k;g++,h++)h<k?a[g]=a[h]:delete a[g];a.length-=e-1,a.context===d&&(a.context=c);break}for(f&&f.replaceChild(c,d),a=C.document.createDocumentFragment(),g=0;g<e;g++)a.appendChild(b[g]);for(F.hasData(d)&&(F.data(c,F.data(d)),F(d).off("$destroy")),F.cleanData(a.querySelectorAll("*")),g=1;g<e;g++)delete b[g];b[0]=c,b.length=1}function ja(a,b){return S(function(){return a.apply(null,arguments)},a,b)}function la(a,b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h,ya(d))}}function ka(a,c,d,e,f){function g(b,c,e){z(d.$onChanges)&&c!==e&&(Y||(a.$$postDigest(I),Y=[]),m||(m={},Y.push(h)),m[b]&&(e=m[b].previousValue),m[b]=new Fb(e,c))}function h(){d.$onChanges(m),m=void 0}var m,k=[],l={};return q(e,function(e,h){var v,u,x,H,m=e.attrName,p=e.optional;switch(e.mode){case"@":p||ua.call(c,m)||(d[h]=c[m]=void 0),c.$observe(m,function(a){(G(a)||Ga(a))&&(g(h,a,d[h]),d[h]=a)}),c.$$observers[m].$$scope=a,v=c[m],G(v)?d[h]=b(v)(a):Ga(v)&&(d[h]=v),l[h]=new Fb(bc,d[h]);break;case"=":if(!ua.call(c,m)){if(p)break;c[m]=void 0}if(p&&!c[m])break;u=n(c[m]),H=u.literal?na:function(a,b){return a===b||a!==a&&b!==b},x=u.assign||function(){throw v=d[h]=u(a),ga("nonassign",c[m],m,f.name)},v=d[h]=u(a),p=function(b){return H(b,d[h])||(H(b,v)?x(a,b=d[h]):d[h]=b),v=b},p.$stateful=!0,p=e.collection?a.$watchCollection(c[m],p):a.$watch(n(c[m],p),null,u.literal),k.push(p);break;case"<":if(!ua.call(c,m)){if(p)break;c[m]=void 0}if(p&&!c[m])break;u=n(c[m]);var E=d[h]=u(a);l[h]=new Fb(bc,d[h]),p=a.$watch(u,function(a,b){if(b===a){if(b===E)return;b=E}g(h,a,b),d[h]=a},u.literal),k.push(p);break;case"&":if(u=c.hasOwnProperty(m)?n(c[m]):A,u===A&&p)break;d[h]=function(b){return u(a,b)}}}),{initialChanges:l,removeWatches:k.length&&function(){for(var a=0,b=k.length;a<b;++a)k[a]()}}}var Y,ta=/^\w/,pa=C.document.createElement("div"),qa=u;Da.prototype={$normalize:Aa,$addClass:function(a){a&&0<a.length&&H.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&H.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=ad(a,b);c&&c.length&&H.addClass(this.$$element,c),(c=ad(b,a))&&c.length&&H.removeClass(this.$$element,c)},$set:function(a,b,d,e){var f=Uc(this.$$element[0],a),g=bd[a],h=a;if(f?(this.$$element.prop(a,b),e=f):g&&(this[g]=b,h=g),this[a]=b,e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=e=Cc(a,"-")),f=wa(this.$$element),"a"===f&&("href"===a||"xlinkHref"===a)||"img"===f&&"src"===a)this[a]=b=E(b,"src"===a);else if("img"===f&&"srcset"===a&&w(b)){for(var f="",g=W(b),k=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,k=/\s/.test(g)?k:/(,)/,g=g.split(k),k=Math.floor(g.length/2),l=0;l<k;l++)var m=2*l,f=f+E(W(g[m]),!0),f=f+(" "+W(g[m+1]));g=W(g[2*l]).split(/\s/),f+=E(W(g[0]),!0),2===g.length&&(f+=" "+W(g[1])),this[a]=b=f}!1!==d&&(null===b||y(b)?this.$$element.removeAttr(e):ta.test(e)?this.$$element.attr(e,b):P(this.$$element[0],e,b)),(a=this.$$observers)&&q(a[h],function(a){try{a(b)}catch(d){c(d)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=U()),e=d[a]||(d[a]=[]);return e.push(b),K.$evalAsync(function(){e.$$inter||!c.hasOwnProperty(a)||y(c[a])||b(c[a])}),function(){Za(e,b)}}};var ra=b.startSymbol(),sa=b.endSymbol(),xa="{{"==ra&&"}}"==sa?Xa:function(a){return a.replace(/\{\{/g,ra).replace(/}}/g,sa)},Ba=/^ngAttr[A-Z]/,Ca=/^(.+)Start$/;return aa.$$addBindingInfo=p?function(a,b){var c=a.data("$binding")||[];L(b)?c=c.concat(b):c.push(b),a.data("$binding",c)}:A,aa.$$addBindingClass=p?function(a){x(a,"ng-binding")}:A,aa.$$addScopeInfo=p?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:A,aa.$$addScopeClass=p?function(a,b){x(a,b?"ng-isolate-scope":"ng-scope")}:A,aa.$$createComment=function(a,b){var c="";return p&&(c=" "+(a||"")+": ",b&&(c+=b+" ")),C.document.createComment(c)},aa}]}function Fb(a,b){this.previousValue=a,this.currentValue=b}function Aa(a){return db(a.replace(Yc,""))}function ad(a,b){var d="",c=a.split(/\s+/),e=b.split(/\s+/),f=0;a:for(;f<c.length;f++){for(var g=c[f],h=0;h<e.length;h++)if(g==e[h])continue a;d+=(0<d.length?" ":"")+g}return d}function $c(a){a=F(a);var b=a.length;if(1>=b)return a;for(;b--;)8===a[b].nodeType&&bg.call(a,b,1);return a}function Xc(a,b){if(b&&G(b))return b;if(G(a)){var d=cd.exec(a);if(d)return d[3]}}function ff(){var a={},b=!1;this.has=function(b){return a.hasOwnProperty(b)},this.register=function(b,c){Qa(b,"controller"),D(b)?S(a,b):a[b]=c},this.allowGlobals=function(){b=!0},this.$get=["$injector","$window",function(d,c){function e(a,b,c,d){if(!a||!D(a.$scope))throw N("$controller")("noscp",d,b);a.$scope[b]=c}return function(f,g,h,k){var l,m,n;if(h=!0===h,k&&G(k)&&(n=k),G(f)){if(k=f.match(cd),!k)throw cg("ctrlfmt",f);m=k[1],n=n||k[3],f=a.hasOwnProperty(m)?a[m]:Ec(g.$scope,m,!0)||(b?Ec(c,m,!0):void 0),Pa(f,m,!0)}return h?(h=(L(f)?f[f.length-1]:f).prototype,l=Object.create(h||null),n&&e(g,n,l,m||f.name),S(function(){var a=d.invoke(f,l,g,m);return a!==l&&(D(a)||z(a))&&(l=a,n&&e(g,n,l,m||f.name)),l},{instance:l,identifier:n})):(l=d.instantiate(f,g,m),n&&e(g,n,l,m||f.name),l)}}]}function gf(){this.$get=["$window",function(a){return F(a.document)}]}function hf(){this.$get=["$log",function(a){return function(b,d){a.error.apply(a,arguments)}}]}function cc(a){return D(a)?da(a)?a.toISOString():bb(a):a}function nf(){this.$get=function(){return function(a){if(!a)return"";var b=[];return tc(a,function(a,c){null===a||y(a)||(L(a)?q(a,function(a){b.push(ea(c)+"="+ea(cc(a)))}):b.push(ea(c)+"="+ea(cc(a))))}),b.join("&")}}}function of(){this.$get=function(){return function(a){function b(a,e,f){null===a||y(a)||(L(a)?q(a,function(a,c){b(a,e+"["+(D(a)?c:"")+"]")}):D(a)&&!da(a)?tc(a,function(a,c){b(a,e+(f?"":"[")+c+(f?"":"]"))}):d.push(ea(e)+"="+ea(cc(a))))}if(!a)return"";var d=[];return b(a,"",!0),d.join("&")}}}function dc(a,b){if(G(a)){var d=a.replace(dg,"").trim();if(d){var c=b("Content-Type");(c=c&&0===c.indexOf(dd))||(c=(c=d.match(eg))&&fg[c[0]].test(d)),c&&(a=xc(d))}}return a}function ed(a){var d,b=U();return G(a)?q(a.split("\n"),function(a){d=a.indexOf(":");var e=Q(W(a.substr(0,d)));a=W(a.substr(d+1)),e&&(b[e]=b[e]?b[e]+", "+a:a)}):D(a)&&q(a,function(a,d){var f=Q(d),g=W(a);f&&(b[f]=b[f]?b[f]+", "+g:g)}),b}function fd(a){var b;return function(d){return b||(b=ed(a)),d?(d=b[Q(d)],void 0===d&&(d=null),d):b}}function gd(a,b,d,c){return z(c)?c(a,b,d):(q(c,function(c){a=c(a,b,d)}),a)}function mf(){var a=this.defaults={transformResponse:[dc],transformRequest:[function(a){return D(a)&&"[object File]"!==ma.call(a)&&"[object Blob]"!==ma.call(a)&&"[object FormData]"!==ma.call(a)?bb(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ia(ec),put:ia(ec),patch:ia(ec)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer"},b=!1;this.useApplyAsync=function(a){return w(a)?(b=!!a,this):b};var d=!0;this.useLegacyPromiseExtensions=function(a){return w(a)?(d=!!a,this):d};var c=this.interceptors=[];this.$get=["$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector",function(e,f,g,h,k,l){function m(b){function c(a,b){for(var d=0,e=b.length;d<e;){var f=b[d++],g=b[d++];a=a.then(f,g)}return b.length=0,a}function e(a,b){var c,d={};return q(a,function(a,e){z(a)?(c=a(b),null!=c&&(d[e]=c)):d[e]=a}),d}function f(a){var b=S({},a);return b.data=gd(a.data,a.headers,a.status,g.transformResponse),a=a.status,200<=a&&300>a?b:k.reject(b)}if(!D(b))throw N("$http")("badreq",b);if(!G(b.url))throw N("$http")("badreq",b.url);var g=S({method:"get",transformRequest:a.transformRequest,transformResponse:a.transformResponse,paramSerializer:a.paramSerializer},b);g.headers=function(b){var f,g,h,c=a.headers,d=S({},b.headers),c=S({},c.common,c[Q(b.method)]);a:for(f in c){g=Q(f);for(h in d)if(Q(h)===g)continue a;d[f]=c[f]}return e(d,ia(b))}(b),g.method=ub(g.method),g.paramSerializer=G(g.paramSerializer)?l.get(g.paramSerializer):g.paramSerializer;var h=[],m=[],p=k.when(g);return q(R,function(a){(a.request||a.requestError)&&h.unshift(a.request,a.requestError),(a.response||a.responseError)&&m.push(a.response,a.responseError)}),p=c(p,h),p=p.then(function(b){var c=b.headers,d=gd(b.data,fd(c),void 0,b.transformRequest);return y(d)&&q(c,function(a,b){"content-type"===Q(b)&&delete c[b]}),y(b.withCredentials)&&!y(a.withCredentials)&&(b.withCredentials=a.withCredentials),n(b,d).then(f,f)}),p=c(p,m),d?(p.success=function(a){return Pa(a,"fn"),p.then(function(b){a(b.data,b.status,b.headers,g)}),p},p.error=function(a){return Pa(a,"fn"),p.then(null,function(b){a(b.data,b.status,b.headers,g)}),p}):(p.success=hd("success"),p.error=hd("error")),p}function n(c,d){function g(a){if(a){var c={};return q(a,function(a,d){c[d]=function(c){function d(){a(c)}b?h.$applyAsync(d):h.$$phase?d():h.$apply(d)}}),c}}function l(a,c,d,e){function f(){n(c,a,d,e)}E&&(200<=a&&300>a?E.put(P,[a,c,ed(d),e]):E.remove(P)),b?h.$applyAsync(f):(f(),h.$$phase||h.$apply())}function n(a,b,d,e){b=-1<=b?b:0,(200<=b&&300>b?M.resolve:M.reject)({data:a,status:b,headers:fd(d),config:c,statusText:e})}function t(a){n(a.data,a.status,ia(a.headers()),a.statusText)}function R(){var a=m.pendingRequests.indexOf(c);-1!==a&&m.pendingRequests.splice(a,1)}var E,I,M=k.defer(),H=M.promise,Da=c.headers,P=p(c.url,c.paramSerializer(c.params));return m.pendingRequests.push(c),H.then(R,R),!c.cache&&!a.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(E=D(c.cache)?c.cache:D(a.cache)?a.cache:u),E&&(I=E.get(P),w(I)?I&&z(I.then)?I.then(t,t):L(I)?n(I[1],I[0],ia(I[2]),I[3]):n(I,200,{},"OK"):E.put(P,H)),y(I)&&((I=id(c.url)?f()[c.xsrfCookieName||a.xsrfCookieName]:void 0)&&(Da[c.xsrfHeaderName||a.xsrfHeaderName]=I),e(c.method,P,d,l,Da,c.timeout,c.withCredentials,c.responseType,g(c.eventHandlers),g(c.uploadEventHandlers))),H}function p(a,b){return 0<b.length&&(a+=(-1==a.indexOf("?")?"?":"&")+b),a}var u=g("$http");a.paramSerializer=G(a.paramSerializer)?l.get(a.paramSerializer):a.paramSerializer;var R=[];return q(c,function(a){R.unshift(G(a)?l.get(a):l.invoke(a))}),m.pendingRequests=[],function(a){q(arguments,function(a){m[a]=function(b,c){return m(S({},c||{},{method:a,url:b}))}})}("get","delete","head","jsonp"),function(a){q(arguments,function(a){m[a]=function(b,c,d){return m(S({},d||{},{method:a,url:b,data:c}))}})}("post","put","patch"),m.defaults=a,m}]}function qf(){this.$get=function(){return function(){return new C.XMLHttpRequest}}}function pf(){this.$get=["$browser","$jsonpCallbacks","$document","$xhrFactory",function(a,b,d,c){return gg(a,c,a.defer,b,d[0])}]}function gg(a,b,d,c,e){function f(a,b,d){a=a.replace("JSON_CALLBACK",b);var f=e.createElement("script"),m=null;return f.type="text/javascript",f.src=a,f.async=!0,m=function(a){f.removeEventListener("load",m,!1),f.removeEventListener("error",m,!1),e.body.removeChild(f),f=null;var g=-1,u="unknown";a&&("load"!==a.type||c.wasCalled(b)||(a={type:"error"}),u=a.type,g="error"===a.type?404:200),d&&d(g,u)},f.addEventListener("load",m,!1),f.addEventListener("error",m,!1),e.body.appendChild(f),m}return function(e,h,k,l,m,n,p,u,R,B){function r(){fa&&fa(),t&&t.abort()}function J(b,c,e,f,g){w(M)&&d.cancel(M),fa=t=null,b(c,e,f,g),a.$$completeOutstandingRequest(A)}if(a.$$incOutstandingRequestCount(),h=h||a.url(),"jsonp"===Q(e))var v=c.createCallback(h),fa=f(h,v,function(a,b){var d=200===a&&c.getResponse(v);J(l,a,d,"",b),c.removeCallback(v)});else{var t=b(e,h);if(t.open(e,h,!0),q(m,function(a,b){w(a)&&t.setRequestHeader(b,a)}),t.onload=function(){var a=t.statusText||"",b="response"in t?t.response:t.responseText,c=1223===t.status?204:t.status;0===c&&(c=b?200:"file"==Y(h).protocol?404:0),J(l,c,b,t.getAllResponseHeaders(),a)},e=function(){J(l,-1,null,null,"")},t.onerror=e,t.onabort=e,q(R,function(a,b){t.addEventListener(b,a)}),q(B,function(a,b){t.upload.addEventListener(b,a)}),p&&(t.withCredentials=!0),u)try{t.responseType=u}catch(K){if("json"!==u)throw K}t.send(y(k)?null:k)}if(0<n)var M=d(r,n);else n&&z(n.then)&&n.then(r)}}function kf(){var a="{{",b="}}";this.startSymbol=function(b){return b?(a=b,this):a},this.endSymbol=function(a){return a?(b=a,this):b},this.$get=["$parse","$exceptionHandler","$sce",function(d,c,e){function f(a){return"\\\\\\"+a}function g(c){return c.replace(n,a).replace(p,b)}function h(a,b,c,d){var e;return e=a.$watch(function(a){return e(),d(a)},b,c)}function k(f,k,p,n){function J(a){try{var b=a;a=p?e.getTrusted(p,b):e.valueOf(b);var d;if(n&&!w(a))d=a;else if(null==a)d="";else{switch(typeof a){case"string":break;case"number":a=""+a;break;default:a=bb(a)}d=a}return d}catch(g){c(Ka.interr(f,g))}}if(!f.length||-1===f.indexOf(a)){var v;return k||(k=g(f),v=ha(k),v.exp=f,v.expressions=[],v.$$watchDelegate=h),v}n=!!n;var q,t,K=0,M=[],H=[];v=f.length;for(var E=[],I=[];K<v;){if(-1==(q=f.indexOf(a,K))||-1==(t=f.indexOf(b,q+l))){K!==v&&E.push(g(f.substring(K)));break}K!==q&&E.push(g(f.substring(K,q))),K=f.substring(q+l,t),M.push(K),H.push(d(K,J)),K=t+m,I.push(E.length),E.push("")}if(p&&1<E.length&&Ka.throwNoconcat(f),!k||M.length){var Da=function(a){for(var b=0,c=M.length;b<c;b++){if(n&&y(a[b]))return;E[I[b]]=a[b]}return E.join("")};return S(function(a){var b=0,d=M.length,e=Array(d);try{for(;b<d;b++)e[b]=H[b](a);return Da(e)}catch(g){c(Ka.interr(f,g))}},{exp:f,expressions:M,$$watchDelegate:function(a,b){var c;return a.$watchGroup(H,function(d,e){var f=Da(d);z(b)&&b.call(this,f,d!==e?c:f,a),c=f})}})}}var l=a.length,m=b.length,n=new RegExp(a.replace(/./g,f),"g"),p=new RegExp(b.replace(/./g,f),"g");return k.startSymbol=function(){return a},k.endSymbol=function(){return b},k}]}function lf(){this.$get=["$rootScope","$window","$q","$$q","$browser",function(a,b,d,c,e){function f(f,k,l,m){function n(){p?f.apply(null,u):f(r)}var p=4<arguments.length,u=p?va.call(arguments,4):[],R=b.setInterval,q=b.clearInterval,r=0,J=w(m)&&!m,v=(J?c:d).defer(),fa=v.promise;return l=w(l)?l:0,fa.$$intervalId=R(function(){J?e.defer(n):a.$evalAsync(n),v.notify(r++),0<l&&r>=l&&(v.resolve(r),q(fa.$$intervalId),delete g[fa.$$intervalId]),J||a.$apply()},k),g[fa.$$intervalId]=v,fa}var g={};return f.cancel=function(a){return!!(a&&a.$$intervalId in g)&&(g[a.$$intervalId].reject("canceled"),b.clearInterval(a.$$intervalId),delete g[a.$$intervalId],!0)},f}]}function fc(a){a=a.split("/");for(var b=a.length;b--;)a[b]=qb(a[b]);return a.join("/")}function jd(a,b){var d=Y(a);b.$$protocol=d.protocol,b.$$host=d.hostname,b.$$port=Z(d.port)||hg[d.protocol]||null}function kd(a,b){var d="/"!==a.charAt(0);d&&(a="/"+a);var c=Y(a);b.$$path=decodeURIComponent(d&&"/"===c.pathname.charAt(0)?c.pathname.substring(1):c.pathname),b.$$search=Ac(c.search),b.$$hash=decodeURIComponent(c.hash),b.$$path&&"/"!=b.$$path.charAt(0)&&(b.$$path="/"+b.$$path)}function ka(a,b){if(0===b.lastIndexOf(a,0))return b.substr(a.length)}function Ja(a){var b=a.indexOf("#");return-1==b?a:a.substr(0,b)}function jb(a){return a.replace(/(#.+)|#$/,"$1")}function gc(a,b,d){this.$$html5=!0,d=d||"",jd(a,this),this.$$parse=function(a){var d=ka(b,a);if(!G(d))throw Gb("ipthprfx",a,b);kd(d,this),this.$$path||(this.$$path="/"),this.$$compose()},this.$$compose=function(){var a=Tb(this.$$search),d=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=fc(this.$$path)+(a?"?"+a:"")+d,this.$$absUrl=b+this.$$url.substr(1)},this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;return w(f=ka(a,c))?(g=f,g=w(f=ka(d,f))?b+(ka("/",f)||f):a+g):w(f=ka(b,c))?g=b+f:b==c+"/"&&(g=b),g&&this.$$parse(g),!!g}}function hc(a,b,d){jd(a,this),this.$$parse=function(c){var f,e=ka(a,c)||ka(b,c);y(e)||"#"!==e.charAt(0)?this.$$html5?f=e:(f="",y(e)&&(a=c,this.replace())):(f=ka(d,e),y(f)&&(f=e)),kd(f,this),c=this.$$path;var e=a,g=/^\/[A-Z]:(\/.*)/;0===f.lastIndexOf(e,0)&&(f=f.replace(e,"")),g.exec(f)||(c=(f=g.exec(c))?f[1]:c),this.$$path=c,this.$$compose()},this.$$compose=function(){var b=Tb(this.$$search),e=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=fc(this.$$path)+(b?"?"+b:"")+e,this.$$absUrl=a+(this.$$url?d+this.$$url:"")},this.$$parseLinkUrl=function(b,d){return Ja(a)==Ja(b)&&(this.$$parse(b),!0)}}function ld(a,b,d){this.$$html5=!0,hc.apply(this,arguments),this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;return a==Ja(c)?f=c:(g=ka(b,c))?f=a+d+g:b===c+"/"&&(f=b),f&&this.$$parse(f),!!f},this.$$compose=function(){var b=Tb(this.$$search),e=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=fc(this.$$path)+(b?"?"+b:"")+e,this.$$absUrl=a+d+this.$$url}}function Hb(a){return function(){return this[a]}}function md(a,b){return function(d){return y(d)?this[a]:(this[a]=b(d),this.$$compose(),this)}}function sf(){var a="",b={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(b){return w(b)?(a=b,this):a},this.html5Mode=function(a){return Ga(a)?(b.enabled=a,this):D(a)?(Ga(a.enabled)&&(b.enabled=a.enabled),Ga(a.requireBase)&&(b.requireBase=a.requireBase),Ga(a.rewriteLinks)&&(b.rewriteLinks=a.rewriteLinks),this):b},this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(d,c,e,f,g){function h(a,b,d){var e=l.url(),f=l.$$state;try{c.url(a,b,d),l.$$state=c.state()}catch(g){throw l.url(e),l.$$state=f,g}}function k(a,b){d.$broadcast("$locationChangeSuccess",l.absUrl(),a,l.$$state,b)}var l,m;m=c.baseHref();var p,n=c.url();if(b.enabled){if(!m&&b.requireBase)throw Gb("nobase");p=n.substring(0,n.indexOf("/",n.indexOf("//")+2))+(m||"/"),m=e.history?gc:ld}else p=Ja(n),m=hc;var u=p.substr(0,Ja(p).lastIndexOf("/")+1);l=new m(p,u,"#"+a),l.$$parseLinkUrl(n,n),l.$$state=c.state();var R=/^\s*(javascript|mailto):/i;f.on("click",function(a){if(b.rewriteLinks&&!a.ctrlKey&&!a.metaKey&&!a.shiftKey&&2!=a.which&&2!=a.button){for(var e=F(a.target);"a"!==wa(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var h=e.prop("href"),k=e.attr("href")||e.attr("xlink:href");D(h)&&"[object SVGAnimatedString]"===h.toString()&&(h=Y(h.animVal).href),R.test(h)||!h||e.attr("target")||a.isDefaultPrevented()||!l.$$parseLinkUrl(h,k)||(a.preventDefault(),l.absUrl()!=c.url()&&(d.$apply(),g.angular["ff-684208-preventDefault"]=!0))}}),jb(l.absUrl())!=jb(n)&&c.url(l.absUrl(),!0);var q=!0;return c.onUrlChange(function(a,b){y(ka(u,a))?g.location.href=a:(d.$evalAsync(function(){var f,c=l.absUrl(),e=l.$$state;a=jb(a),l.$$parse(a),l.$$state=b,f=d.$broadcast("$locationChangeStart",a,c,b,e).defaultPrevented,l.absUrl()===a&&(f?(l.$$parse(c),l.$$state=e,h(c,!1,e)):(q=!1,k(c,e)))}),d.$$phase||d.$digest())}),d.$watch(function(){var a=jb(c.url()),b=jb(l.absUrl()),f=c.state(),g=l.$$replace,m=a!==b||l.$$html5&&e.history&&f!==l.$$state;(q||m)&&(q=!1,d.$evalAsync(function(){var b=l.absUrl(),c=d.$broadcast("$locationChangeStart",b,a,l.$$state,f).defaultPrevented;l.absUrl()===b&&(c?(l.$$parse(a),l.$$state=f):(m&&h(b,g,f===l.$$state?null:l.$$state),k(a,f)))})),l.$$replace=!1}),l}]}function tf(){var a=!0,b=this;this.debugEnabled=function(b){return w(b)?(a=b,this):a},this.$get=["$window",function(d){function c(a){return a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line)),a}function e(a){var b=d.console||{},e=b[a]||b.log||A;a=!1;try{a=!!e.apply}catch(k){}return a?function(){var a=[];return q(arguments,function(b){a.push(c(b))}),e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){a&&c.apply(b,arguments)}}()}}]}function Sa(a,b){if("__defineGetter__"===a||"__defineSetter__"===a||"__lookupGetter__"===a||"__lookupSetter__"===a||"__proto__"===a)throw X("isecfld",b);return a}function ig(a){return a+""}function ra(a,b){if(a){if(a.constructor===a)throw X("isecfn",b);if(a.window===a)throw X("isecwindow",b);if(a.children&&(a.nodeName||a.prop&&a.attr&&a.find))throw X("isecdom",b);if(a===Object)throw X("isecobj",b)}return a}function nd(a,b){if(a){if(a.constructor===a)throw X("isecfn",b);if(a===jg||a===kg||a===lg)throw X("isecff",b)}}function Ib(a,b){if(a&&(a===(0).constructor||a===(!1).constructor||a==="".constructor||a==={}.constructor||a===[].constructor||a===Function.constructor))throw X("isecaf",b)}function mg(a,b){return"undefined"!=typeof a?a:b}function od(a,b){return"undefined"==typeof a?b:"undefined"==typeof b?a:a+b}function V(a,b){var d,c;switch(a.type){case s.Program:d=!0,q(a.body,function(a){V(a.expression,b),d=d&&a.expression.constant}),a.constant=d;break;case s.Literal:a.constant=!0,a.toWatch=[];break;case s.UnaryExpression:V(a.argument,b),a.constant=a.argument.constant,a.toWatch=a.argument.toWatch;break;case s.BinaryExpression:V(a.left,b),V(a.right,b),a.constant=a.left.constant&&a.right.constant,a.toWatch=a.left.toWatch.concat(a.right.toWatch);break;case s.LogicalExpression:V(a.left,b),V(a.right,b),a.constant=a.left.constant&&a.right.constant,a.toWatch=a.constant?[]:[a];break;case s.ConditionalExpression:V(a.test,b),V(a.alternate,b),V(a.consequent,b),a.constant=a.test.constant&&a.alternate.constant&&a.consequent.constant,a.toWatch=a.constant?[]:[a];break;case s.Identifier:a.constant=!1,a.toWatch=[a];break;case s.MemberExpression:V(a.object,b),a.computed&&V(a.property,b),a.constant=a.object.constant&&(!a.computed||a.property.constant),a.toWatch=[a];break;case s.CallExpression:d=!!a.filter&&!b(a.callee.name).$stateful,c=[],q(a.arguments,function(a){V(a,b),d=d&&a.constant,a.constant||c.push.apply(c,a.toWatch)}),a.constant=d,a.toWatch=a.filter&&!b(a.callee.name).$stateful?c:[a];break;case s.AssignmentExpression:V(a.left,b),V(a.right,b),a.constant=a.left.constant&&a.right.constant,a.toWatch=[a];break;case s.ArrayExpression:d=!0,c=[],q(a.elements,function(a){V(a,b),d=d&&a.constant,a.constant||c.push.apply(c,a.toWatch)}),a.constant=d,a.toWatch=c;break;case s.ObjectExpression:d=!0,c=[],q(a.properties,function(a){V(a.value,b),d=d&&a.value.constant&&!a.computed,a.value.constant||c.push.apply(c,a.value.toWatch)}),a.constant=d,a.toWatch=c;break;case s.ThisExpression:a.constant=!1,a.toWatch=[];break;case s.LocalsExpression:a.constant=!1,a.toWatch=[]}}function pd(a){if(1==a.length){a=a[0].expression;var b=a.toWatch;return 1!==b.length?b:b[0]!==a?b:void 0}}function qd(a){return a.type===s.Identifier||a.type===s.MemberExpression}function rd(a){if(1===a.body.length&&qd(a.body[0].expression))return{type:s.AssignmentExpression,left:a.body[0].expression,right:{type:s.NGValueParameter},operator:"="}}function sd(a){return 0===a.body.length||1===a.body.length&&(a.body[0].expression.type===s.Literal||a.body[0].expression.type===s.ArrayExpression||a.body[0].expression.type===s.ObjectExpression)}function td(a,b){this.astBuilder=a,this.$filter=b}function ud(a,b){this.astBuilder=a,this.$filter=b}function Jb(a){return"constructor"==a}function ic(a){return z(a.valueOf)?a.valueOf():ng.call(a)}function uf(){var c,e,a=U(),b=U(),d={true:!0,false:!1,null:null,undefined:void 0};this.addLiteral=function(a,b){d[a]=b},this.setIdentifierFns=function(a,b){return c=a,e=b,this},this.$get=["$filter",function(f){function g(c,d,e){var g,k,H;switch(e=e||J,typeof c){case"string":H=c=c.trim();var E=e?b:a;if(g=E[H],!g){":"===c.charAt(0)&&":"===c.charAt(1)&&(k=!0,c=c.substring(2)),g=e?r:B;var q=new jc(g);g=new kc(q,f,g).parse(c),g.constant?g.$$watchDelegate=p:k?g.$$watchDelegate=g.literal?n:m:g.inputs&&(g.$$watchDelegate=l),e&&(g=h(g)),E[H]=g}return u(g,d);case"function":return u(c,d);default:return u(A,d)}}function h(a){function b(c,d,e,f){var g=J;J=!0;try{return a(c,d,e,f)}finally{J=g}}if(!a)return a;b.$$watchDelegate=a.$$watchDelegate,b.assign=h(a.assign),b.constant=a.constant,b.literal=a.literal;for(var c=0;a.inputs&&c<a.inputs.length;++c)a.inputs[c]=h(a.inputs[c]);return b.inputs=a.inputs,b}function k(a,b){return null==a||null==b?a===b:("object"!=typeof a||(a=ic(a),"object"!=typeof a))&&(a===b||a!==a&&b!==b)}function l(a,b,c,d,e){var g,f=d.inputs;if(1===f.length){var h=k,f=f[0];return a.$watch(function(a){var b=f(a);return k(b,h)||(g=d(a,void 0,void 0,[b]),h=b&&ic(b)),g},b,c,e)}for(var l=[],m=[],p=0,n=f.length;p<n;p++)l[p]=k,m[p]=null;return a.$watch(function(a){for(var b=!1,c=0,e=f.length;c<e;c++){var h=f[c](a);(b||(b=!k(h,l[c])))&&(m[c]=h,l[c]=h&&ic(h))}return b&&(g=d(a,void 0,void 0,m)),g},b,c,e)}function m(a,b,c,d){var e,f;return e=a.$watch(function(a){return d(a)},function(a,c,d){f=a,z(b)&&b.apply(this,arguments),w(a)&&d.$$postDigest(function(){w(f)&&e()})},c)}function n(a,b,c,d){function e(a){var b=!0;return q(a,function(a){w(a)||(b=!1)}),b}var f,g;return f=a.$watch(function(a){return d(a)},function(a,c,d){g=a,z(b)&&b.call(this,a,c,d),e(a)&&d.$$postDigest(function(){e(g)&&f()})},c)}function p(a,b,c,d){var e;return e=a.$watch(function(a){return e(),d(a)},b,c)}function u(a,b){if(!b)return a;var c=a.$$watchDelegate,d=!1,c=c!==n&&c!==m?function(c,e,f,g){return f=d&&g?g[0]:a(c,e,f,g),b(f,c,e)}:function(c,d,e,f){return e=a(c,d,e,f),c=b(e,c,d),w(e)?c:e};return a.$$watchDelegate&&a.$$watchDelegate!==l?c.$$watchDelegate=a.$$watchDelegate:b.$stateful||(c.$$watchDelegate=l,d=!a.inputs,c.inputs=a.inputs?a.inputs:[a]),c}var R=Ba().noUnsafeEval,B={csp:R,expensiveChecks:!1,literals:pa(d),isIdentifierStart:z(c)&&c,isIdentifierContinue:z(e)&&e},r={csp:R,expensiveChecks:!0,literals:pa(d),isIdentifierStart:z(c)&&c,isIdentifierContinue:z(e)&&e},J=!1;return g.$$runningExpensiveChecks=function(){return J},g}]}function wf(){this.$get=["$rootScope","$exceptionHandler",function(a,b){return vd(function(b){a.$evalAsync(b)},b)}]}function xf(){this.$get=["$browser","$exceptionHandler",function(a,b){return vd(function(b){a.defer(b)},b)}]}function vd(a,b){function d(){this.$$state={status:0}}function c(a,b){return function(c){b.call(a,c)}}function e(c){!c.processScheduled&&c.pending&&(c.processScheduled=!0,a(function(){var a,d,e;e=c.pending,c.processScheduled=!1,c.pending=void 0;for(var f=0,g=e.length;f<g;++f){d=e[f][0],a=e[f][c.status];try{z(a)?d.resolve(a(c.value)):1===c.status?d.resolve(c.value):d.reject(c.value)}catch(h){d.reject(h),b(h)}}}))}function f(){this.promise=new d}var g=N("$q",TypeError),h=function(){var a=new f;return a.resolve=c(a,a.resolve),
@@ -26,9 +26,9 @@ tabindex:[Number,null],removeTagSymbol:[String,String.fromCharCode(215)],replace
}),this.$hide())},$setWaiting:function(a){this.$waiting=!!a,angular.forEach(this.$editables,function(b){b.setWaiting(!!a)})},$setError:function(a,b){angular.forEach(this.$editables,function(c){a&&c.name!==a||c.setError(b)})},$submit:function(){function a(a){var b=d();b.when(this.$onbeforesave()),b.then({onWait:angular.bind(this,this.$setWaiting),onTrue:a?angular.bind(this,this.$save):angular.bind(this,this.$hide),onFalse:angular.bind(this,this.$hide),onString:angular.bind(this,this.$activate)})}if(!this.$waiting){this.$setError(null,"");var b=d();angular.forEach(this.$editables,function(a){b.when(a.onbeforesave())}),b.then({onWait:angular.bind(this,this.$setWaiting),onTrue:angular.bind(this,a,!0),onFalse:angular.bind(this,a,!1),onString:angular.bind(this,this.$activate)})}},$save:function(){angular.forEach(this.$editables,function(a){a.save()});var a=d();a.when(this.$onaftersave()),angular.forEach(this.$editables,function(b){a.when(b.onaftersave())}),a.then({onWait:angular.bind(this,this.$setWaiting),onTrue:angular.bind(this,this.$hide),onFalse:angular.bind(this,this.$hide),onString:angular.bind(this,this.$activate)})},$onshow:angular.noop,$oncancel:angular.noop,$onhide:angular.noop,$onbeforesave:angular.noop,$onaftersave:angular.noop};return function(){return angular.extend({$editables:[],$visible:!1,$waiting:!1,$data:{},_clicked:!1,_blur:null},i)}}]),angular.module("xeditable").directive("editableForm",["$rootScope","$parse","editableFormController","editableOptions",function(a,b,c,d){return{restrict:"A",require:["form"],compile:function(){return{pre:function(b,d,e,f){var g,h=f[0];e.editableForm?b[e.editableForm]&&b[e.editableForm].$show?(g=b[e.editableForm],angular.extend(h,g)):(g=c(),b[e.editableForm]=g,angular.extend(g,h)):(g=c(),angular.extend(h,g));var i=a.$$editableBuffer,j=h.$name;j&&i&&i[j]&&(angular.forEach(i[j],function(a){g.$addEditable(a)}),delete i[j])},post:function(a,c,e,f){var g;g=e.editableForm&&a[e.editableForm]&&a[e.editableForm].$show?a[e.editableForm]:f[0],e.onshow&&(g.$onshow=angular.bind(g,b(e.onshow),a)),e.onhide&&(g.$onhide=angular.bind(g,b(e.onhide),a)),e.oncancel&&(g.$oncancel=angular.bind(g,b(e.oncancel),a)),e.shown&&b(e.shown)(a)&&g.$show(),g._blur=e.blur||d.blurForm,e.ngSubmit||e.submit||(e.onbeforesave&&(g.$onbeforesave=function(){return b(e.onbeforesave)(a,{$data:g.$data})}),e.onaftersave&&(g.$onaftersave=function(){return b(e.onaftersave)(a,{$data:g.$data})}),c.bind("submit",function(b){b.preventDefault(),a.$apply(function(){g.$submit()})})),c.bind("click",function(a){a.which&&1!==a.which||g.$visible&&(g._clicked=!0)})}}}}}]),angular.module("xeditable").factory("editablePromiseCollection",["$q",function(a){function b(){return{promises:[],hasFalse:!1,hasString:!1,when:function(b,c){if(b===!1)this.hasFalse=!0;else if(!c&&angular.isObject(b))this.promises.push(a.when(b));else{if(!angular.isString(b))return;this.hasString=!0}},then:function(b){function c(){h.hasString||h.hasFalse?!h.hasString&&h.hasFalse?e():f():d()}b=b||{};var d=b.onTrue||angular.noop,e=b.onFalse||angular.noop,f=b.onString||angular.noop,g=b.onWait||angular.noop,h=this;this.promises.length?(g(!0),a.all(this.promises).then(function(a){g(!1),angular.forEach(a,function(a){h.when(a,!0)}),c()},function(a){g(!1),f()})):c()}}}return b}]),angular.module("xeditable").factory("editableUtils",[function(){return{indexOf:function(a,b){if(a.indexOf)return a.indexOf(b);for(var c=0;c<a.length;c++)if(b===a[c])return c;return-1},arrayRemove:function(a,b){var c=this.indexOf(a,b);return c>=0&&a.splice(c,1),b},camelToDash:function(a){var b=/[A-Z]/g;return a.replace(b,function(a,b){return(b?"-":"")+a.toLowerCase()})},dashToCamel:function(a){var b=/([\:\-\_]+(.))/g,c=/^moz([A-Z])/;return a.replace(b,function(a,b,c,d){return d?c.toUpperCase():c}).replace(c,"Moz$1")},rename:function(a,b){var c=angular.element("<"+a+"/>");c.html(b.html());for(var d=b[0].attributes,e=0;e<d.length;++e)c.attr(d.item(e).nodeName,d.item(e).value);return c}}}]),angular.module("xeditable").factory("editableNgOptionsParser",[function(){function a(a){var c;if(!(c=a.match(b)))throw"ng-options parse error";var d,e=c[2]||c[1],f=c[4]||c[6],g=c[5],h=(c[3]||"",c[2]?c[1]:f),i=c[7],j=c[8],k=j?c[8]:null;return void 0===g?(d=f+" in "+i,void 0!==j&&(d+=" track by "+k)):d="("+g+", "+f+") in "+i,{ngRepeat:d,locals:{valueName:f,keyName:g,valueFn:h,displayFn:e}}}var b=/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/;return a}]),angular.module("xeditable").factory("editableCombodate",[function(){function a(a,b){if(this.$element=angular.element(a),"INPUT"!=this.$element[0].nodeName)throw"Combodate should be applied to INPUT element";var c=(new Date).getFullYear();this.defaults={format:"YYYY-MM-DD HH:mm",template:"D / MMM / YYYY H : mm",value:null,minYear:1970,maxYear:c,yearDescending:!0,minuteStep:5,secondStep:1,firstItem:"empty",errorClass:null,customClass:"",roundTime:!0,smartDays:!0},this.options=angular.extend({},this.defaults,b),this.init()}return a.prototype={constructor:a,init:function(){if(this.map={day:["D","date"],month:["M","month"],year:["Y","year"],hour:["[Hh]","hours"],minute:["m","minutes"],second:["s","seconds"],ampm:["[Aa]",""]},this.$widget=angular.element('<span class="combodate"></span>').html(this.getTemplate()),this.initCombos(),this.options.smartDays){var a=this;this.$widget.find("select").bind("change",function(b){(angular.element(b.target).hasClass("month")||angular.element(b.target).hasClass("year"))&&a.fillCombo("day")})}this.$widget.find("select").css("width","auto"),this.$element.css("display","none").after(this.$widget),this.setValue(this.$element.val()||this.options.value)},getTemplate:function(){var a=this.options.template,b=this.options.customClass;return angular.forEach(this.map,function(b,c){b=b[0];var d=new RegExp(b+"+"),e=b.length>1?b.substring(1,2):b;a=a.replace(d,"{"+e+"}")}),a=a.replace(/ /g,"&nbsp;"),angular.forEach(this.map,function(c,d){c=c[0];var e=c.length>1?c.substring(1,2):c;a=a.replace("{"+e+"}",'<select class="'+d+" "+b+'"></select>')}),a},initCombos:function(){for(var a in this.map){var b=this.$widget[0].querySelectorAll("."+a);this["$"+a]=b.length?angular.element(b):null,this.fillCombo(a)}},fillCombo:function(a){var b=this["$"+a];if(b){var c="fill"+a.charAt(0).toUpperCase()+a.slice(1),d=this[c](),e=b.val();b.html("");for(var f=0;f<d.length;f++)b.append('<option value="'+d[f][0]+'">'+d[f][1]+"</option>");b.val(e)}},fillCommon:function(a){var b,c=[];if("name"===this.options.firstItem){b=moment.relativeTime||moment.langData()._relativeTime;var d="function"==typeof b[a]?b[a](1,!0,a,!1):b[a];d=d.split(" ").reverse()[0],c.push(["",d])}else"empty"===this.options.firstItem&&c.push(["",""]);return c},fillDay:function(){var a,b,c=this.fillCommon("d"),d=-1!==this.options.template.indexOf("DD"),e=31;if(this.options.smartDays&&this.$month&&this.$year){var f=parseInt(this.$month.val(),10),g=parseInt(this.$year.val(),10);isNaN(f)||isNaN(g)||(e=moment([g,f]).daysInMonth())}for(b=1;e>=b;b++)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillMonth:function(){var a,b,c=this.fillCommon("M"),d=-1!==this.options.template.indexOf("MMMM"),e=-1!==this.options.template.indexOf("MMM"),f=-1!==this.options.template.indexOf("MM");for(b=0;11>=b;b++)a=d?moment().date(1).month(b).format("MMMM"):e?moment().date(1).month(b).format("MMM"):f?this.leadZero(b+1):b+1,c.push([b,a]);return c},fillYear:function(){var a,b,c=[],d=-1!==this.options.template.indexOf("YYYY");for(b=this.options.maxYear;b>=this.options.minYear;b--)a=d?b:(b+"").substring(2),c[this.options.yearDescending?"push":"unshift"]([b,a]);return c=this.fillCommon("y").concat(c)},fillHour:function(){var a,b,c=this.fillCommon("h"),d=-1!==this.options.template.indexOf("h"),e=(-1!==this.options.template.indexOf("H"),-1!==this.options.template.toLowerCase().indexOf("hh")),f=d?1:0,g=d?12:23;for(b=f;g>=b;b++)a=e?this.leadZero(b):b,c.push([b,a]);return c},fillMinute:function(){var a,b,c=this.fillCommon("m"),d=-1!==this.options.template.indexOf("mm");for(b=0;59>=b;b+=this.options.minuteStep)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillSecond:function(){var a,b,c=this.fillCommon("s"),d=-1!==this.options.template.indexOf("ss");for(b=0;59>=b;b+=this.options.secondStep)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillAmpm:function(){var a=-1!==this.options.template.indexOf("a"),b=(-1!==this.options.template.indexOf("A"),[["am",a?"am":"AM"],["pm",a?"pm":"PM"]]);return b},getValue:function(a){var b,c={},d=this,e=!1;return angular.forEach(this.map,function(a,b){if("ampm"!==b){var f="day"===b?1:0;return c[b]=d["$"+b]?parseInt(d["$"+b].val(),10):f,isNaN(c[b])?(e=!0,!1):void 0}}),e?"":(this.$ampm&&(12===c.hour?c.hour="am"===this.$ampm.val()?0:12:c.hour="am"===this.$ampm.val()?c.hour:c.hour+12),b=moment([c.year,c.month,c.day,c.hour,c.minute,c.second]),this.highlight(b),a=void 0===a?this.options.format:a,null===a?b.isValid()?b:null:b.isValid()?b.format(a):"")},setValue:function(a){function b(a,b){var c={};return angular.forEach(a.children("option"),function(a,d){var e=angular.element(a).attr("value");if(""!==e){var f=Math.abs(e-b);("undefined"==typeof c.distance||f<c.distance)&&(c={value:e,distance:f})}}),c.value}if(a){var c="string"==typeof a?moment(a,this.options.format,!0):moment(a),d=this,e={};c.isValid()&&(angular.forEach(this.map,function(a,b){"ampm"!==b&&(e[b]=c[a[1]]())}),this.$ampm&&(e.hour>=12?(e.ampm="pm",e.hour>12&&(e.hour-=12)):(e.ampm="am",0===e.hour&&(e.hour=12))),angular.forEach(e,function(a,c){d["$"+c]&&("minute"===c&&d.options.minuteStep>1&&d.options.roundTime&&(a=b(d["$"+c],a)),"second"===c&&d.options.secondStep>1&&d.options.roundTime&&(a=b(d["$"+c],a)),d["$"+c].val(a))}),this.options.smartDays&&this.fillCombo("day"),this.$element.val(c.format(this.options.format)).triggerHandler("change"))}},highlight:function(a){a.isValid()?this.options.errorClass?this.$widget.removeClass(this.options.errorClass):this.$widget.find("select").css("border-color",this.borderColor):this.options.errorClass?this.$widget.addClass(this.options.errorClass):(this.borderColor||(this.borderColor=this.$widget.find("select").css("border-color")),this.$widget.find("select").css("border-color","red"))},leadZero:function(a){return 9>=a?"0"+a:a},destroy:function(){this.$widget.remove(),this.$element.removeData("combodate").show()}},{getInstance:function(b,c){return new a(b,c)}}}]),angular.module("xeditable").factory("editableIcons",function(){var a={default:{bs2:{ok:"icon-ok icon-white",cancel:"icon-remove"},bs3:{ok:"glyphicon glyphicon-ok",cancel:"glyphicon glyphicon-remove"}},external:{"font-awesome":{ok:"fa fa-check",cancel:"fa fa-times"}}};return a}),angular.module("xeditable").factory("editableThemes",function(){var a={default:{formTpl:'<form class="editable-wrap"></form>',noformTpl:'<span class="editable-wrap"></span>',controlsTpl:'<span class="editable-controls"></span>',inputTpl:"",errorTpl:'<div class="editable-error" data-ng-if="$error" data-ng-bind="$error"></div>',buttonsTpl:'<span class="editable-buttons"></span>',submitTpl:'<button type="submit">save</button>',cancelTpl:'<button type="button" ng-click="$form.$cancel()">cancel</button>'},bs2:{formTpl:'<form class="form-inline editable-wrap" role="form"></form>',noformTpl:'<span class="editable-wrap"></span>',controlsTpl:'<div class="editable-controls controls control-group" ng-class="{\'error\': $error}"></div>',inputTpl:"",errorTpl:'<div class="editable-error help-block" data-ng-if="$error" data-ng-bind="$error"></div>',buttonsTpl:'<span class="editable-buttons"></span>',submitTpl:'<button type="submit" class="btn btn-primary"><span></span></button>',cancelTpl:'<button type="button" class="btn" ng-click="$form.$cancel()"><span></span></button>'},bs3:{formTpl:'<form class="form-inline editable-wrap" role="form"></form>',noformTpl:'<span class="editable-wrap"></span>',controlsTpl:'<div class="editable-controls form-group" ng-class="{\'has-error\': $error}"></div>',inputTpl:"",errorTpl:'<div class="editable-error help-block" data-ng-if="$error" data-ng-bind="$error"></div>',buttonsTpl:'<span class="editable-buttons"></span>',submitTpl:'<button type="submit" class="btn btn-primary"><span></span></button>',cancelTpl:'<button type="button" class="btn btn-default" ng-click="$form.$cancel()"><span></span></button>',buttonsClass:"",inputClass:"",postrender:function(){switch(this.directiveName){case"editableText":case"editableSelect":case"editableTextarea":case"editableEmail":case"editableTel":case"editableNumber":case"editableUrl":case"editableSearch":case"editableDate":case"editableDatetime":case"editableBsdate":case"editableTime":case"editableMonth":case"editableWeek":case"editablePassword":case"editableDatetimeLocal":if(this.inputEl.addClass("form-control"),this.theme.inputClass){if(this.inputEl.attr("multiple")&&("input-sm"===this.theme.inputClass||"input-lg"===this.theme.inputClass))break;this.inputEl.addClass(this.theme.inputClass)}break;case"editableCheckbox":this.editorEl.addClass("checkbox")}this.buttonsEl&&this.theme.buttonsClass&&this.buttonsEl.find("button").addClass(this.theme.buttonsClass)}},semantic:{formTpl:'<form class="editable-wrap ui form" ng-class="{\'error\': $error}" role="form"></form>',noformTpl:'<span class="editable-wrap"></span>',controlsTpl:'<div class="editable-controls ui fluid input" ng-class="{\'error\': $error}"></div>',inputTpl:"",errorTpl:'<div class="editable-error ui error message" data-ng-if="$error" data-ng-bind="$error"></div>',buttonsTpl:'<span class="mini ui buttons"></span>',submitTpl:'<button type="submit" class="ui primary button"><i class="ui check icon"></i></button>',cancelTpl:'<button type="button" class="ui button" ng-click="$form.$cancel()"><i class="ui cancel icon"></i></button>'}};return a}),function(T){function z(a,c,b){var g=0,f=[0],h="",l=null,h=b||"UTF8";if("UTF8"!==h&&"UTF16"!==h)throw"encoding must be UTF8 or UTF16";if("HEX"===c){if(0!==a.length%2)throw"srcString of HEX type must be in byte increments";l=B(a),g=l.binLen,f=l.value}else if("ASCII"===c||"TEXT"===c)l=J(a,h),g=l.binLen,f=l.value;else{if("B64"!==c)throw"inputFormat must be HEX, TEXT, ASCII, or B64";l=K(a),g=l.binLen,f=l.value}this.getHash=function(a,c,b,h){var p,l=null,d=f.slice(),n=g;if(3===arguments.length?"number"!=typeof b&&(h=b,b=1):2===arguments.length&&(b=1),b!==parseInt(b,10)||1>b)throw"numRounds must a integer >= 1";switch(c){case"HEX":l=L;break;case"B64":l=M;break;default:throw"format must be HEX or B64"}if("SHA-1"===a)for(p=0;p<b;p++)d=y(d,n),n=160;else if("SHA-224"===a)for(p=0;p<b;p++)d=v(d,n,a),n=224;else if("SHA-256"===a)for(p=0;p<b;p++)d=v(d,n,a),n=256;else if("SHA-384"===a)for(p=0;p<b;p++)d=v(d,n,a),n=384;else{if("SHA-512"!==a)throw"Chosen SHA variant is not supported";for(p=0;p<b;p++)d=v(d,n,a),n=512}return l(d,N(h))},this.getHMAC=function(a,b,c,l,s){var d,n,p,m,w=[],x=[];switch(d=null,l){case"HEX":l=L;break;case"B64":l=M;break;default:throw"outputFormat must be HEX or B64"}if("SHA-1"===c)n=64,m=160;else if("SHA-224"===c)n=64,m=224;else if("SHA-256"===c)n=64,m=256;else if("SHA-384"===c)n=128,m=384;else{if("SHA-512"!==c)throw"Chosen SHA variant is not supported";n=128,m=512}if("HEX"===b)d=B(a),p=d.binLen,d=d.value;else if("ASCII"===b||"TEXT"===b)d=J(a,h),p=d.binLen,d=d.value;else{if("B64"!==b)throw"inputFormat must be HEX, TEXT, ASCII, or B64";d=K(a),p=d.binLen,d=d.value}for(a=8*n,b=n/4-1,n<p/8?(d="SHA-1"===c?y(d,p):v(d,p,c),d[b]&=4294967040):n>p/8&&(d[b]&=4294967040),n=0;n<=b;n+=1)w[n]=909522486^d[n],x[n]=1549556828^d[n];return c="SHA-1"===c?y(x.concat(y(w.concat(f),a+g)),a+m):v(x.concat(v(w.concat(f),a+g,c)),a+m,c),l(c,N(s))}}function s(a,c){this.a=a,this.b=c}function J(a,c){var g,l,b=[],f=[],h=0;if("UTF8"===c)for(l=0;l<a.length;l+=1)for(g=a.charCodeAt(l),f=[],2048<g?(f[0]=224|(61440&g)>>>12,f[1]=128|(4032&g)>>>6,f[2]=128|63&g):128<g?(f[0]=192|(1984&g)>>>6,f[1]=128|63&g):f[0]=g,g=0;g<f.length;g+=1)b[h>>>2]|=f[g]<<24-h%4*8,h+=1;else if("UTF16"===c)for(l=0;l<a.length;l+=1)b[h>>>2]|=a.charCodeAt(l)<<16-h%4*8,h+=2;return{value:b,binLen:8*h}}function B(a){var g,f,c=[],b=a.length;if(0!==b%2)throw"String of HEX type must be in byte increments";for(g=0;g<b;g+=2){if(f=parseInt(a.substr(g,2),16),isNaN(f))throw"String of HEX type contains invalid characters";c[g>>>3]|=f<<24-g%8*4}return{value:c,binLen:4*b}}function K(a){var g,f,h,l,r,c=[],b=0;if(-1===a.search(/^[a-zA-Z0-9=+\/]+$/))throw"Invalid character in base-64 string";if(g=a.indexOf("="),a=a.replace(/\=/g,""),-1!==g&&g<a.length)throw"Invalid '=' found in base-64 string";for(f=0;f<a.length;f+=4){for(r=a.substr(f,4),h=l=0;h<r.length;h+=1)g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(r[h]),l|=g<<18-6*h;for(h=0;h<r.length-1;h+=1)c[b>>2]|=(l>>>16-8*h&255)<<24-b%4*8,b+=1}return{value:c,binLen:8*b}}function L(a,c){var f,h,b="",g=4*a.length;for(f=0;f<g;f+=1)h=a[f>>>2]>>>8*(3-f%4),b+="0123456789abcdef".charAt(h>>>4&15)+"0123456789abcdef".charAt(15&h);return c.outputUpper?b.toUpperCase():b}function M(a,c){var f,h,l,b="",g=4*a.length;for(f=0;f<g;f+=3)for(l=(a[f>>>2]>>>8*(3-f%4)&255)<<16|(a[f+1>>>2]>>>8*(3-(f+1)%4)&255)<<8|a[f+2>>>2]>>>8*(3-(f+2)%4)&255,h=0;4>h;h+=1)b=8*f+6*h<=32*a.length?b+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(l>>>6*(3-h)&63):b+c.b64Pad;return b}function N(a){var c={outputUpper:!1,b64Pad:"="};try{a.hasOwnProperty("outputUpper")&&(c.outputUpper=a.outputUpper),a.hasOwnProperty("b64Pad")&&(c.b64Pad=a.b64Pad)}catch(b){}if("boolean"!=typeof c.outputUpper)throw"Invalid outputUpper formatting option";if("string"!=typeof c.b64Pad)throw"Invalid b64Pad formatting option";return c}function U(a,c){return a<<c|a>>>32-c}function u(a,c){return a>>>c|a<<32-c}function t(a,c){var b=null,b=new s(a.a,a.b);return b=32>=c?new s(b.a>>>c|b.b<<32-c&4294967295,b.b>>>c|b.a<<32-c&4294967295):new s(b.b>>>c-32|b.a<<64-c&4294967295,b.a>>>c-32|b.b<<64-c&4294967295)}function O(a,c){var b=null;return b=32>=c?new s(a.a>>>c,a.b>>>c|a.a<<32-c&4294967295):new s(0,a.a>>>c-32)}function V(a,c,b){return a^c^b}function P(a,c,b){return a&c^~a&b}function W(a,c,b){return new s(a.a&c.a^~a.a&b.a,a.b&c.b^~a.b&b.b)}function Q(a,c,b){return a&c^a&b^c&b}function X(a,c,b){return new s(a.a&c.a^a.a&b.a^c.a&b.a,a.b&c.b^a.b&b.b^c.b&b.b)}function Y(a){return u(a,2)^u(a,13)^u(a,22)}function Z(a){var c=t(a,28),b=t(a,34);return a=t(a,39),new s(c.a^b.a^a.a,c.b^b.b^a.b)}function $(a){return u(a,6)^u(a,11)^u(a,25)}function aa(a){var c=t(a,14),b=t(a,18);return a=t(a,41),new s(c.a^b.a^a.a,c.b^b.b^a.b)}function ba(a){return u(a,7)^u(a,18)^a>>>3}function ca(a){var c=t(a,1),b=t(a,8);return a=O(a,7),new s(c.a^b.a^a.a,c.b^b.b^a.b)}function da(a){return u(a,17)^u(a,19)^a>>>10}function ea(a){var c=t(a,19),b=t(a,61);return a=O(a,6),new s(c.a^b.a^a.a,c.b^b.b^a.b)}function R(a,c){var b=(65535&a)+(65535&c);return((a>>>16)+(c>>>16)+(b>>>16)&65535)<<16|65535&b}function fa(a,c,b,g){var f=(65535&a)+(65535&c)+(65535&b)+(65535&g);return((a>>>16)+(c>>>16)+(b>>>16)+(g>>>16)+(f>>>16)&65535)<<16|65535&f}function S(a,c,b,g,f){var h=(65535&a)+(65535&c)+(65535&b)+(65535&g)+(65535&f);return((a>>>16)+(c>>>16)+(b>>>16)+(g>>>16)+(f>>>16)+(h>>>16)&65535)<<16|65535&h}function ga(a,c){var b,g,f;return b=(65535&a.b)+(65535&c.b),g=(a.b>>>16)+(c.b>>>16)+(b>>>16),f=(65535&g)<<16|65535&b,b=(65535&a.a)+(65535&c.a)+(g>>>16),g=(a.a>>>16)+(c.a>>>16)+(b>>>16),new s((65535&g)<<16|65535&b,f)}function ha(a,c,b,g){var f,h,l;return f=(65535&a.b)+(65535&c.b)+(65535&b.b)+(65535&g.b),h=(a.b>>>16)+(c.b>>>16)+(b.b>>>16)+(g.b>>>16)+(f>>>16),l=(65535&h)<<16|65535&f,f=(65535&a.a)+(65535&c.a)+(65535&b.a)+(65535&g.a)+(h>>>16),h=(a.a>>>16)+(c.a>>>16)+(b.a>>>16)+(g.a>>>16)+(f>>>16),new s((65535&h)<<16|65535&f,l)}function ia(a,c,b,g,f){var h,l,r;return h=(65535&a.b)+(65535&c.b)+(65535&b.b)+(65535&g.b)+(65535&f.b),l=(a.b>>>16)+(c.b>>>16)+(b.b>>>16)+(g.b>>>16)+(f.b>>>16)+(h>>>16),r=(65535&l)<<16|65535&h,h=(65535&a.a)+(65535&c.a)+(65535&b.a)+(65535&g.a)+(65535&f.a)+(l>>>16),l=(a.a>>>16)+(c.a>>>16)+(b.a>>>16)+(g.a>>>16)+(f.a>>>16)+(h>>>16),new s((65535&l)<<16|65535&h,r)}function y(a,c){var g,f,h,l,r,s,p,m,x,b=[],u=P,t=V,v=Q,d=U,n=R,w=S,q=[1732584193,4023233417,2562383102,271733878,3285377520];for(a[c>>>5]|=128<<24-c%32,a[(c+65>>>9<<4)+15]=c,x=a.length,p=0;p<x;p+=16){for(g=q[0],f=q[1],h=q[2],l=q[3],r=q[4],m=0;80>m;m+=1)b[m]=16>m?a[m+p]:d(b[m-3]^b[m-8]^b[m-14]^b[m-16],1),s=20>m?w(d(g,5),u(f,h,l),r,1518500249,b[m]):40>m?w(d(g,5),t(f,h,l),r,1859775393,b[m]):60>m?w(d(g,5),v(f,h,l),r,2400959708,b[m]):w(d(g,5),t(f,h,l),r,3395469782,b[m]),r=l,l=h,h=d(f,30),f=g,g=s;q[0]=n(g,q[0]),q[1]=n(f,q[1]),q[2]=n(h,q[2]),q[3]=n(l,q[3]),q[4]=n(r,q[4])}return q}function v(a,c,b){var g,f,h,l,r,t,u,v,z,d,n,p,m,w,x,q,y,C,D,E,F,G,H,I,e,B,A=[],k=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];if(d=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428],f=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],"SHA-224"===b||"SHA-256"===b)n=64,g=(c+65>>>9<<4)+15,w=16,x=1,e=Number,q=R,y=fa,C=S,D=ba,E=da,F=Y,G=$,I=Q,H=P,d="SHA-224"===b?d:f;else{if("SHA-384"!==b&&"SHA-512"!==b)throw"Unexpected error in SHA-2 implementation";n=80,g=(c+128>>>10<<5)+31,w=32,x=2,e=s,q=ga,y=ha,C=ia,D=ca,E=ea,F=Z,G=aa,I=X,H=W,k=[new e(k[0],3609767458),new e(k[1],602891725),new e(k[2],3964484399),new e(k[3],2173295548),new e(k[4],4081628472),new e(k[5],3053834265),new e(k[6],2937671579),new e(k[7],3664609560),new e(k[8],2734883394),new e(k[9],1164996542),new e(k[10],1323610764),new e(k[11],3590304994),new e(k[12],4068182383),new e(k[13],991336113),new e(k[14],633803317),new e(k[15],3479774868),new e(k[16],2666613458),new e(k[17],944711139),new e(k[18],2341262773),new e(k[19],2007800933),new e(k[20],1495990901),new e(k[21],1856431235),new e(k[22],3175218132),new e(k[23],2198950837),new e(k[24],3999719339),new e(k[25],766784016),new e(k[26],2566594879),new e(k[27],3203337956),new e(k[28],1034457026),new e(k[29],2466948901),new e(k[30],3758326383),new e(k[31],168717936),new e(k[32],1188179964),new e(k[33],1546045734),new e(k[34],1522805485),new e(k[35],2643833823),new e(k[36],2343527390),new e(k[37],1014477480),new e(k[38],1206759142),new e(k[39],344077627),new e(k[40],1290863460),new e(k[41],3158454273),new e(k[42],3505952657),new e(k[43],106217008),new e(k[44],3606008344),new e(k[45],1432725776),new e(k[46],1467031594),new e(k[47],851169720),new e(k[48],3100823752),new e(k[49],1363258195),new e(k[50],3750685593),new e(k[51],3785050280),new e(k[52],3318307427),new e(k[53],3812723403),new e(k[54],2003034995),new e(k[55],3602036899),new e(k[56],1575990012),new e(k[57],1125592928),new e(k[58],2716904306),new e(k[59],442776044),new e(k[60],593698344),new e(k[61],3733110249),new e(k[62],2999351573),new e(k[63],3815920427),new e(3391569614,3928383900),new e(3515267271,566280711),new e(3940187606,3454069534),new e(4118630271,4000239992),new e(116418474,1914138554),new e(174292421,2731055270),new e(289380356,3203993006),new e(460393269,320620315),new e(685471733,587496836),new e(852142971,1086792851),new e(1017036298,365543100),new e(1126000580,2618297676),new e(1288033470,3409855158),new e(1501505948,4234509866),new e(1607167915,987167468),new e(1816402316,1246189591)],d="SHA-384"===b?[new e(3418070365,d[0]),new e(1654270250,d[1]),new e(2438529370,d[2]),new e(355462360,d[3]),new e(1731405415,d[4]),new e(41048885895,d[5]),new e(3675008525,d[6]),new e(1203062813,d[7])]:[new e(f[0],4089235720),new e(f[1],2227873595),new e(f[2],4271175723),new e(f[3],1595750129),new e(f[4],2917565137),new e(f[5],725511199),new e(f[6],4215389547),new e(f[7],327033209)]}for(a[c>>>5]|=128<<24-c%32,a[g]=c,B=a.length,p=0;p<B;p+=w){for(c=d[0],g=d[1],f=d[2],h=d[3],l=d[4],r=d[5],t=d[6],u=d[7],m=0;m<n;m+=1)A[m]=16>m?new e(a[m*x+p],a[m*x+p+1]):y(E(A[m-2]),A[m-7],D(A[m-15]),A[m-16]),v=C(u,G(l),H(l,r,t),k[m],A[m]),z=q(F(c),I(c,g,f)),u=t,t=r,r=l,l=q(h,v),h=f,f=g,g=c,c=q(v,z);d[0]=q(c,d[0]),d[1]=q(g,d[1]),d[2]=q(f,d[2]),d[3]=q(h,d[3]),d[4]=q(l,d[4]),d[5]=q(r,d[5]),d[6]=q(t,d[6]),d[7]=q(u,d[7])}if("SHA-224"===b)a=[d[0],d[1],d[2],d[3],d[4],d[5],d[6]];else if("SHA-256"===b)a=d;else if("SHA-384"===b)a=[d[0].a,d[0].b,d[1].a,d[1].b,d[2].a,d[2].b,d[3].a,d[3].b,d[4].a,d[4].b,d[5].a,d[5].b];else{if("SHA-512"!==b)throw"Unexpected error in SHA-2 implementation";a=[d[0].a,d[0].b,d[1].a,d[1].b,d[2].a,d[2].b,d[3].a,d[3].b,d[4].a,d[4].b,d[5].a,d[5].b,d[6].a,d[6].b,d[7].a,d[7].b]}return a}"function"!=typeof define||(define.amd,0)?"undefined"!=typeof exports?"undefined"!=typeof module&&module.exports?module.exports=exports=z:exports=z:T.jsSHA=z:define(function(){return z})}(this),_aa={},_aa._ab=function(f,e){for(var d=qrcode.width,b=qrcode.height,c=!0,g=0;g<e.Length&&c;g+=2){var a=Math.floor(e[g]),h=Math.floor(e[g+1]);if(a<-1||a>d||h<-1||h>b)throw"Error._ab ";c=!1,a==-1?(e[g]=0,c=!0):a==d&&(e[g]=d-1,c=!0),h==-1?(e[g+1]=0,c=!0):h==b&&(e[g+1]=b-1,c=!0)}c=!0;for(var g=e.Length-2;g>=0&&c;g-=2){var a=Math.floor(e[g]),h=Math.floor(e[g+1]);if(a<-1||a>d||h<-1||h>b)throw"Error._ab ";c=!1,a==-1?(e[g]=0,c=!0):a==d&&(e[g]=d-1,c=!0),h==-1?(e[g+1]=0,c=!0):h==b&&(e[g+1]=b-1,c=!0)}},_aa._af=function(b,d,a){for(var l=new _ac(d),k=new Array(d<<1),g=0;g<d;g++){for(var h=k.length,j=g+.5,i=0;i<h;i+=2)k[i]=(i>>1)+.5,k[i+1]=j;a._ad(k),_aa._ab(b,k);try{for(var i=0;i<h;i+=2){var e=4*Math.floor(k[i])+Math.floor(k[i+1])*qrcode.width*4,f=b[Math.floor(k[i])+qrcode.width*Math.floor(k[i+1])];qrcode.imagedata.data[e]=f?255:0,qrcode.imagedata.data[e+1]=f?255:0,qrcode.imagedata.data[e+2]=0,qrcode.imagedata.data[e+3]=255,f&&l._dq(i>>1,g)}}catch(c){throw"Error._ab"}}return l},_aa._ah=function(h,o,l,k,r,q,b,a,f,e,n,m,t,s,d,c,j,i){var g=_ae._ag(l,k,r,q,b,a,f,e,n,m,t,s,d,c,j,i);return _aa._af(h,o,g)},_a3._bv=new Array(31892,34236,39577,42195,48118,51042,55367,58893,63784,68472,70749,76311,79154,84390,87683,92361,96236,102084,102881,110507,110734,117786,119615,126325,127568,133589,136944,141498,145311,150283,152622,158308,161089,167017),_a3.VERSIONS=_ay(),_a3._av=function(a){if(a<1||a>40)throw"bad arguments";return _a3.VERSIONS[a-1]},_a3._at=function(b){if(b%4!=1)throw"Error _at";try{return _a3._av(b-17>>2)}catch(a){throw"Error _av"}},_a3._aw=function(d){for(var b=4294967295,f=0,c=0;c<_a3._bv.length;c++){var a=_a3._bv[c];if(a==d)return this._av(c+7);var e=_ax._gj(d,a);e<b&&(f=c+7,b=e)}return b<=3?this._av(f):null},_ae._ag=function(q,e,o,d,n,c,m,b,h,r,l,f,a,j,i,s){var g=this._be(q,e,o,d,n,c,m,b),k=this._bf(h,r,l,f,a,j,i,s);return k.times(g)},_ae._bf=function(f,h,d,g,b,e,a,c){return dy2=c-e,dy3=h-g+e-c,0==dy2&&0==dy3?new _ae(d-f,b-d,f,g-h,e-g,h,0,0,1):(dx1=d-b,dx2=a-b,dx3=f-d+b-a,dy1=g-e,_dr=dx1*dy2-dx2*dy1,a13=(dx3*dy2-dx2*dy3)/_dr,a23=(dx1*dy3-dx3*dy1)/_dr,new _ae(d-f+a13*d,a-f+a23*a,f,g-h+a13*g,c-h+a23*c,h,a13,a23,1))},_ae._be=function(f,h,d,g,b,e,a,c){return this._bf(f,h,d,g,b,e,a,c)._fr()};var _ca=21522,_cb=new Array(new Array(21522,0),new Array(20773,1),new Array(24188,2),new Array(23371,3),new Array(17913,4),new Array(16590,5),new Array(20375,6),new Array(19104,7),new Array(30660,8),new Array(29427,9),new Array(32170,10),new Array(30877,11),new Array(26159,12),new Array(25368,13),new Array(27713,14),new Array(26998,15),new Array(5769,16),new Array(5054,17),new Array(7399,18),new Array(6608,19),new Array(1890,20),new Array(597,21),new Array(3340,22),new Array(2107,23),new Array(13663,24),new Array(12392,25),new Array(16177,26),new Array(14854,27),new Array(9396,28),new Array(8579,29),new Array(11994,30),new Array(11245,31)),_ch=new Array(0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4);_ax._gj=function(d,c){return d^=c,_ch[15&d]+_ch[15&_ew(d,4)]+_ch[15&_ew(d,8)]+_ch[15&_ew(d,12)]+_ch[15&_ew(d,16)]+_ch[15&_ew(d,20)]+_ch[15&_ew(d,24)]+_ch[15&_ew(d,28)]},_ax._ci=function(a){var b=_ax._cj(a);return null!=b?b:_ax._cj(a^_ca)},_ax._cj=function(d){for(var b=4294967295,a=0,c=0;c<_cb.length;c++){var g=_cb[c],f=g[0];if(f==d)return new _ax(g[1]);var e=this._gj(d,f);e<b&&(a=g[1],b=e)}return b<=3?new _ax(a):null},_cg.forBits=function(a){if(a<0||a>=FOR_BITS.Length)throw"bad arguments";return FOR_BITS[a]};var L=new _cg(0,1,"L"),M=new _cg(1,0,"M"),Q=new _cg(2,3,"Q"),H=new _cg(3,2,"H"),FOR_BITS=new Array(M,L,H,Q);_dl._gn=function(c,h,s){if(c.length!=h._dp)throw"bad arguments";for(var k=h._bu(s),e=0,d=k._fb(),r=0;r<d.length;r++)e+=d[r].Count;for(var l=new Array(e),n=0,o=0;o<d.length;o++)for(var f=d[o],r=0;r<f.Count;r++){var m=f._dm,t=k._bo+m;l[n++]=new _dl(m,new Array(t))}for(var u=l[0]._dw.length,b=l.length-1;b>=0;){var w=l[b]._dw.length;if(w==u)break;b--}b++;for(var g=u-k._bo,a=0,r=0;r<g;r++)for(var o=0;o<n;o++)l[o]._dw[r]=c[a++];for(var o=b;o<n;o++)l[o]._dw[g]=c[a++];for(var q=l[0]._dw.length,r=g;r<q;r++)for(var o=0;o<n;o++){var v=o<b?r:r+1;l[o]._dw[v]=c[a++]}return l},_dx={},_dx._gl=function(a){if(a<0||a>7)throw"bad arguments";return _dx._dy[a]},_dx._dy=new Array(new _fg,new _fh,new _fi,new _fj,new _fk,new _fl,new _fm,new _fn),_az._bb=new _az(285),_az._bc=new _az(301),_az._bd=function(d,c){return d^c},Decoder={},Decoder.rsDecoder=new _db(_az._bb),Decoder.correctErrors=function(g,b){for(var d=g.length,f=new Array(d),e=0;e<d;e++)f[e]=255&g[e];var a=g.length-b;try{Decoder.rsDecoder.decode(f,a)}catch(c){throw c}for(var e=0;e<b;e++)g[e]=f[e]},Decoder.decode=function(r){for(var b=new _cl(r),o=b._cq(),c=b._cm()._cg,q=b._gk(),a=_dl._gn(q,o,c),f=0,k=0;k<a.Length;k++)f+=a[k]._du;for(var e=new Array(f),n=0,h=0;h<a.length;h++){var m=a[h],d=m.Codewords,g=m._du;Decoder.correctErrors(d,g);for(var k=0;k<g;k++)e[n++]=d[k]}var l=new QRCodeDataBlockReader(e,o._fd,c.Bits);return l},qrcode={},qrcode.imagedata=null,qrcode.width=0,qrcode.height=0,qrcode.qrCodeSymbol=null,qrcode.debug=!1,qrcode._eo=[[10,9,8,8],[12,11,16,10],[14,13,16,12]],qrcode.callback=null,qrcode.decode=function(d){if(0==arguments.length){var b=document.getElementById("qr-canvas"),a=b.getContext("2d");return qrcode.width=b.width,qrcode.height=b.height,qrcode.imagedata=a.getImageData(0,0,qrcode.width,qrcode.height),qrcode.result=qrcode.process(a),null!=qrcode.callback&&qrcode.callback(qrcode.result),qrcode.result}var c=new Image;c.onload=function(){var i=document.createElement("canvas"),h=i.getContext("2d"),f=document.getElementById("out-canvas");if(null!=f){var g=f.getContext("2d");g.clearRect(0,0,320,240),g.drawImage(c,0,0,320,240)}i.width=c.width,i.height=c.height,h.drawImage(c,0,0),qrcode.width=c.width,qrcode.height=c.height;try{qrcode.imagedata=h.getImageData(0,0,c.width,c.height)}catch(j){return qrcode.result="Cross domain image reading not supported in your browser! Save it to your computer then drag and drop the file!",void(null!=qrcode.callback&&qrcode.callback(qrcode.result))}try{qrcode.result=qrcode.process(h)}catch(j){console.log(j),qrcode.result="error decoding QR Code"}null!=qrcode.callback&&qrcode.callback(qrcode.result)},c.src=d},qrcode.decode_utf8=function(a){return decodeURIComponent(escape(a))},qrcode.process=function(r){var c=((new Date).getTime(),qrcode.grayScaleToBitmap(qrcode.grayscale()));if(qrcode.debug){for(var m=0;m<qrcode.height;m++)for(var n=0;n<qrcode.width;n++){var o=4*n+m*qrcode.width*4;qrcode.imagedata.data[o]=(c[n+m*qrcode.width],0),qrcode.imagedata.data[o+1]=(c[n+m*qrcode.width],0),qrcode.imagedata.data[o+2]=c[n+m*qrcode.width]?255:0}r.putImageData(qrcode.imagedata,0,0)}var h=new Detector(c),q=h.detect();qrcode.debug&&r.putImageData(qrcode.imagedata,0,0);
for(var k=Decoder.decode(q.bits),g=k.DataByte,l="",f=0;f<g.length;f++)for(var e=0;e<g[f].length;e++)l+=String.fromCharCode(g[f][e]);(new Date).getTime();return qrcode.decode_utf8(l)},qrcode.getPixel=function(a,b){if(qrcode.width<a)throw"point error";if(qrcode.height<b)throw"point error";return point=4*a+b*qrcode.width*4,p=(33*qrcode.imagedata.data[point]+34*qrcode.imagedata.data[point+1]+33*qrcode.imagedata.data[point+2])/100,p},qrcode.binarize=function(d){for(var c=new Array(qrcode.width*qrcode.height),e=0;e<qrcode.height;e++)for(var b=0;b<qrcode.width;b++){var a=qrcode.getPixel(b,e);c[b+e*qrcode.width]=a<=d}return c},qrcode._em=function(d){for(var c=4,k=Math.floor(qrcode.width/c),j=Math.floor(qrcode.height/c),f=new Array(c),g=0;g<c;g++){f[g]=new Array(c);for(var e=0;e<c;e++)f[g][e]=new Array(0,0)}for(var o=0;o<c;o++)for(var a=0;a<c;a++){f[a][o][0]=255;for(var l=0;l<j;l++)for(var n=0;n<k;n++){var h=d[k*a+n+(j*o+l)*qrcode.width];h<f[a][o][0]&&(f[a][o][0]=h),h>f[a][o][1]&&(f[a][o][1]=h)}}for(var m=new Array(c),b=0;b<c;b++)m[b]=new Array(c);for(var o=0;o<c;o++)for(var a=0;a<c;a++)m[a][o]=Math.floor((f[a][o][0]+f[a][o][1])/2);return m},qrcode.grayScaleToBitmap=function(f){for(var j=qrcode._em(f),b=j.length,e=Math.floor(qrcode.width/b),d=Math.floor(qrcode.height/b),c=new Array(qrcode.height*qrcode.width),i=0;i<b;i++)for(var a=0;a<b;a++)for(var g=0;g<d;g++)for(var h=0;h<e;h++)c[e*a+h+(d*i+g)*qrcode.width]=f[e*a+h+(d*i+g)*qrcode.width]<j[a][i];return c},qrcode.grayscale=function(){for(var c=new Array(qrcode.width*qrcode.height),d=0;d<qrcode.height;d++)for(var b=0;b<qrcode.width;b++){var a=qrcode.getPixel(b,d);c[b+d*qrcode.width]=a}return c},Array.prototype.remove=function(c,b){var a=this.slice((b||c)+1||this.length);return this.length=c<0?this.length+c:c,this.push.apply(this,a)};var _gf=3,_eh=57,_el=8,_eg=2;qrcode._er=function(c){function b(l,k){return xDiff=l.X-k.X,yDiff=l.Y-k.Y,Math.sqrt(xDiff*xDiff+yDiff*yDiff)}function d(k,o,n){var m=o.x,l=o.y;return(n.x-m)*(k.y-l)-(n.y-l)*(k.x-m)}var a,j,h,i=b(c[0],c[1]),f=b(c[1],c[2]),e=b(c[0],c[2]);if(f>=i&&f>=e?(j=c[0],a=c[1],h=c[2]):e>=f&&e>=i?(j=c[1],a=c[0],h=c[2]):(j=c[2],a=c[0],h=c[1]),d(a,j,h)<0){var g=a;a=h,h=g}c[0]=a,c[1]=j,c[2]=h},angular.module("ui.sortable",[]).value("uiSortableConfig",{items:"> [ng-repeat],> [data-ng-repeat],> [x-ng-repeat]"}).directive("uiSortable",["uiSortableConfig","$timeout","$log",function(uiSortableConfig,$timeout,$log){return{require:"?ngModel",scope:{ngModel:"=",uiSortable:"="},link:function(scope,element,attrs,ngModel){function combineCallbacks(first,second){var firstIsFunc="function"==typeof first,secondIsFunc="function"==typeof second;return firstIsFunc&&secondIsFunc?function(){first.apply(this,arguments),second.apply(this,arguments)}:secondIsFunc?second:first}function getSortableWidgetInstance(element){var data=element.data("ui-sortable");return data&&"object"==typeof data&&"ui-sortable"===data.widgetFullName?data:null}function patchSortableOption(key,value){return callbacks[key]?("stop"===key&&(value=combineCallbacks(value,function(){scope.$apply()}),value=combineCallbacks(value,afterStop)),value=combineCallbacks(callbacks[key],value)):wrappers[key]&&(value=wrappers[key](value)),value||"items"!==key&&"ui-model-items"!==key||(value=uiSortableConfig.items),value}function patchUISortableOptions(newVal,oldVal,sortableWidgetInstance){function addDummyOptionKey(value,key){key in opts||(opts[key]=null)}angular.forEach(callbacks,addDummyOptionKey);var optsDiff=null;if(oldVal){var defaultOptions;angular.forEach(oldVal,function(oldValue,key){if(!(newVal&&key in newVal)){if(key in directiveOpts)return void("ui-floating"===key?opts[key]="auto":opts[key]=patchSortableOption(key,void 0));defaultOptions||(defaultOptions=angular.element.ui.sortable().options);var defaultValue=defaultOptions[key];defaultValue=patchSortableOption(key,defaultValue),optsDiff||(optsDiff={}),optsDiff[key]=defaultValue,opts[key]=defaultValue}})}return angular.forEach(newVal,function(value,key){return key in directiveOpts?("ui-floating"!==key||value!==!1&&value!==!0||!sortableWidgetInstance||(sortableWidgetInstance.floating=value),void(opts[key]=patchSortableOption(key,value))):(value=patchSortableOption(key,value),optsDiff||(optsDiff={}),optsDiff[key]=value,void(opts[key]=value))}),optsDiff}function getPlaceholderElement(element){var placeholder=element.sortable("option","placeholder");if(placeholder&&placeholder.element&&"function"==typeof placeholder.element){var result=placeholder.element();return result=angular.element(result)}return null}function getPlaceholderExcludesludes(element,placeholder){var notCssSelector=opts["ui-model-items"].replace(/[^,]*>/g,""),excludes=element.find('[class="'+placeholder.attr("class")+'"]:not('+notCssSelector+")");return excludes}function hasSortingHelper(element,ui){var helperOption=element.sortable("option","helper");return"clone"===helperOption||"function"==typeof helperOption&&ui.item.sortable.isCustomHelperUsed()}function getSortingHelper(element,ui,savedNodes){var result=null;return hasSortingHelper(element,ui)&&"parent"===element.sortable("option","appendTo")&&(result=savedNodes.last()),result}function isFloating(item){return/left|right/.test(item.css("float"))||/inline|table-cell/.test(item.css("display"))}function getElementScope(elementScopes,element){for(var result=null,i=0;i<elementScopes.length;i++){var x=elementScopes[i];if(x.element[0]===element[0]){result=x.scope;break}}return result}function afterStop(e,ui){ui.item.sortable._destroy()}function getItemIndex(item){return item.parent().find(opts["ui-model-items"]).index(item)}function wireUp(){scope.$watchCollection("ngModel",function(){$timeout(function(){getSortableWidgetInstance(element)&&element.sortable("refresh")},0,!1)}),callbacks.start=function(e,ui){if("auto"===opts["ui-floating"]){var siblings=ui.item.siblings(),sortableWidgetInstance=getSortableWidgetInstance(angular.element(e.target));sortableWidgetInstance.floating=isFloating(siblings)}var index=getItemIndex(ui.item);ui.item.sortable={model:ngModel.$modelValue[index],index:index,source:ui.item.parent(),sourceModel:ngModel.$modelValue,cancel:function(){ui.item.sortable._isCanceled=!0},isCanceled:function(){return ui.item.sortable._isCanceled},isCustomHelperUsed:function(){return!!ui.item.sortable._isCustomHelperUsed},_isCanceled:!1,_isCustomHelperUsed:ui.item.sortable._isCustomHelperUsed,_destroy:function(){angular.forEach(ui.item.sortable,function(value,key){ui.item.sortable[key]=void 0})}}},callbacks.activate=function(e,ui){savedNodes=element.contents();var placeholder=getPlaceholderElement(element);if(placeholder&&placeholder.length){var excludes=getPlaceholderExcludesludes(element,placeholder);savedNodes=savedNodes.not(excludes)}var connectedSortables=ui.item.sortable._connectedSortables||[];connectedSortables.push({element:element,scope:scope}),ui.item.sortable._connectedSortables=connectedSortables},callbacks.update=function(e,ui){if(!ui.item.sortable.received){ui.item.sortable.dropindex=getItemIndex(ui.item);var droptarget=ui.item.parent();ui.item.sortable.droptarget=droptarget;var droptargetScope=getElementScope(ui.item.sortable._connectedSortables,droptarget);ui.item.sortable.droptargetModel=droptargetScope.ngModel,element.sortable("cancel")}var sortingHelper=!ui.item.sortable.received&&getSortingHelper(element,ui,savedNodes);sortingHelper&&sortingHelper.length&&(savedNodes=savedNodes.not(sortingHelper)),savedNodes.appendTo(element),ui.item.sortable.received&&(savedNodes=null),ui.item.sortable.received&&!ui.item.sortable.isCanceled()&&scope.$apply(function(){ngModel.$modelValue.splice(ui.item.sortable.dropindex,0,ui.item.sortable.moved)})},callbacks.stop=function(e,ui){if(!ui.item.sortable.received&&"dropindex"in ui.item.sortable&&!ui.item.sortable.isCanceled())scope.$apply(function(){ngModel.$modelValue.splice(ui.item.sortable.dropindex,0,ngModel.$modelValue.splice(ui.item.sortable.index,1)[0])});else if((!("dropindex"in ui.item.sortable)||ui.item.sortable.isCanceled())&&!angular.equals(element.contents(),savedNodes)){var sortingHelper=getSortingHelper(element,ui,savedNodes);sortingHelper&&sortingHelper.length&&(savedNodes=savedNodes.not(sortingHelper)),savedNodes.appendTo(element)}savedNodes=null},callbacks.receive=function(e,ui){ui.item.sortable.received=!0},callbacks.remove=function(e,ui){"dropindex"in ui.item.sortable||(element.sortable("cancel"),ui.item.sortable.cancel()),ui.item.sortable.isCanceled()||scope.$apply(function(){ui.item.sortable.moved=ngModel.$modelValue.splice(ui.item.sortable.index,1)[0]})},wrappers.helper=function(inner){return inner&&"function"==typeof inner?function(e,item){var oldItemSortable=item.sortable,index=getItemIndex(item);item.sortable={model:ngModel.$modelValue[index],index:index,source:item.parent(),sourceModel:ngModel.$modelValue,_restore:function(){angular.forEach(item.sortable,function(value,key){item.sortable[key]=void 0}),item.sortable=oldItemSortable}};var innerResult=inner.apply(this,arguments);return item.sortable._restore(),item.sortable._isCustomHelperUsed=item!==innerResult,innerResult}:inner},scope.$watchCollection("uiSortable",function(newVal,oldVal){var sortableWidgetInstance=getSortableWidgetInstance(element);if(sortableWidgetInstance){var optsDiff=patchUISortableOptions(newVal,oldVal,sortableWidgetInstance);optsDiff&&element.sortable("option",optsDiff)}},!0),patchUISortableOptions(opts)}function init(){ngModel?wireUp():$log.info("ui.sortable: ngModel not provided!",element),element.sortable(opts)}function initIfEnabled(){return(!scope.uiSortable||!scope.uiSortable.disabled)&&(init(),initIfEnabled.cancelWatcher(),initIfEnabled.cancelWatcher=angular.noop,!0)}var savedNodes,opts={},directiveOpts={"ui-floating":void 0,"ui-model-items":uiSortableConfig.items},callbacks={receive:null,remove:null,start:null,stop:null,update:null},wrappers={helper:null};return angular.extend(opts,directiveOpts,uiSortableConfig,scope.uiSortable),angular.element.fn&&angular.element.fn.jquery?(initIfEnabled.cancelWatcher=angular.noop,void(initIfEnabled()||(initIfEnabled.cancelWatcher=scope.$watch("uiSortable.disabled",initIfEnabled)))):void $log.error("ui.sortable: jQuery should be included before AngularJS!")}}}]),!function(e){function t(t,r){if(r=r||{},r.worker&&S.WORKERS_SUPPORTED){var n=f();return n.userStep=r.step,n.userChunk=r.chunk,n.userComplete=r.complete,n.userError=r.error,r.step=m(r.step),r.chunk=m(r.chunk),r.complete=m(r.complete),r.error=m(r.error),delete r.worker,void n.postMessage({input:t,config:r,workerId:n.id})}var o=null;return"string"==typeof t?o=r.download?new i(r):new a(r):(e.File&&t instanceof File||t instanceof Object)&&(o=new s(r)),o.stream(t)}function r(e,t){function r(){"object"==typeof t&&("string"==typeof t.delimiter&&1==t.delimiter.length&&-1==S.BAD_DELIMITERS.indexOf(t.delimiter)&&(u=t.delimiter),("boolean"==typeof t.quotes||t.quotes instanceof Array)&&(o=t.quotes),"string"==typeof t.newline&&(h=t.newline))}function n(e){if("object"!=typeof e)return[];var t=[];for(var r in e)t.push(r);return t}function i(e,t){var r="";"string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t));var n=e instanceof Array&&e.length>0,i=!(t[0]instanceof Array);if(n){for(var a=0;a<e.length;a++)a>0&&(r+=u),r+=s(e[a],a);t.length>0&&(r+=h)}for(var o=0;o<t.length;o++){for(var f=n?e.length:t[o].length,c=0;f>c;c++){c>0&&(r+=u);var d=n&&i?e[c]:c;r+=s(t[o][d],c)}o<t.length-1&&(r+=h)}return r}function s(e,t){if("undefined"==typeof e||null===e)return"";e=e.toString().replace(/"/g,'""');var r="boolean"==typeof o&&o||o instanceof Array&&o[t]||a(e,S.BAD_DELIMITERS)||e.indexOf(u)>-1||" "==e.charAt(0)||" "==e.charAt(e.length-1);return r?'"'+e+'"':e}function a(e,t){for(var r=0;r<t.length;r++)if(e.indexOf(t[r])>-1)return!0;return!1}var o=!1,u=",",h="\r\n";if(r(),"string"==typeof e&&(e=JSON.parse(e)),e instanceof Array){if(!e.length||e[0]instanceof Array)return i(null,e);if("object"==typeof e[0])return i(n(e[0]),e)}else if("object"==typeof e)return"string"==typeof e.data&&(e.data=JSON.parse(e.data)),e.data instanceof Array&&(e.fields||(e.fields=e.data[0]instanceof Array?e.fields:n(e.data[0])),e.data[0]instanceof Array||"object"==typeof e.data[0]||(e.data=[e.data])),i(e.fields||[],e.data||[]);throw"exception: Unable to serialize unrecognized input"}function n(t){function r(e){var t=_(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null),this._handle=new o(t),this._handle.streamer=this,this._config=t}this._handle=null,this._paused=!1,this._finished=!1,this._input=null,this._baseIndex=0,this._partialLine="",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},r.call(this,t),this.parseChunk=function(t){if(this.isFirstChunk&&m(this._config.beforeFirstChunk)){var r=this._config.beforeFirstChunk(t);void 0!==r&&(t=r)}this.isFirstChunk=!1;var n=this._partialLine+t;this._partialLine="";var i=this._handle.parse(n,this._baseIndex,!this._finished);if(!this._handle.paused()&&!this._handle.aborted()){var s=i.meta.cursor;this._finished||(this._partialLine=n.substring(s-this._baseIndex),this._baseIndex=s),i&&i.data&&(this._rowCount+=i.data.length);var a=this._finished||this._config.preview&&this._rowCount>=this._config.preview;if(y)e.postMessage({results:i,workerId:S.WORKER_ID,finished:a});else if(m(this._config.chunk)){if(this._config.chunk(i,this._handle),this._paused)return;i=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(i.data),this._completeResults.errors=this._completeResults.errors.concat(i.errors),this._completeResults.meta=i.meta),!a||!m(this._config.complete)||i&&i.meta.aborted||this._config.complete(this._completeResults),a||i&&i.meta.paused||this._nextChunk(),i}},this._sendError=function(t){m(this._config.error)?this._config.error(t):y&&this._config.error&&e.postMessage({workerId:S.WORKER_ID,error:t,finished:!1})}}function i(e){function t(e){var t=e.getResponseHeader("Content-Range");return parseInt(t.substr(t.lastIndexOf("/")+1))}e=e||{},e.chunkSize||(e.chunkSize=S.RemoteChunkSize),n.call(this,e);var r;this._nextChunk=k?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)return void this._chunkLoaded();if(r=new XMLHttpRequest,k||(r.onload=g(this._chunkLoaded,this),r.onerror=g(this._chunkError,this)),r.open("GET",this._input,!k),this._config.chunkSize){var e=this._start+this._config.chunkSize-1;r.setRequestHeader("Range","bytes="+this._start+"-"+e),r.setRequestHeader("If-None-Match","webkit-no-cache")}try{r.send()}catch(t){this._chunkError(t.message)}k&&0==r.status?this._chunkError():this._start+=this._config.chunkSize},this._chunkLoaded=function(){if(4==r.readyState){if(r.status<200||r.status>=400)return void this._chunkError();this._finished=!this._config.chunkSize||this._start>t(r),this.parseChunk(r.responseText)}},this._chunkError=function(e){var t=r.statusText||e;this._sendError(t)}}function s(e){e=e||{},e.chunkSize||(e.chunkSize=S.LocalChunkSize),n.call(this,e);var t,r,i="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,r=e.slice||e.webkitSlice||e.mozSlice,i?(t=new FileReader,t.onload=g(this._chunkLoaded,this),t.onerror=g(this._chunkError,this)):t=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount<this._config.preview)||this._readChunk()},this._readChunk=function(){var e=this._input;if(this._config.chunkSize){var n=Math.min(this._start+this._config.chunkSize,this._input.size);e=r.call(e,this._start,n)}var s=t.readAsText(e,this._config.encoding);i||this._chunkLoaded({target:{result:s}})},this._chunkLoaded=function(e){this._start+=this._config.chunkSize,this._finished=!this._config.chunkSize||this._start>=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(t.error)}}function a(e){e=e||{},n.call(this,e);var t,r;this.stream=function(e){return t=e,r=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e=this._config.chunkSize,t=e?r.substr(0,e):r;return r=e?r.substr(e):"",this._finished=!r,this.parseChunk(t)}}}function o(e){function t(){if(b&&d&&(h("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+S.DefaultDelimiter+"'"),d=!1),e.skipEmptyLines)for(var t=0;t<b.data.length;t++)1==b.data[t].length&&""==b.data[t][0]&&b.data.splice(t--,1);return r()&&n(),i()}function r(){return e.header&&0==y.length}function n(){if(b){for(var e=0;r()&&e<b.data.length;e++)for(var t=0;t<b.data[e].length;t++)y.push(b.data[e][t]);b.data.splice(0,1)}}function i(){if(!b||!e.header&&!e.dynamicTyping)return b;for(var t=0;t<b.data.length;t++){for(var r={},n=0;n<b.data[t].length;n++){if(e.dynamicTyping){var i=b.data[t][n];b.data[t][n]="true"==i||"TRUE"==i||"false"!=i&&"FALSE"!=i&&o(i)}e.header&&(n>=y.length?(r.__parsed_extra||(r.__parsed_extra=[]),r.__parsed_extra.push(b.data[t][n])):r[y[n]]=b.data[t][n])}e.header&&(b.data[t]=r,n>y.length?h("FieldMismatch","TooManyFields","Too many fields: expected "+y.length+" fields but parsed "+n,t):n<y.length&&h("FieldMismatch","TooFewFields","Too few fields: expected "+y.length+" fields but parsed "+n,t))}return e.header&&b.meta&&(b.meta.fields=y),b}function s(t){for(var r,n,i,s=[",","\t","|",";",S.RECORD_SEP,S.UNIT_SEP],a=0;a<s.length;a++){var o=s[a],h=0,f=0;i=void 0;for(var c=new u({delimiter:o,preview:10}).parse(t),d=0;d<c.data.length;d++){var l=c.data[d].length;f+=l,"undefined"!=typeof i?l>1&&(h+=Math.abs(l-i),i=l):i=l}c.data.length>0&&(f/=c.data.length),("undefined"==typeof n||n>h)&&f>1.99&&(n=h,r=o)}return e.delimiter=r,{successful:!!r,bestDelimiter:r}}function a(e){e=e.substr(0,1048576);var t=e.split("\r");if(1==t.length)return"\n";for(var r=0,n=0;n<t.length;n++)"\n"==t[n][0]&&r++;return r>=t.length/2?"\r\n":"\r"}function o(e){var t=l.test(e);return t?parseFloat(e):e}function h(e,t,r,n){b.errors.push({type:e,code:t,message:r,row:n})}var f,c,d,l=/^\s*-?(\d*\.?\d+|\d+\.?\d*)(e[-+]?\d+)?\s*$/i,p=this,g=0,v=!1,k=!1,y=[],b={data:[],errors:[],meta:{}};if(m(e.step)){var R=e.step;e.step=function(n){if(b=n,r())t();else{if(t(),0==b.data.length)return;g+=n.data.length,e.preview&&g>e.preview?c.abort():R(b,p)}}}this.parse=function(r,n,i){if(e.newline||(e.newline=a(r)),d=!1,!e.delimiter){var o=s(r);o.successful?e.delimiter=o.bestDelimiter:(d=!0,e.delimiter=S.DefaultDelimiter),b.meta.delimiter=e.delimiter}var h=_(e);return e.preview&&e.header&&h.preview++,f=r,c=new u(h),b=c.parse(f,n,i),t(),v?{meta:{paused:!0}}:b||{meta:{paused:!1}}},this.paused=function(){return v},this.pause=function(){v=!0,c.abort(),f=f.substr(c.getCharIndex())},this.resume=function(){v=!1,p.streamer.parseChunk(f)},this.aborted=function(){return k},this.abort=function(){k=!0,c.abort(),b.meta.aborted=!0,m(e.complete)&&e.complete(b),f=""}}function u(e){e=e||{};var t=e.delimiter,r=e.newline,n=e.comments,i=e.step,s=e.preview,a=e.fastMode;if(("string"!=typeof t||S.BAD_DELIMITERS.indexOf(t)>-1)&&(t=","),n===t)throw"Comment character same as delimiter";n===!0?n="#":("string"!=typeof n||S.BAD_DELIMITERS.indexOf(n)>-1)&&(n=!1),"\n"!=r&&"\r"!=r&&"\r\n"!=r&&(r="\n");var o=0,u=!1;this.parse=function(e,h,f){function c(e){b.push(e),S=o}function d(t){return f?p():("undefined"==typeof t&&(t=e.substr(o)),w.push(t),o=g,c(w),y&&_(),p())}function l(t){o=t,c(w),w=[],O=e.indexOf(r,o)}function p(e){return{data:b,errors:R,meta:{delimiter:t,linebreak:r,aborted:u,truncated:!!e,cursor:S+(h||0)}}}function _(){i(p()),b=[],R=[]}if("string"!=typeof e)throw"Input must be a string";var g=e.length,m=t.length,v=r.length,k=n.length,y="function"==typeof i;o=0;var b=[],R=[],w=[],S=0;if(!e)return p();if(a||a!==!1&&-1===e.indexOf('"')){for(var C=e.split(r),E=0;E<C.length;E++){var w=C[E];if(o+=w.length,E!==C.length-1)o+=r.length;else if(f)return p();if(!n||w.substr(0,k)!=n){if(y){if(b=[],c(w.split(t)),_(),u)return p()}else c(w.split(t));if(s&&E>=s)return b=b.slice(0,s),p(!0)}}return p()}for(var x=e.indexOf(t,o),O=e.indexOf(r,o);;)if('"'!=e[o])if(n&&0===w.length&&e.substr(o,k)===n){if(-1==O)return p();o=O+v,O=e.indexOf(r,o),x=e.indexOf(t,o)}else if(-1!==x&&(O>x||-1===O))w.push(e.substring(o,x)),o=x+m,x=e.indexOf(t,o);else{if(-1===O)break;if(w.push(e.substring(o,O)),l(O+v),y&&(_(),u))return p();if(s&&b.length>=s)return p(!0)}else{var I=o;for(o++;;){var I=e.indexOf('"',I+1);if(-1===I)return f||R.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:b.length,index:o}),d();if(I===g-1){var D=e.substring(o,I).replace(/""/g,'"');return d(D)}if('"'!=e[I+1]){if(e[I+1]==t){w.push(e.substring(o,I).replace(/""/g,'"')),o=I+1+m,x=e.indexOf(t,o),O=e.indexOf(r,o);break}if(e.substr(I+1,v)===r){if(w.push(e.substring(o,I).replace(/""/g,'"')),l(I+1+v),x=e.indexOf(t,o),y&&(_(),u))return p();if(s&&b.length>=s)return p(!0);break}}else I++}}return d()},this.abort=function(){u=!0},this.getCharIndex=function(){return o}}function h(){var e=document.getElementsByTagName("script");return e.length?e[e.length-1].src:""}function f(){if(!S.WORKERS_SUPPORTED)return!1;if(!b&&null===S.SCRIPT_PATH)throw new Error("Script path cannot be determined automatically when Papa Parse is loaded asynchronously. You need to set Papa.SCRIPT_PATH manually.");var t=S.SCRIPT_PATH||v;t+=(-1!==t.indexOf("?")?"&":"?")+"papaworker";var r=new e.Worker(t);return r.onmessage=c,r.id=w++,R[r.id]=r,r}function c(e){var t=e.data,r=R[t.workerId],n=!1;if(t.error)r.userError(t.error,t.file);else if(t.results&&t.results.data){var i=function(){n=!0,d(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},s={abort:i,pause:l,resume:l};if(m(r.userStep)){for(var a=0;a<t.results.data.length&&(r.userStep({data:[t.results.data[a]],errors:t.results.errors,meta:t.results.meta},s),!n);a++);delete t.results}else m(r.userChunk)&&(r.userChunk(t.results,s,t.file),delete t.results)}t.finished&&!n&&d(t.workerId,t.results)}function d(e,t){var r=R[e];m(r.userComplete)&&r.userComplete(t),r.terminate(),delete R[e]}function l(){throw"Not implemented."}function p(t){var r=t.data;if("undefined"==typeof S.WORKER_ID&&r&&(S.WORKER_ID=r.workerId),"string"==typeof r.input)e.postMessage({workerId:S.WORKER_ID,results:S.parse(r.input,r.config),finished:!0});else if(e.File&&r.input instanceof File||r.input instanceof Object){var n=S.parse(r.input,r.config);n&&e.postMessage({workerId:S.WORKER_ID,results:n,finished:!0})}}function _(e){if("object"!=typeof e)return e;var t=e instanceof Array?[]:{};for(var r in e)t[r]=_(e[r]);return t}function g(e,t){return function(){e.apply(t,arguments)}}function m(e){return"function"==typeof e}var v,k=!e.document&&!!e.postMessage,y=k&&/(\?|&)papaworker(=|&|$)/.test(e.location.search),b=!1,R={},w=0,S={};if(S.parse=t,S.unparse=r,S.RECORD_SEP=String.fromCharCode(30),S.UNIT_SEP=String.fromCharCode(31),S.BYTE_ORDER_MARK="\ufeff",S.BAD_DELIMITERS=["\r","\n",'"',S.BYTE_ORDER_MARK],S.WORKERS_SUPPORTED=!k&&!!e.Worker,S.SCRIPT_PATH=null,S.LocalChunkSize=10485760,S.RemoteChunkSize=5242880,S.DefaultDelimiter=",",S.Parser=u,S.ParserHandle=o,S.NetworkStreamer=i,S.FileStreamer=s,S.StringStreamer=a,"undefined"!=typeof module&&module.exports?module.exports=S:m(e.define)&&e.define.amd?define(function(){return S}):e.Papa=S,e.jQuery){var C=e.jQuery;C.fn.parse=function(t){function r(){if(0==a.length)return void(m(t.complete)&&t.complete());var e=a[0];if(m(t.before)){var r=t.before(e.file,e.inputElem);if("object"==typeof r){if("abort"==r.action)return void n("AbortError",e.file,e.inputElem,r.reason);if("skip"==r.action)return void i();"object"==typeof r.config&&(e.instanceConfig=C.extend(e.instanceConfig,r.config))}else if("skip"==r)return void i()}var s=e.instanceConfig.complete;e.instanceConfig.complete=function(t){m(s)&&s(t,e.file,e.inputElem),i()},S.parse(e.file,e.instanceConfig)}function n(e,r,n,i){m(t.error)&&t.error({name:e},r,n,i)}function i(){a.splice(0,1),r()}var s=t.config||{},a=[];return this.each(function(){var t="INPUT"==C(this).prop("tagName").toUpperCase()&&"file"==C(this).attr("type").toLowerCase()&&e.FileReader;if(!t||!this.files||0==this.files.length)return!0;for(var r=0;r<this.files.length;r++)a.push({file:this.files[r],inputElem:this,instanceConfig:C.extend({},s)})}),r(),this}}y?e.onmessage=p:S.WORKERS_SUPPORTED&&(v=h(),document.body?document.addEventListener("DOMContentLoaded",function(){b=!0},!0):b=!0),i.prototype=Object.create(n.prototype),i.prototype.constructor=i,s.prototype=Object.create(n.prototype),s.prototype.constructor=s,a.prototype=Object.create(a.prototype),a.prototype.constructor=a}("undefined"!=typeof window?window:this);var CRYPTO={paranoia_level:null,PASSWORD:{generate:function(length,callback,progress,start_string){return sjcl.random.isReady(paranoia_level)?(null==start_string&&(start_string=""),start_string.length<length?(start_string+=CRYPTO.RANDOM.getRandomASCII(),null!=progress&&progress(start_string.length/length*100),void setTimeout(this.generate(length,callback,progress,start_string),100)):(callback(start_string),void(null!=progress&&progress(100)))):void setTimeout(this.generate(length,callback,progress,start_string),500)},logRepeatedCharCount:function(str){var chars=[];for(i=0;i<str.length;i++)chars[str.charAt(i)]=null==chars[str.charAt(i)]?0:chars[str.charAt(i)]+1;return chars}},RANDOM:{getRandomASCII:function(){for(var ret="";ret.length<4;){var int=sjcl.random.randomWords(1,paranoia_level);int=int[0];var tmp=this._isASCII((4278190080&int)>>24);tmp&&(ret+=tmp),tmp=this._isASCII((16711680&int)>>16),tmp&&(ret+=tmp),tmp=this._isASCII((65280&int)>>8),tmp&&(ret+=tmp),tmp=this._isASCII(255&int),tmp&&(ret+=tmp)}return ret},_isASCII:function(data){return data>31&&data<127&&String.fromCharCode(data)}},initEngines:function(default_paranoia){paranoia_level=default_paranoia||10,sjcl.random.setDefaultParanoia(this.paranoia_level),sjcl.random.startCollectors(),console.warn("Crypto stuff initialized")}};CRYPTO.initEngines(),function(){angular.module("passmanApp",["ngAnimate","ngCookies","ngResource","ngRoute","ngSanitize","ngTouch","templates-main","LocalStorageModule","offClick","ngPasswordMeter","ngclipboard","xeditable","ngTagsInput","angularjs-datetime-picker","ui.sortable","pascalprecht.translate"]).config(function($routeProvider){$routeProvider.when("/",{templateUrl:"views/vaults.html",controller:"VaultCtrl"}).when("/vault/:vault_id",{templateUrl:"views/show_vault.html",controller:"CredentialCtrl"}).when("/vault/:vault_id/new",{templateUrl:"views/edit_credential.html",controller:"CredentialEditCtrl"}).when("/vault/:vault_id/edit/:credential_id",{templateUrl:"views/edit_credential.html",controller:"CredentialEditCtrl"}).when("/vault/:vault_id/:credential_id/share",{templateUrl:"views/share_credential.html",controller:"ShareCtrl"}).when("/vault/:vault_id/:credential_id/revisions",{templateUrl:"views/credential_revisions.html",controller:"RevisionCtrl"}).when("/vault/:vault_id/request-deletion",{templateUrl:"views/vault_req_deletion.html",controller:"RequestDeleteCtrl"}).when("/vault/:vault_id/settings",{templateUrl:"views/settings.html",controller:"SettingsCtrl"}).otherwise({redirectTo:"/"})}).config(["$httpProvider",function($httpProvider){$httpProvider.defaults.headers.common.requesttoken=oc_requesttoken}]).config(function(localStorageServiceProvider){localStorageServiceProvider.setNotify(!0,!0)}).config(function($translateProvider){$translateProvider.useSanitizeValueStrategy("sanitizeParameters"),$translateProvider.useUrlLoader(OC.generateUrl("/apps/passman/api/v2/language")),$translateProvider.preferredLanguage("en")}).run(["$rootScope",function($rootScope){$rootScope.$on("$routeChangeSuccess",function(e,curr,prev){$(".ui-dialog-content").dialog("close")})}]),jQuery(document).ready(function(){var findItemByID=function(id){var credentials,foundItem=!1;return credentials=angular.element("#app-content-wrapper").scope().credentials,angular.forEach(credentials,function(credential){credential.credential_id===id&&(foundItem=credential)}),foundItem};jQuery(document).on("click",".undoDelete",function(){var credential=findItemByID($(this).attr("data-item-id"));angular.element("#app-content-wrapper").scope().recoverCredential(credential),angular.element("#app-content-wrapper").scope().$apply()}),jQuery(document).on("click",".undoRestore",function(){var credential=findItemByID($(this).attr("data-item-id"));angular.element("#app-content-wrapper").scope().deleteCredential(credential),angular.element("#app-content-wrapper").scope().$apply()})})}(),function(){angular.module("passmanApp").filter("as",function($parse){return function(value,context,path){return $parse(path).assign(context,value)}})}(),function(){angular.module("passmanApp").filter("bytes",function(){return function(bytes,precision){if(isNaN(parseFloat(bytes))||!isFinite(bytes))return"-";"undefined"==typeof precision&&(precision=1);var units=["bytes","kB","MB","GB","TB","PB"],number=Math.floor(Math.log(bytes)/Math.log(1024));return(bytes/Math.pow(1024,Math.floor(number))).toFixed(precision)+" "+units[number]}})}(),function(){angular.module("passmanApp").filter("credentialSearch",function(){return function(credentials,filter){var _credentials=[];if(credentials){if(!filter)return credentials;if(""===filter.filterText.trim())return credentials;for(var matchedWithFilter=function(c){for(var f=0;f<filter.fields.length;f++){var field=filter.fields[f],fieldValue="string"==typeof c[field]?c[field]:JSON.stringify(c[field]);if(filter.hasOwnProperty("useRegex")&&filter.useRegex===!0)try{var patt=new RegExp(filter.filterText);if(patt.test(fieldValue))return!0}catch(e){}if(fieldValue.toLowerCase().indexOf(filter.filterText.toLowerCase())>=0)return!0}return!1},ci=0;ci<credentials.length;ci++){var c=credentials[ci];matchedWithFilter(c)&&_credentials.push(c)}return _credentials}return[]}})}(),function(){angular.module("passmanApp").filter("propsFilter",function(){return function(items,props){var out=[];if(angular.isArray(items)){var keys=Object.keys(props);items.forEach(function(item){for(var itemMatches=!1,i=0;i<keys.length;i++){var prop=keys[i],text=props[prop].toLowerCase();if(item[prop].toString().toLowerCase().indexOf(text)!==-1){itemMatches=!0;break}}itemMatches&&out.push(item)})}else out=items;return out}})}(),function(){angular.module("passmanApp").filter("range",function(){return function(val,range){range=parseInt(range);for(var i=0;i<range;i++)val.push(i);return val}})}(),function(){angular.module("passmanApp").filter("tagFilter",function(){return function(credentials,tags){var _credentials=[];if(tags.length>0)for(var ci=0;ci<credentials.length;ci++){for(var c=credentials[ci],matches=0,ct=0;ct<c.tags_raw.length;ct++){var t=c.tags_raw[ct];tags.indexOf(t.text)!==-1&&matches++}matches===tags.length&&_credentials.push(c)}return 0===tags.length&&(_credentials=credentials),_credentials}})}(),function(){angular.module("passmanApp").filter("toHHMMSS",function(){return function(_seconds){var sec_num=parseInt(_seconds,10),hours=Math.floor(sec_num/3600),minutes=Math.floor((sec_num-3600*hours)/60),seconds=sec_num-3600*hours-60*minutes;return hours<10&&(hours="0"+hours),minutes<10&&(minutes="0"+minutes),seconds<10&&(seconds="0"+seconds),hours+":"+minutes+":"+seconds}})}(),function(){angular.module("passmanApp").service("CacheService",["localStorageService","EncryptService",function(localStorageService,EncryptService){return{get:function(name){return EncryptService.decryptString(localStorageService.get(name))},set:function(key,value){value=EncryptService.encryptString(value),localStorageService.set(key,value)}}}])}(),function(){angular.module("passmanApp").service("CredentialService",["$http","EncryptService","VaultService","FileService",function($http,EncryptService,VaultService,FileService){var credential={credential_id:null,guid:null,vault_id:null,label:null,description:null,created:null,changed:null,tags:[],email:null,
icon:{type:!1,content:""},username:null,password:null,url:null,favicon:null,renew_interval:null,expire_time:0,delete_time:0,files:[],custom_fields:[],otp:{},compromised:!1,hidden:!1},_encryptedFields=["description","username","password","files","custom_fields","otp","email","tags","url","compromised"];return{newCredential:function(){return angular.copy(credential)},createCredential:function(credential){for(var _credential=angular.copy(credential),i=0;i<_encryptedFields.length;i++){var field=_encryptedFields[i],fieldValue=angular.copy(credential[field]);_credential[field]=EncryptService.encryptString(JSON.stringify(fieldValue))}_credential.expire_time=new Date(angular.copy(credential.expire_time)).getTime()/1e3;var queryUrl=OC.generateUrl("apps/passman/api/v2/credentials");return $http.post(queryUrl,_credential).then(function(response){return response.data?response.data:response})},getEncryptedFields:function(){return _encryptedFields},updateCredential:function(credential,skipEncryption,key){var _credential=angular.copy(credential);if(!skipEncryption)for(var i=0;i<_encryptedFields.length;i++){var field=_encryptedFields[i],fieldValue=angular.copy(credential[field]);_credential[field]=EncryptService.encryptString(JSON.stringify(fieldValue),key)}_credential.expire_time=new Date(angular.copy(credential.expire_time)).getTime()/1e3;var queryUrl=OC.generateUrl("apps/passman/api/v2/credentials/"+credential.guid);return $http.patch(queryUrl,_credential).then(function(response){return response.data?response.data:response})},getCredential:function(guid){var queryUrl=OC.generateUrl("apps/passman/api/v2/credentials/"+guid);return $http.get(queryUrl).then(function(response){return response.data?response.data:response})},destroyCredential:function(guid){var queryUrl=OC.generateUrl("apps/passman/api/v2/credentials/"+guid);return $http.delete(queryUrl).then(function(response){return response.data?response.data:response})},encryptCredential:function(credential,key){for(var i=0;i<_encryptedFields.length;i++){var field=_encryptedFields[i],fieldValue=angular.copy(credential[field]);credential[field]=EncryptService.encryptString(JSON.stringify(fieldValue),key)}return credential},decryptCredential:function(credential,key){for(var i=0;i<_encryptedFields.length;i++){var field_decrypted_value,field=_encryptedFields[i],fieldValue=angular.copy(credential[field]);try{field_decrypted_value=null!==fieldValue?EncryptService.decryptString(fieldValue,key):null}catch(e){throw e}try{credential[field]=JSON.parse(field_decrypted_value)}catch(e){console.warn("Field"+field+" in "+credential.label+" could not be parsed! Value:"+fieldValue)}}return credential},getSharedKeyFromCredential:function(credential){var key=null;return!credential.hasOwnProperty("acl")&&credential.hasOwnProperty("shared_key")&&credential.shared_key&&(key=EncryptService.decryptString(angular.copy(credential.shared_key))),credential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy(credential.acl.shared_key))),key},getRevisions:function(guid){var queryUrl=OC.generateUrl("apps/passman/api/v2/credentials/"+guid+"/revision");return $http.get(queryUrl).then(function(response){return response.data?response.data:response})},updateRevision:function(revision){var _revision=angular.copy(revision);_revision.credential_data=window.btoa(JSON.stringify(_revision.credential_data));var queryUrl=OC.generateUrl("apps/passman/api/v2/credentials/"+revision.credential_data.guid+"/revision/"+revision.revision_id);return $http.patch(queryUrl,_revision).then(function(response){return response.data?response.data:response})},deleteRevision:function(credential_guid,revision_id){var queryUrl=OC.generateUrl("apps/passman/api/v2/credentials/"+credential_guid+"/revision/"+revision_id);return $http.delete(queryUrl).then(function(response){return response.data?response.data:response})},reencryptCredential:function(credential_guid,old_password,new_password,skipSharingKey){var service=this,progress_datatype=function(current,total,process){this.process=process,this.current=current,this.total=total,this.calculated=current/total*100},promise_credential_update=function(){service.getCredential(credential_guid).then(function(credential){this.parent.plain_credential=service.decryptCredential(credential,this.parent.old_password);var tmp=angular.copy(this.parent.plain_credential);if(tmp.hasOwnProperty("shared_key")&&null!==tmp.shared_key&&!skipSharingKey){var shared_key=EncryptService.decryptString(angular.copy(tmp.shared_key)).trim();tmp.shared_key=EncryptService.encryptString(angular.copy(shared_key),this.parent.new_password),tmp.set_share_key=!0,tmp.skip_revision=!0,this.parent.new_password=shared_key}this.parent.new_credential_cryptogram=service.encryptCredential(tmp,this.parent.new_password),this.call_progress(new progress_datatype(1,2,"credential")),this.parent.new_credential_cryptogram.skip_revision=!0,service.updateCredential(this.parent.new_credential_cryptogram,!0).then(function(){this.call_progress(new progress_datatype(2,2,"credential")),this.call_then({plain_text:this.parent.plain_credential,cryptogram:this.parent.new_credential_cryptogram})}.bind(this))}.bind(this))},promise_files_update=function(){this.total=2*this.parent.plain_credential.files.length,this.current=0;for(var i=0;i<this.parent.plain_credential.files.length;i++){var _file=this.parent.plain_credential.files[i];FileService.getFile(_file).then(function(fileData){fileData.filename=EncryptService.decryptString(fileData.filename,this.parent.old_password),fileData.file_data=EncryptService.decryptString(fileData.file_data,this.parent.old_password),this.current++,this.call_progress(new progress_datatype(this.current,this.total,"files")),FileService.updateFile(fileData,this.parent.new_password).then(function(){this.current++,this.call_progress(new progress_datatype(this.current,this.total,"files")),this.current===this.total&&this.call_then("All files has been updated")}.bind(this))}.bind(this))}0===this.parent.plain_credential.files.length&&(this.call_progress(new progress_datatype(0,0,"files")),this.call_then("No files to update"))},promise_revisions_update=function(){service.getRevisions(this.parent.plain_credential.guid).then(function(revisions){this.total=2*revisions.length,this.upload=0,this.current=0,this.revisions=revisions;var revision_workload=function(){if(0===this.revisions.length)return this.call_progress(new progress_datatype(0,0,"revisions")),void this.call_then("No history to update");var _revision=revisions[this.current];_revision.credential_data=service.decryptCredential(_revision.credential_data,this.parent.old_password),_revision.credential_data=service.encryptCredential(_revision.credential_data,this.parent.new_password),this.current++,this.call_progress(new progress_datatype(this.current+this.upload,this.total,"revisions")),service.updateRevision(_revision).then(function(){this.upload++,this.call_progress(new progress_datatype(this.upload+this.current,this.total,"revisions")),this.current+this.upload===this.total&&this.call_then("History updated")}.bind(this)),this.current!==this.total/2&&setTimeout(revision_workload.bind(this),1)};setTimeout(revision_workload.bind(this),1)}.bind(this))},promise_workload=function(){this.old_password=angular.copy(old_password),this.new_password=angular.copy(new_password),this.promises=0;var master_promise=this,password_data=function(){this.old_password=master_promise.old_password,this.new_password=master_promise.new_password,this.plain_credential=master_promise.plain_credential};this.credential_data={},new C_Promise(promise_credential_update,new password_data).progress(function(data){master_promise.call_progress(data)}).then(function(data){console.warn("End credential update"),master_promise.plain_credential=data.plain_text,master_promise.promises++,master_promise.credential_data=data,new C_Promise(promise_files_update,new password_data).progress(function(data){master_promise.call_progress(data)}).then(function(){console.warn("End files update"),master_promise.promises--,0===master_promise.promises&&master_promise.call_then(master_promise.credential_data)}),master_promise.promises++,new C_Promise(promise_revisions_update,new password_data).progress(function(data){master_promise.call_progress(data)}).then(function(){console.warn("End revisions update"),master_promise.promises--,0===master_promise.promises&&master_promise.call_then(master_promise.credential_data)})})};return new C_Promise(promise_workload)}}}])}(),function(){angular.module("passmanApp").service("EncryptService",["VaultService",function(VaultService){var encryption_config={adata:"",iter:1e3,ks:256,mode:"ccm",ts:64};return{encryptString:function(string,_key){_key||(_key=VaultService.getActiveVault().vaultKey);var rp={},ct=sjcl.encrypt(_key,string,encryption_config,rp);return window.btoa(ct)},decryptString:function(ciphertext,_key){_key||(_key=VaultService.getActiveVault().vaultKey),ciphertext=window.atob(ciphertext);var rp={};try{return sjcl.decrypt(_key,ciphertext,encryption_config,rp)}catch(e){throw e}}}}])}(),function(){angular.module("passmanApp").service("FileService",["$http","EncryptService",function($http,EncryptService){return{uploadFile:function(file,key){var queryUrl=OC.generateUrl("apps/passman/api/v2/file"),_file=angular.copy(file);_file.filename=EncryptService.encryptString(_file.filename,key);var data=EncryptService.encryptString(angular.copy(file.data),key);return _file.data=data,$http.post(queryUrl,_file).then(function(response){return response.data?response.data:response})},deleteFile:function(file){var queryUrl=OC.generateUrl("apps/passman/api/v2/file/"+file.file_id),_file=angular.copy(file);return $http.delete(queryUrl,_file).then(function(response){return response.data?response.data:response})},getFile:function(file){var queryUrl=OC.generateUrl("apps/passman/api/v2/file/"+file.file_id),_file=angular.copy(file);return $http.get(queryUrl,_file).then(function(response){return response.data?"[object Array]"===Object.prototype.toString.call(response.data)?response.data.pop():response.data:response})},updateFile:function(file,key){var queryUrl=OC.generateUrl("apps/passman/api/v2/file/"+file.file_id),_file=angular.copy(file);_file.filename=EncryptService.encryptString(_file.filename,key);var data=EncryptService.encryptString(angular.copy(file.file_data),key);return _file.file_data=data,$http.patch(queryUrl,_file).then(function(response){return response.data?response.data:response})},dataURItoBlob:function(dataURI,ftype){var byteString,ab,ia,bb,i;for(byteString=atob(dataURI.split(",")[1]),ab=new ArrayBuffer(byteString.length),ia=new Uint8Array(ab),i=0;i<byteString.length;i++)ia[i]=byteString.charCodeAt(i);return bb=new Blob([ab],{type:ftype}),URL.createObjectURL(bb)}}}])}(),function(){angular.module("passmanApp").service("IconService",["$http",function($http){return{getIcons:function(){var queryUrl=OC.generateUrl("apps/passman/api/v2/icon/list");return $http.get(queryUrl).then(function(response){return response.data?response.data:response})}}}])}(),function(){angular.module("passmanApp").service("NotificationService",["$timeout",function($timeout){var to;return{showNotification:function(text,time,closeCallback){var notification=OC.Notification.showHtml(text);return to=$timeout(function(){OC.Notification.hide(notification,closeCallback)},time),notification},hideNotification:function(notification){$timeout.cancel(to),OC.Notification.hide(notification)},hideAll:function(){OC.Notification.hide()}}}])}(),function(){angular.module("passmanApp").service("SearchboxexpanderService",["SettingsService","$translate",function(SettingsService,$translate){function getSearchFieldArraySettings(){var res=SettingsService.getSetting("searchbox_settings");searchfields="undefined"!=typeof res&&null!==res&&""!==res?JSON.parse(res):defaults}function getSearchFieldArrayForFiltering(){var fields=[];for(var key in searchfields)searchfields[key]&&fields.push(key);return fields}function buildDefaultFix(rootScope,scope){null!==native_search&&(native_search.nextElementSibling.addEventListener("click",function(e){scope.$apply(function(){rootScope.$broadcast("nc_searchbox","")})}),native_search.classList.remove("hidden"),native_search.addEventListener("keypress",function(e){13===e.keyCode&&e.preventDefault()}),native_search.addEventListener("keyup",function(e){scope.$apply(function(){rootScope.$broadcast("nc_searchbox",native_search.value,getSearchFieldArrayForFiltering())})}))}function buildCog(){if(null!==native_search){var parent=document.createElement("div");parent.classList.add("notifications"),parent.id="searchbox-settings",parent.classList.add("hidden");var node=document.createElement("div");node.classList.add("icon-settings-white"),node.classList.add("searchbox-settings"),node.id="searchbox-settings-icon",parent.appendChild(node),native_search.after(parent)}}function addListenerToCog(){null!==native_search&&($("#searchbox").on("focus",function(evt){$("#searchbox-settings").removeClass("hidden")}),$("#searchbox").on("blur",function(evt){native_search.value||setTimeout(function(){$("#searchbox-settings").addClass("hidden")},150)}))}function openPopup(){null!==native_search&&(buildPopup(title,defaults_button),$(function(){$("#dialog-searchboxsettings").dialog({width:280,height:280,dialogClass:"custom-search-dialog",close:function(){$(this).dialog("destroy")}}).removeClass("ui-corner-all")}))}function buildPopup(title){$("#dialog-searchboxsettings").length&&$("#dialog-searchboxsettings").remove();var dialogdiv=document.createElement("div");dialogdiv.id="dialog-searchboxsettings",dialogdiv.title=title,dialogdiv.classList.add("hidden"),native_search.after(dialogdiv),getSearchFieldArraySettings();for(var key in searchfields){var div_inner=document.createElement("div");div_inner.id=key+"_div";var input=document.createElement("input");input.id=key+"_input",input.classList.add("searchbox_settings_input"),input.setAttribute("key",key),input.type="checkbox",searchfields[key]&&(input.checked="true"),input.innerText=key;var label=document.createElement("label");label.classList.add("searchbox_settings_label"),label.innerHTML=translations[key],label.setAttribute("key",key),div_inner.appendChild(input),div_inner.appendChild(label),dialogdiv.appendChild(div_inner)}attachListener()}function attachListener(){$(".searchbox_settings_input").on("change",function(evt){var key=$(this).attr("key");searchfields[key]=$("#"+key+"_input").prop("checked");var string=JSON.stringify(searchfields);SettingsService.setSetting("searchbox_settings",string)}),$(".searchbox_settings_label").on("click",function(evt){})}var defaults={label:!0,username:!0,email:!0,custom_fields:!0,password:!1,description:!1,url:!1},searchfields={label:!0,username:!0,email:!0,custom_fields:!0,password:!1,description:!1,url:!1},native_search=document.getElementById("searchbox"),title="Loading...",defaults_button="Loading...",translations={};return $translate.onReady(function(){for(var key in defaults)translations[key]=$translate.instant("search.settings.input."+key);title=$translate.instant("search.settings.title"),defaults_button=$translate.instant("search.settings.defaults_button")}),{expandSearch:function($rootScope,$scope,translation){getSearchFieldArraySettings(),buildDefaultFix($rootScope,$scope),buildCog(),addListenerToCog(),$("#searchbox-settings-icon").on("click",function(evt){openPopup()})}}}])}(),function(){angular.module("passmanApp").service("SettingsService",["localStorageService","$http","$rootScope",function(localStorageService,$http,$rootScope){var settings={defaultVault:null,defaultVaultPass:null};$http.get(OC.generateUrl("apps/passman/api/v2/settings")).then(function(response){response.data&&(settings=angular.merge(settings,response.data),$rootScope.$broadcast("settings_loaded"))});var cookie=localStorageService.get("settings");return settings=angular.merge(settings,cookie),{getSettings:function(){return settings},getSetting:function(name){return settings[name]},setSetting:function(name,value){settings[name]=value,localStorageService.set("settings",settings)},isEnabled:function(name){return 1===settings[name]||"1"===settings[name]}}}])}(),function(){angular.module("passmanApp").service("ShareService",["$http","VaultService","EncryptService","CredentialService",function($http,VaultService,EncryptService,CredentialService){var paranoia_level=10;return sjcl.random.setDefaultParanoia(paranoia_level),sjcl.random.startCollectors(),{search:function(string){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/search");return $http.post(queryUrl,{search:string}).then(function(response){return response.data?response.data:response})},shareWithUser:function(credential,target_user_data){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/share");return $http.post(queryUrl,{item_id:credential.credential_id,item_guid:credential.guid,permissions:target_user_data.accessLevel,vaults:target_user_data.vaults})},getVaultsByUser:function(userId){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/vaults/"+userId);return $http.get(queryUrl,{search:userId}).then(function(response){if(response.data){for(var i=0;i<response.data.length;i++)response.data[i].public_sharing_key=forge.pki.publicKeyFromPem(response.data[i].public_sharing_key);return response.data}return response})},getPendingRequests:function(){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/pending");return $http.get(queryUrl).then(function(response){if(response.data)return response.data})},saveSharingRequest:function(request,crypted_shared_key){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/save");return $http.post(queryUrl,{item_guid:request.item_guid,target_vault_guid:request.target_vault_guid,final_shared_key:crypted_shared_key}).then(function(response){return response.data})},declineSharingRequest:function(request){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/decline/"+request.req_id);return $http.delete(queryUrl).then(function(response){return response.data})},unshareCredential:function(credential){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/credential/"+credential.guid);return $http.delete(queryUrl).then(function(response){return response.data})},unshareCredentialFromUser:function(credential,user_id){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/credential/"+credential.guid+"/"+user_id);return $http.delete(queryUrl).then(function(response){return response.data})},createPublicSharedCredential:function(shareObj){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/public");return $http.post(queryUrl,shareObj).then(function(response){return response.data})},getPublicSharedCredential:function(credential_guid){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/credential/"+credential_guid+"/public");return $http.get(queryUrl).then(function(response){return response.data?response:response},function(result){return result})},getSharedCredentialACL:function(credential){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/credential/"+credential.guid+"/acl");return $http.get(queryUrl).then(function(response){return response.data?response.data:response},function(result){return result})},updateCredentialAcl:function(credential,acl){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/credential/"+credential.guid+"/acl");return $http.patch(queryUrl,acl).then(function(response){return response.data})},getCredendialsSharedWithUs:function(vault_guid){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/vault/"+vault_guid+"/get");return $http.get(queryUrl).then(function(response){if(response.data)return response.data})},downloadSharedFile:function(credential,file){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/credential/"+credential.guid+"/file/"+file.guid);return $http.get(queryUrl).then(function(response){if(response.data)return response.data})},encryptSharedCredential:function(credential,sharedKey){var _credential=angular.copy(credential);_credential.shared_key=EncryptService.encryptString(sharedKey);for(var encrypted_fields=CredentialService.getEncryptedFields(),i=0;i<encrypted_fields.length;i++){var field=encrypted_fields[i],fieldValue=angular.copy(credential[field]);_credential[field]=EncryptService.encryptString(JSON.stringify(fieldValue),sharedKey)}return _credential},decryptSharedCredential:function(credential,sharedKey){for(var _credential=angular.copy(credential),encrypted_fields=CredentialService.getEncryptedFields(),i=0;i<encrypted_fields.length;i++){var field_decrypted_value,field=encrypted_fields[i],fieldValue=angular.copy(_credential[field]);if(_credential.hasOwnProperty(field)){try{field_decrypted_value=EncryptService.decryptString(fieldValue,sharedKey)}catch(e){if("compromised"!==field||null!==fieldValue)throw e;field_decrypted_value=0}try{_credential[field]=JSON.parse(field_decrypted_value)}catch(e){throw console.warn("Field"+field+" in "+_credential.label+" could not be parsed! Value:"+fieldValue),e}}}return _credential},generateRSAKeys:function(key_length){var p=new C_Promise(function(){var state=forge.pki.rsa.createKeyPairGenerationState(key_length,65537),step=function(){forge.pki.rsa.stepKeyPairGenerationState(state,100)?this.call_then(state.keys):(null!==state.p?this.call_progress(50):this.call_progress(0),setTimeout(step.bind(this),1))};setTimeout(step.bind(this),100)});return p},generateSharedKey:function(size){return size=size||20,new C_Promise(function(){var t=this;CRYPTO.PASSWORD.generate(size,function(pass){t.call_then(pass)},function(progress){t.call_progress(progress)})})},rsaKeyPairToPEM:function(keypair){return{publicKey:forge.pki.publicKeyToPem(keypair.publicKey),privateKey:forge.pki.privateKeyToPem(keypair.privateKey)}},getSharingKeys:function(){var vault=VaultService.getActiveVault();return{private_sharing_key:EncryptService.decryptString(angular.copy(vault.private_sharing_key)),public_sharing_key:vault.public_sharing_key}},rsaPrivateKeyFromPEM:function(private_pem){return forge.pki.privateKeyFromPem(private_pem)},rsaPublicKeyFromPEM:function(public_pem){return forge.pki.publicKeyFromPem(public_pem)},cypherRSAStringWithPublicKeyBulkAsync:function(vaults,string){var workload=function(){if(this.current_index<this.vaults.length>0&&this.vaults.length>0){var _vault=angular.copy(this.vaults[this.current_index]);_vault.key=forge.util.encode64(_vault.public_sharing_key.encrypt(this.string)),this.data.push(_vault),this.current_index++,this.call_progress(this.current_index),setTimeout(workload.bind(this),1)}else this.call_then(this.data)};return new C_Promise(function(){this.data=[],this.vaults=vaults,this.string=string,this.current_index=0,setTimeout(workload.bind(this),0)})}}}])}(),function(){angular.module("passmanApp").service("TagService",["$filter",function($filter){var _tags=[];return{getTags:function(){return _tags},searchTag:function(string){return $filter("filter")(_tags,{text:string})},addTags:function(tags){for(var i=0;i<tags.length;i++)tags[i].text&&0===$filter("filter")(_tags,{text:tags[i].text}).length&&_tags.push(tags[i])},resetTags:function(){_tags=[]}}}])}(),function(){angular.module("passmanApp").service("VaultService",["$http",function($http){var _activeVault,service={getVaults:function(){var queryUrl=OC.generateUrl("apps/passman/api/v2/vaults");return $http.get(queryUrl).then(function(response){return response.data?response.data:response})},setActiveVault:function(vault){_activeVault=angular.copy(vault)},getActiveVault:function(){return _activeVault},getVaultSetting:function(key,default_value){return _activeVault.vault_settings&&void 0!==_activeVault.vault_settings[key]?_activeVault.vault_settings[key]:default_value},setVaultSetting:function(key,value){return!!_activeVault.vault_settings&&(_activeVault.vault_settings[key]=value,void this.updateVault(_activeVault))},createVault:function(vaultName){var queryUrl=OC.generateUrl("apps/passman/api/v2/vaults");return $http.post(queryUrl,{vault_name:vaultName}).then(function(response){return response.data?response.data:response})},getVault:function(vault){var queryUrl=OC.generateUrl("apps/passman/api/v2/vaults/"+vault.guid);return $http.get(queryUrl).then(function(response){return response.data?(response.data.vault_settings?response.data.vault_settings=JSON.parse(window.atob(response.data.vault_settings)):response.data.vault_settings={},response.data):response})},updateVault:function(vault){var _vault=angular.copy(vault);delete _vault.defaultVaultPass,delete _vault.defaultVault,delete _vault.vaultKey,_vault.vault_settings=window.btoa(JSON.stringify(_vault.vault_settings));var queryUrl=OC.generateUrl("apps/passman/api/v2/vaults/"+_vault.guid);return $http.patch(queryUrl,_vault).then(function(response){return response.data?response.data:response})},updateSharingKeys:function(vault){var _vault=angular.copy(vault);delete _vault.vaultKey;var queryUrl=OC.generateUrl("apps/passman/api/v2/vaults/"+_vault.guid+"/sharing-keys");return $http.post(queryUrl,_vault).then(function(response){return response.data?response.data:response})},deleteVault:function(vault){var queryUrl=OC.generateUrl("apps/passman/api/v2/vaults/"+vault.guid);return $http.delete(queryUrl).then(function(response){return response.data?response.data:response})},clearVaultService:function(){_activeVault=null}};return service}])}(),function(){angular.module("passmanApp").factory("SharingACL",function(){function ACL(acl_permission){this.permission=acl_permission}return ACL.prototype.permissions={READ:1,WRITE:2,FILES:4,HISTORY:8,OWNER:128},ACL.prototype.hasPermission=function(permission){return permission===(this.permission&permission)},ACL.prototype.addPermission=function(permission){this.permission=this.permission|permission},ACL.prototype.removePermission=function(permission){this.permission=this.permission&~permission},ACL.prototype.togglePermission=function(permission){this.permission^=permission},ACL.prototype.getAccessLevel=function(){return this.permission},ACL})}(),function(){angular.module("passmanApp").directive("autoScroll",function(){return{restrict:"A",scope:{autoScroll:"="},link:function(scope,el){scope.$watch("autoScroll",function(){$(el).scrollTop($(el)[0].scrollHeight)},!0)}}})}(),function(){angular.module("passmanApp").directive("clearBtn",["$parse",function($parse){return{link:function(scope,elm,attr){elm.wrap("<div style='position: relative'></div>");var btn="<span id="+Math.round(1e9*Math.random())+' class="searchclear ng-hide fa fa-times-circle-o"></span>',angularBtn=angular.element(btn);elm.after(angularBtn),angularBtn.on("click",function(){elm.val("").trigger("change"),$parse(attr.ngModel).assign(scope,""),scope.$apply()}),elm.bind("focus keyup change paste propertychange",function(){elm.val()&&elm.val().length>0?angularBtn.removeClass("ng-hide"):angularBtn.addClass("ng-hide")})}}}])}(),function(){angular.module("passmanApp").directive("clickDisable",function(){return function(scope,element){element.bind("click",function(){element.prepend('<i class="fa fa-spin fa-spinner"></i>&nbsp;'),element.attr("disabled","disabled")})}})}(),function(){angular.module("passmanApp").directive("selectOnClick",["$window",function($window){return{restrict:"A",link:function(scope,element){element.on("click",function(){$window.getSelection().toString()||this.setSelectionRange(0,this.value.length)})}}}])}(),function(){angular.module("passmanApp").directive("colorFromString",[function(){return{restrict:"A",scope:{string:"=colorFromString"},link:function(scope,el){function genColor(str){for(var hash=0,i=0;i<str.length;i++)hash=str.charCodeAt(i)+((hash<<5)-hash);var c=(16777215&hash).toString(16).toUpperCase();return"#"+"00000".substring(0,6-c.length)+c}scope.$watch("string",function(){jQuery(el).css("border-color",genColor(scope.string))})}}}])}(),function(){angular.module("passmanApp").directive("credentialCounter",[function(){return{template:'<div ng-show="counter" translate="number.filtered" translate-values="{number_filtered: counter, credential_number: total}"></div>',replace:!1,restrict:"A",scope:{filteredCredentials:"=credentialCounter",deleteTime:"=",vault:"=",filters:"="},link:function(scope){function countCredentials(){var countedCredentials=0,total=0;scope.vault&&scope.vault.hasOwnProperty("credentials")&&(angular.forEach(scope.vault.credentials,function(credential){var pos=scope.filteredCredentials.map(function(c){return c.guid}).indexOf(credential.guid);0===scope.deleteTime&&0===credential.hidden&&0===credential.delete_time&&(total+=1,countedCredentials=pos!==-1?countedCredentials+1:countedCredentials),scope.deleteTime>0&&0===credential.hidden&&credential.delete_time>0&&(total+=1,countedCredentials=pos!==-1?countedCredentials+1:countedCredentials)}),scope.counter=countedCredentials,scope.total=total)}scope.$watch("[filteredCredentials, deleteTime, filters]",function(){countCredentials()},!0)}}}])}(),function(){angular.module("passmanApp").directive("credentialField",["$timeout","$translate",function($timeout,$translate){return{scope:{value:"=value",secret:"=secret",inputField:"=useInput",inputFieldplaceholder:"=inputPlaceholder",isURLFIELD:"=url"},restrict:"A",replace:"true",template:'<span class="credential_field"><div class="value" ng-class="{\'ellipsis\': isLink}"><span ng-if="secret"><span ng-repeat="n in [] | range:value.length" ng-if="!valueVisible">*</span></span><span ng-if="valueVisible && !inputField" ng-bind-html="value"></span><span ng-if="valueVisible && inputField"><input type="text" ng-model="value" select-on-click placeholder="{{ inputFieldplaceholder }}!"</span></div><div class="tools"><div class="cell" ng-if="toggle" tooltip="tggltxt" ng-click="toggleVisibility()"><i class="fa" ng-class="{\'fa-eye\': !valueVisible, \'fa-eye-slash\': valueVisible }"></i></div><div class="cell" ng-if="isURLFIELD && isLink"><a ng-href="{{value}}" target="_blank" rel="nofollow noopener noreferrer"><i tooltip="\'Open in new window\'" class="link fa fa-external-link"></i></a></div><div class="cell" ng-if="isURLFIELD && isPartialLink"><a ng-href="//{{value}}" target="_blank" rel="nofollow noopener noreferrer"><i tooltip="\'Open in new window\'" class="link fa fa-external-link"></i></a></div><div class="cell" ngclipboard-success="onSuccess(e);" ngclipboard-error="onError(e);" ngclipboard data-clipboard-text="{{value}}"><i tooltip="copy_msg" class="fa fa-files-o"></i></div></div></span>',link:function(scope){var expression=/(https?:\/\/(?:www\.|(?!www))[^\s\.]+\.[^\s]{2,}|www\.[^\s]+\.[^\s]{2,})/i,regex=new RegExp(expression);$translate(["toggle.visibility","copy.field","copy","copied"]).then(function(translations){scope.tggltxt=translations["toggle.visibility"],scope.copy_msg=translations["copy.field"]}),scope.$watch("value",function(){scope.value&&(scope.secret&&(scope.valueVisible=!1),regex.test(scope.value)?(scope.isLink=!0,scope.isPartialLink=!1):(scope.isLink=!1,regex.test("https://"+scope.value)&&(scope.isPartialLink=!0)))}),scope.toggle||scope.secret&&(scope.toggle=!0);var timer;scope.onSuccess=function(){scope.copy_msg=$translate.instant("copied"),$timeout.cancel(timer),timer=$timeout(function(){scope.copy_msg=$translate.instant("copy")},5e3)},scope.valueVisible=!0,scope.toggleVisibility=function(){scope.valueVisible=!scope.valueVisible}}}}])}(),function(){angular.module("passmanApp").directive("credentialTemplate",["EncryptService","$translate","FileService","ShareService","NotificationService","CredentialService",function(EncryptService,$translate,FileService,ShareService,NotificationService,CredentialService){return{templateUrl:"views/partials/credential_template.html",replace:!0,restrict:"A",scope:{credential:"=credentialTemplate"},link:function(scope,element,attrs){scope.downloadFile=function(credential,file){var callback=function(result){var key=CredentialService.getSharedKeyFromCredential(credential);if(!result.hasOwnProperty("file_data"))return void NotificationService.showNotification($translate.instant("error.loading.file.perm"),5e3);var file_data=EncryptService.decryptString(result.file_data,key);
-download(file_data,escapeHTML(file.filename),file.mimetype)};credential.hasOwnProperty("acl")?ShareService.downloadSharedFile(credential,file).then(callback):FileService.getFile(file).then(callback)},scope.showLabel=attrs.hasOwnProperty("showLabel")}}}])}(),function(){angular.module("passmanApp").directive("fileSelect",["$window",function($window){return{restrict:"A",scope:{success:"&success",error:"&error",progress:"&progress"},link:function(scope,el){scope.success=scope.success(),scope.error=scope.error(),scope.progress=scope.progress();var _currentFile,fileReader=new $window.FileReader;fileReader.onload=function(){_currentFile.data=fileReader.result,scope.success(_currentFile)},fileReader.onprogress=function(event){var percent=event.loaded/event.total*100;scope.progress&&scope.$apply(scope.progress({file_total:event.total,file_loaded:event.loaded,file_percent:percent}))},fileReader.onerror=function(){scope.error()},el.bind("change",function(e){var i,_queueTotalFileSize=0;for(i=0;i<e.target.files.length;i++)_queueTotalFileSize+=e.target.files[i].size;for(i=0;i<e.target.files.length;i++){_currentFile=e.target.files[i];var mb_limit=5;_currentFile.size>1024*mb_limit*1024&&scope.error("TO_BIG",_currentFile),fileReader.readAsDataURL(_currentFile)}})}}}])}(),function(){angular.module("passmanApp").directive("credentialIcon",["$window",function($window){return{template:'<img ng-src="{{ iconUrl }}" class="icon-image">',restrict:"E",scope:{credential:"="},link:function(scope,element){scope.credential&&scope.$watch("credential",function(){if(scope.credential.icon&&scope.credential.icon.type)scope.iconUrl="data:image/"+scope.credential.icon.type+";base64,"+scope.credential.icon.content;else if(scope.credential.url){var url=window.btoa(angular.copy(scope.credential.url)).replace("/","_");scope.iconUrl=OC.generateUrl("apps/passman/api/v2/icon/")+url+"/"+scope.credential.credential_id}},!0)}}}])}(),function(){angular.module("passmanApp").directive("iconPicker",["$window","IconService","$http","NotificationService","$translate",function($window,IconService,$http,NotificationService,$translate){return{templateUrl:"views/partials/icon-picker.html",restrict:"A",scope:{credential:"=iconPicker"},link:function(scope,element){IconService.getIcons().then(function(icons){scope.iconGroupsAll=icons,scope.iconGroups=icons}),scope.selectIcon=function(icon){scope.selectedIcon=icon},scope.jumpToGroup=function(groupName){var offset=$("#"+groupName).position();$(".iconList").scrollTop(offset.top)};var search=document.getElementById("iconPicker-Search");search.addEventListener("keypress",function(e){13===e.keyCode&&e.preventDefault()}),search.addEventListener("keyup",function(e){var g={};g.Numix=[],scope.iconGroupsAll.Numix.forEach(function(element){scope.isAllowedIcon(element)&&g.Numix.push(element)}),g["essential-collection"]=[],scope.iconGroupsAll["essential-collection"].forEach(function(element){scope.isAllowedIcon(element)&&g["essential-collection"].push(element)}),g["font-awesome"]=[],scope.iconGroupsAll["font-awesome"].forEach(function(element){scope.isAllowedIcon(element)&&g["font-awesome"].push(element)}),scope.iconGroups=g,scope.$apply()}),scope.isAllowedIcon=function(IconElement){var searchval=search.value.toLowerCase(),urlCropped=IconElement.url.substring(IconElement.url.lastIndexOf("/")+1,IconElement.url.length);return!(!urlCropped.includes(searchval)&&IconElement.pack.toLowerCase()!==searchval)},$("#iconPicker-CustomIcon").on("change",function(ev){scope.customIcon={};var f=ev.target.files[0],fr=new FileReader;fr.onload=function(ev2){scope.customIcon.data=ev2.target.result,scope.$apply()},fr.readAsDataURL(f)}),scope.deleteIcon=function(){delete scope.credential.icon.type,delete scope.credential.icon.content,delete scope.credential.icon,$("#iconPicker").dialog("close")},scope.refreshUrlIcon=function(){NotificationService.showNotification($translate.instant("use.icon.refresh.trying"),5e3);var queryUrl=OC.generateUrl("apps/passman/api/v2/geticon/"+btoa(scope.credential.url));$http.get(queryUrl).then(function(response){"undefined"!=typeof response.data.content?(scope.customIcon={},scope.customIcon.data="data:image/"+response.data.type+";base64,"+response.data.content):NotificationService.showNotification($translate.instant("use.icon.refresh.error"),5e3)})},scope.useIcon=function(){if(scope.customIcon){var data=scope.customIcon.data;scope.credential.icon.type=data.substring(data.lastIndexOf(":")+1,data.lastIndexOf(";")),scope.credential.icon.content=data.substring(data.lastIndexOf(",")+1,data.length)}else $http.get(scope.selectedIcon.url).then(function(result){var base64Data=window.btoa(result.data),mimeType="svg+xml";scope.credential.icon||(scope.credential.icon={}),scope.credential.icon.type=mimeType,scope.credential.icon.content=base64Data});$("#iconPicker").dialog("close")},$(element).click(function(){$("#iconPicker").dialog({width:800,height:380,modal:!0,dialogClass:"iconpicker-dialog",close:function(){$(this).dialog("destroy")}})})}}}])}(),function(){angular.module("passmanApp").directive("ngEnter",function(){return function(scope,element,attrs){element.bind("keydown keypress",function(event){13===event.which&&(scope.$apply(function(){scope.$eval(attrs.ngEnter)}),event.preventDefault())})}})}(),function(){angular.module("passmanApp").directive("otpGenerator",["$compile","$timeout",function($compile,$timeout){function dec2hex(s){return(s<15.5?"0":"")+Math.round(s).toString(16)}function hex2dec(s){return parseInt(s,16)}function base32tohex(base32){if(base32){var i,base32chars="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bits="",hex="";for(i=0;i<base32.length;i++){var val=base32chars.indexOf(base32.charAt(i).toUpperCase());bits+=leftpad(val.toString(2),5,"0")}for(i=0;i+4<=bits.length;i+=4){var chunk=bits.substr(i,4);hex+=parseInt(chunk,2).toString(16)}return hex.length%2?hex+"0":hex}}function leftpad(str,len,pad){return len+1>=str.length&&(str=Array(len+1-str.length).join(pad)+str),str}return{restrict:"A",template:'<span class="otp_generator"><span credential-field value="otp" secret="\'true\'"></span> <span ng-bind="timeleft"></span></span>',transclude:!1,scope:{secret:"="},replace:!0,link:function(scope){scope.otp=null,scope.timeleft=null,scope.timer=null;var updateOtp=function(){if(scope.secret){var key=base32tohex(scope.secret),epoch=Math.round((new Date).getTime()/1e3),time=leftpad(dec2hex(Math.floor(epoch/30)),16,"0"),hmacObj=new jsSHA(time,"HEX"),hmac=hmacObj.getHMAC(key,"HEX","SHA-1","HEX"),offset=hex2dec(hmac.substring(hmac.length-1)),otp=(hex2dec(hmac.substr(2*offset,8))&hex2dec("7fffffff"))+"";otp=otp.substr(otp.length-6,6),scope.otp=otp}},timer=function(){var epoch=Math.round((new Date).getTime()/1e3),countDown=30-epoch%30;epoch%30===0&&updateOtp(),scope.timeleft=countDown,scope.timer=$timeout(timer,1e3)};scope.$watch("secret",function(n){n?($timeout.cancel(scope.timer),updateOtp(),timer()):$timeout.cancel(scope.timer)},!0),scope.$on("$destroy",function(){$timeout.cancel(scope.timer)})}}}])}(),function(){angular.module("passmanApp").directive("passwordGen",function($timeout,$translate){function Arcfour(){this.j=this.i=0,this.S=[]}function ARC4init(r){var t,n,e;for(t=0;256>t;++t)this.S[t]=t;for(t=n=0;256>t;++t)n=n+this.S[t]+r[t%r.length]&255,e=this.S[t],this.S[t]=this.S[n],this.S[n]=e;this.j=this.i=0}function ARC4next(){var r;return this.i=this.i+1&255,this.j=this.j+this.S[this.i]&255,r=this.S[this.i],this.S[this.i]=this.S[this.j],this.S[this.j]=r,this.S[r+this.S[this.i]&255]}function prng_newstate(){return new Arcfour}function generatePassword(r,t,n,e,o,i,p,g){var _,a,s,f,d,h,u,l,c,v,w,y,m;if(void 0===r&&(r=8+get_random(0,1)),r>256&&(r=256,document.getElementById("length").value=256),i>256&&(i=256),void 0===t&&(t=!0),void 0===n&&(n=!0),void 0===e&&(e=!0),void 0===o&&(o=!1),void 0===i&&(i=0),void 0===p&&(p=!1),void 0===g&&(g=!0),_=0,a=0,s=0,g&&(_=a=s=1),f=[],n&&_>0)for(d=0;_>d;d++)f[f.length]="L";if(t&&a>0)for(d=0;a>d;d++)f[f.length]="U";if(e&&i>0)for(d=0;i>d;d++)f[f.length]="D";if(o&&s>0)for(d=0;s>d;d++)f[f.length]="S";for(;f.length<r;)f[f.length]="A";for(f.sort(function(){return 2*get_random(0,1)-1}),h="",u="abcdefghjkmnpqrstuvwxyz",p||(u+="ilo"),n&&(h+=u),l="ABCDEFGHJKMNPQRSTUVWXYZ",p||(l+="ILO"),t&&(h+=l),c="23456789",p||(c+="10"),e&&(h+=c),v="!@#$%^&*",o&&(h+=v),w="",y=0;r>y;y++){switch(f[y]){case"L":m=u;break;case"U":m=l;break;case"D":m=c;break;case"S":m=v;break;case"A":m=h}d=get_random(0,m.length-1),w+=m.charAt(d)}return w}function rng_seed_int(r){rng_pool[rng_pptr++]^=255&r,rng_pool[rng_pptr++]^=r>>8&255,rng_pool[rng_pptr++]^=r>>16&255,rng_pool[rng_pptr++]^=r>>24&255,rng_pptr>=rng_psize&&(rng_pptr-=rng_psize)}function rng_seed_time(){rng_seed_int((new Date).getTime())}function rng_get_byte(){if(null==rng_state){for(rng_seed_time(),rng_state=prng_newstate(),rng_state.init(rng_pool),rng_pptr=0;rng_pptr<rng_pool.length;++rng_pptr)rng_pool[rng_pptr]=0;rng_pptr=0}return rng_state.next()}function rng_get_bytes(r){var t;for(t=0;t<r.length;++t)r[t]=rng_get_byte()}function SecureRandom(){}function get_random(r,t){var n,e,o,i=t-r+1;for(rng_seed_time(),n=[],e=0;4>e;e++)n[e]=0;for(rng_get_bytes(n),o=0,e=0;4>e;e++)o*=256,o+=n[e];return o%=i,o+=r}var rng_psize,rng_state,rng_pool,rng_pptr,t,z,crypt_obj,num,buf,i;if(Arcfour.prototype.init=ARC4init,Arcfour.prototype.next=ARC4next,rng_psize=256,null==rng_pool){if(rng_pool=[],rng_pptr=0,"undefined"!=typeof navigator&&"Netscape"==navigator.appName&&navigator.appVersion<"5"&&"undefined"!=typeof window&&window.crypto)for(z=window.crypto.random(32),t=0;t<z.length;++t)rng_pool[rng_pptr++]=255&z.charCodeAt(t);try{if(crypt_obj=null,"undefined"!=typeof window&&void 0!==window.crypto?crypt_obj=window.crypto:"undefined"!=typeof window&&void 0!==window.msCrypto&&(crypt_obj=window.msCrypto),void 0!==crypt_obj&&"function"==typeof crypt_obj.getRandomValues&&rng_psize>rng_pptr)for(num=Math.floor((rng_psize-rng_pptr)/2)+1,buf=new Uint16Array(num),crypt_obj.getRandomValues(buf),i=0;i<buf.length;i++)t=buf[i],rng_pool[rng_pptr++]=t>>>8,rng_pool[rng_pptr++]=255&t}catch(e){}for(;rng_psize>rng_pptr;)t=Math.floor(65536*sjcl.random.randomWords(1)),rng_pool[rng_pptr++]=t>>>8,rng_pool[rng_pptr++]=255&t;rng_pptr=0,rng_seed_time()}return SecureRandom.prototype.nextBytes=rng_get_bytes,{scope:{model:"=ngModel",length:"@",placeholder:"@",settings:"=settings",callback:"&callback"},restrict:"E",replace:"true",template:'<div class=" pw-gen "><div class="input-group "><input ng-show="!passwordVisible" type="password" ng-disabled="disabled" class="form-control " ng-model="password" placeholder="{{placeholder}}"><input ng-show="passwordVisible" type="text" ng-disabled="disabled" class="form-control " ng-model="password" placeholder="{{placeholder}}"><span class="generate_pw"><div class="cell" tooltip="gen_msg" ng-click="generatePasswordStart()"><i class="fa fa-refresh"></i></div><div class="cell" tooltip="tggltxt" ng-click="toggleVisibility()"><i class="fa" ng-class="{\'fa-eye\': passwordVisible, \'fa-eye-slash\': !passwordVisible }"></i></div><div class="cell" tooltip="\'Copy password to clipboard\'"><i class="fa fa-clipboard" ngclipboard-success="onSuccess(e);" ngclipboard-error="onError(e);" ngclipboard data-clipboard-text="{{password}}"></i></div></button></div></div>',link:function(scope){scope.callback=scope.callback(),scope.$watch("model",function(){scope.password=scope.model}),scope.passwordVisible=!1,scope.toggleVisibility=function(){scope.passwordVisible=!scope.passwordVisible},scope.passwordNotNull=!1,scope.$watch("settings",function(){scope.settings&&!scope.password&&scope.settings.generateOnCreate&&scope.generatePasswordStart()}),$translate(["password.gen","password.copy","copied","toggle.visibility"]).then(function(translations){scope.tggltxt=translations["toggle.visibility"],scope.copy_msg=translations["password.copy"],scope.gen_msg=translations["password.gen"]}),scope.$watch("password",function(){scope.model=scope.password,scope.password_repeat=scope.model}),scope.onSuccess=function(e){OC.Notification.showTemporary($translate.instant("password.copied")),e.clearSelection()},scope.onError=function(){OC.Notification.showTemporary("Press Ctrl+C to copy!")},scope.progressDivShow=!1,scope.generatePasswordStart=function(){scope.progressDivShow=!0,scope.progressValue=0,scope.progressWidth={width:scope.progressValue+"%"},scope.generatePasswordProgress()},scope.generatePasswordProgress=function(){$timeout(function(){scope.progressValue<100?(scope.password=scope._generatePassword(scope.settings),scope.progressValue+=10,scope.progressWidth={width:scope.progressValue+"%"},scope.disabled=!0,scope.generatePasswordProgress()):(scope.disabled=!1,scope.callback&&scope.callback(scope.password))},10)},scope._generatePassword=function(settings){var _settings={length:12,useUppercase:!0,useLowercase:!0,useDigits:!0,useSpecialChars:!0,minimumDigitCount:3,avoidAmbiguousCharacters:!1,requireEveryCharType:!0};settings=angular.merge(_settings,settings);var password=generatePassword(settings.length,settings.useUppercase,settings.useLowercase,settings.useDigits,settings.useSpecialChars,settings.minimumDigitCount,settings.avoidAmbiguousCharacters,settings.requireEveryCharType);return password}}}})}(),function(){angular.module("passmanApp").directive("progressBar",["$translate",function($translate){return{restrict:"A",template:'<div class="progress"><div class="progress-bar" role="progressbar" aria-valuenow="{{progress}}"aria-valuemin="0" aria-valuemax="100" style="width:{{progress}}%;" use-theme><span class="sr-only">{{progress}}% {{completed_text}}</span><span ng-if="index && total" class="progress-label" use-theme type="\'color\'" color="\'true\'">{{index}} / {{total}}</span><span ng-if="!index && !total" class="progress-label" use-theme type="\'color\'" color="\'true\'">{{progress}}%</span></div></div>',scope:{progress:"=progressBar",index:"=index",total:"=total"},link:function(scope){$translate(["complete"]).then(function(translations){scope.completed_text=translations.complete})}}}])}(),function(){angular.module("passmanApp").directive("qrread",["$parse",function($parse){return{scope:!0,link:function(scope,element,attributes){var invoker=$parse(attributes.onRead);scope.imageData=null,qrcode.callback=function(result){invoker(scope,{qrdata:{qrData:result,image:scope.imageData}})},element.bind("change",function(changeEvent){var reader=new FileReader,file=changeEvent.target.files[0];reader.readAsDataURL(file),reader.onload=function(){return function(e){scope.imageData=e.target.result,qrcode.decode(e.target.result)}}(file)})}}}])}(),function(){angular.module("passmanApp").directive("tooltip",[function(){return{restrict:"A",scope:{tooltip:"=tooltip"},link:function(scope,el){scope.$watch("tooltip",function(){scope.tooltip&&(jQuery(el).attr("title",scope.tooltip),jQuery(el).tooltip(),jQuery(el).attr("title",scope.tooltip).tooltip("fixTitle"),jQuery(".tooltip-inner").text(scope.tooltip),jQuery(el).is(":visible"))})}}}])}(),function(){angular.module("passmanApp").directive("useTheme",[function(){function invertColor(hexTripletColor){var color=hexTripletColor;return color=color.substring(1),color=parseInt(color,16),color^=16777215,color=color.toString(16),color=("000000"+color).slice(-6),color="#"+color}return{restrict:"A",scope:{type:"=type",color:"=",negative:"="},link:function(scope,el){var _color=jQuery("#header").css("background-color"),_bg=_color;scope.negative&&(_bg=invertColor(_bg)),scope.type?jQuery(el).css(scope.type,_bg):jQuery(el).css("background-color",_bg),scope.color&&jQuery(el).css("color",invertColor(_color))}}}])}();var PassmanImporter={};!function(window,$,PassmanImporter){PassmanImporter.parseRow_=function(row){row=row.trim();var isQuoted=!1;return'"'===row.charAt(0)&&(row=row.substring(1),isQuoted=!0),'"'===row.charAt(row.length-2)&&(row=row.substring(0,row.length-2),isQuoted=!0),row=isQuoted===!0?row.split('","'):row.split(",")},PassmanImporter.htmlDecode=function(input){var e=document.createElement("div");return e.innerHTML=input,e.childNodes[0].nodeValue},PassmanImporter.toObject_=function(headings,row){for(var result={},i=0,ii=row.length;i<ii;i++)headings[i]?(headings[i]=headings[i].replace(",","_").toLowerCase().replace(" ","_").replace("(","").replace(")","").replace('"',""),result[headings[i]]=row[i]):result[ii]=row[i];return result},PassmanImporter.join_=function(arr,sep){for(var parts=[],i=0,ii=arr.length;i<ii;i++)arr[i]&&parts.push(arr[i]);return parts.join(sep)},PassmanImporter.newCredential=function(){var credential={credential_id:null,guid:null,vault_id:null,label:null,description:null,created:null,changed:null,tags:[],email:null,username:null,password:null,url:null,favicon:null,renew_interval:null,expire_time:0,delete_time:0,files:[],custom_fields:[],otp:{},hidden:!1,compromised:!1};return credential},PassmanImporter.readCsv=function(csv,hasHeadings){hasHeadings=void 0===hasHeadings||hasHeadings;var lines=[];return Papa.parse(csv,{complete:function(results){if(results.data)for(var headings=hasHeadings?results.data[0]:null,start=hasHeadings?1:0,i=start;i<results.data.length;i++){var _row=hasHeadings?PassmanImporter.toObject_(headings,results.data[i]):results.data[i];lines.push(_row)}}}),lines},PassmanImporter.readJson=function(string){return JSON.parse(string)}}(window,$,PassmanImporter),String.prototype.replaceAll=function(search,replacement){var target=this;return target.replace(new RegExp(search,"g"),replacement)},Array.prototype.clean=function(deleteValue){for(var i=0;i<this.length;i++)this[i]===deleteValue&&(this.splice(i,1),i--);return this};var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.clippers={info:{name:"Clipperz.is",id:"clippers",exportSteps:["Go to menu -> Export -> Download HTML + JSON. Fields will be imported as custom fields."]}},PassmanImporter.clippers.readFile=function(file_data){return new C_Promise(function(){var credential_list=[],re=/<textarea>(.*?)<\/textarea>/gi,matches=re.exec(file_data);if(matches){var raw_json=matches[0].substring(10);raw_json=PassmanImporter.htmlDecode(raw_json.slice(0,-11));for(var json_objects=PassmanImporter.readJson(raw_json),i=0;i<json_objects.length;i++){var card=json_objects[i];re=/(\w+)/gi;var tags=card.label.match(re);card.label=card.label.replace(tags.join(" "),"").trim(),tags=tags.map(function(item){return{text:item.replace("","")}});var _credential=PassmanImporter.newCredential();_credential.label=card.label,_credential.description=card.data.notes,_credential.tags=tags;for(var field in card.currentVersion.fields){var field_data=card.currentVersion.fields[field];_credential.custom_fields.push({label:field_data.label,value:field_data.value,secret:field_data.hidden===!0})}_credential.label&&credential_list.push(_credential);var progress={percent:i/json_objects.length*100,loaded:i,total:json_objects.length};this.call_progress(progress)}}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.dashLaneCsv={info:{name:"Dashlane 4 csv",id:"dashLaneCsv",exportSteps:["Create an csv export. Go to File -> export -> Unsecured archive (readable) in CSV format"]}},PassmanImporter.dashLaneCsv.readFile=function(file_data){return new C_Promise(function(){for(var rows=file_data.split("\n"),credential_list=[],i=0;i<rows.length;i++){var row=rows[i],row_data=row.split('","');'"'===row_data[0].charAt(0)&&(row_data[0]=row_data[0].substring(1)),'"'===row_data[row_data.length-1].toString().charAt(row_data[row_data.length-1].length-1)&&(row_data[row_data.length-1]=row_data[row_data.length-1].substring(0,row_data[row_data.length-1].length-1));var _credential=PassmanImporter.newCredential();_credential.label=row_data[0],_credential.username=row_data[2],_credential.password=row_data[row_data.length-2],_credential.url=row_data[0],_credential.description=row_data[row_data.length-1],_credential.label&&credential_list.push(_credential);var progress={percent:i/rows.length*100,loaded:i,total:rows.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){function parseEnpass(fileData){var lastProperty,matches,loginBlocks,property;loginBlocks=fileData.replaceAll("Title :","<~passman~>\nTitle :").split("<~passman~>\n").clean("");for(var regex=/(.*) : (.*)/,results=[],l=0;l<loginBlocks.length;l++){for(var loginBlock=loginBlocks[l],lrow=loginBlock.split("\n"),result={},r=0;r<lrow.length;r++){var row=lrow[r];matches=regex.exec(row),matches?(property=matches[1],result[property]=matches[2]):lastProperty&&(result[lastProperty]+="\n"+row),property&&(lastProperty=property)}results.push(result)}return results}PassmanImporter.EnPassTXT={info:{name:"EnPass text file",id:"EnPassTXT",exportSteps:['Access your Enpass Database. Select "File" > "Export" > "As Text"']}},PassmanImporter.EnPassTXT.readFile=function(file_data){var mapper={Title:"label",Username:"username",Password:"password",Email:"email",Url:"url",Note:"description"},secret_fields=["cvc","pin","security answer"];return new C_Promise(function(){for(var credential_list=[],credentials=parseEnpass(file_data),i=0;i<credentials.length;i++){var enpass_credential=credentials[i],new_credential=PassmanImporter.newCredential();for(var key in enpass_credential)if(enpass_credential.hasOwnProperty(key))if(mapper.hasOwnProperty(key)){var prop=mapper[key];new_credential[prop]=enpass_credential[key]}else if("TOTP"!==key){var isSecret=secret_fields.indexOf(key.toLowerCase())!==-1?1:0;new_credential.custom_fields.push({label:key,value:enpass_credential[key],secret:isSecret})}enpass_credential.hasOwnProperty("TOTP")&&(new_credential.otp.secret=enpass_credential.TOTP);var progress={percent:i/credentials.length*100,loaded:i,total:credentials.length};credential_list.push(new_credential),this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.keepassCsv={info:{name:"KeePass csv",id:"keepassCsv",exportSteps:["If using Keepass V1: Create an csv export with the following options enabled: http://i.imgur.com/CaeTA4d.png","With Keepass V2 or Keepass XC no configuration is needed"]}},PassmanImporter.keepassCsv.readFile=function(file_data){var p=new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=row.account,_credential.username=row.login_name,_credential.password=row.password,_credential.url=row.web_site,row.hasOwnProperty("expires")&&(row.expires=row.expires.replace('"',""),_credential.expire_time=new Date(row.expires).getTime()/1e3);var tags=row.group?[{text:row.group}]:[];if(row.hasOwnProperty("group_tree"))for(var exploded_tree=row.group_tree.split("\\\\"),t=0;t<exploded_tree.length;t++)exploded_tree[t].trim().length>0&&tags.push({text:exploded_tree[t].trim()});_credential.tags=tags,credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)});return p}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.lastpassCsv={info:{name:"LastPass csv",id:"lastpassCsv",exportSteps:["Create an csv export. Go to More options -> Advanced -> Export -> Last Pass CSV File"]}},PassmanImporter.lastpassCsv.readFile=function(file_data){return new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=PassmanImporter.htmlDecode(row.name),_credential.username=row.username,_credential.password=row.password,_credential.url=row.url,_credential.tags=row.grouping?[{text:row.grouping}]:[],_credential.description=row.extra,_credential.label&&"undefined"!==_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){var steps=["Backups for the Passwords app need to be enabled on the Admin panel (they are disabled by default).","On the Passwords App, in the bottom left corner, press Settings",'Press "Download Backup"',"Confirm the export and save the file"];PassmanImporter.passwordsApp={info:{name:"Passwords App csv",id:"passwordsApp",exportSteps:steps}},PassmanImporter.passwordsApp.readFile=function(file_data){var p=new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=row.website+" - "+row.username,_credential.username=row.username,_credential.password=row.password,_credential.url=row.fulladdress,_credential.description=row.notes,credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)});return p}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.padlock={info:{name:"Padlock",id:"padlock",exportSteps:["Create a csv export. Go to Menu -> Settings -> Export Data and copy text into a .csv file"]}},PassmanImporter.padlock.readFile=function(file_data){return new C_Promise(function(){for(var rows=PassmanImporter.readCsv(file_data,!0),credential_list=[],i=0;i<rows.length;i++){var row=rows[i],_credential=PassmanImporter.newCredential(),j=0;for(var k in row)row[k]&&("name"!=k?"username"!=k?"password"!=k?"url"!=k.toLowerCase()?"e-mail"!=k.toLowerCase()&&"email"!=k.toLowerCase()?"description"!=k.toLowerCase()?(_credential.custom_fields[j]={label:k,value:row[k],secret:!0,field_type:"text"},j++):_credential.description=row[k]:_credential.email=row[k]:_credential.url=row[k]:_credential.password=row.password:_credential.username=row.username:_credential.label=row.name);_credential.label&&credential_list.push(_credential);var progress={percent:i/rows.length*100,loaded:i,total:rows.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.passmanJson={info:{name:"Passman JSON",id:"passmanJson",exportSteps:["Export the item in passman as passman json, with all fields enabled"]}},PassmanImporter.passmanJson.readFile=function(file_data){return new C_Promise(function(){for(var parsed_json=PassmanImporter.readJson(file_data),credential_list=[],i=0;i<parsed_json.length;i++){var item=parsed_json[i],_credential=PassmanImporter.newCredential();if(_credential.label=item.label,_credential.username=item.username,_credential.password=item.password,_credential.email=item.email,_credential.url=item.url,_credential.tags=item.tags,_credential.description=item.description,item.hasOwnProperty("customFields")&&item.customFields.length>0)for(var cf=0;cf<item.customFields.length;cf++)_credential.custom_fields.push({label:item.customFields[cf].label,value:item.customFields[cf].value,secret:"1"===item.customFields[cf].clicktoshow});item.hasOwnProperty("otp")&&item.otp&&(_credential.otp={issuer:item.otp.issuer,label:item.otp.label,qr_uri:{image:item.otp.qrCode,qrData:""},secret:item.otp.secret,type:item.otp.type}),_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_json.length*100,loaded:i,total:parsed_json.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.passpackCsv={info:{name:"Passpack csv",id:"passpackCsv",exportSteps:["Go to Tools -> Export. Select Comma Separated Values, All entries then continue."]}},PassmanImporter.passpackCsv.readFile=function(file_data){return new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data,!1),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=row[0],_credential.username=row[1],_credential.password=row[2],_credential.url=row[3];var tags=row[4].split(" ");tags.length>0&&(_credential.tags=tags.map(function(item){if(item)return{text:item}}).filter(function(item){return item})),_credential.description=row[5],_credential.email=row[6],_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.randomData={info:{name:"Random data",id:"randomData",exportSteps:["Create's 50 random credentials for testing purposes."]}},PassmanImporter.randomData.readFile=function(){return new C_Promise(function(){var label,tags=["Social media","Hosting","Forums","Webshops","FTP","SSH","Banking","Applications","Server stuff","mysql","Wifi","Games","Certificate","Serials"],credential_list=[],_this=this,generateCredential=function(max,i,callback){if(jQuery){var url=OC.generateUrl("apps/passman/api/internal/generate_person");$.ajax({url:url,dataType:"json",success:function(data){if(data){var _credential=PassmanImporter.newCredential();label=Math.random()>=.5?data.domain:data.email_d+" - "+data.email_u,_credential.label=label,_credential.username=data.username,_credential.password=data.password,_credential.url=data.url;for(var tag_amount=Math.floor(5*Math.random()),ta=0,_tags=[];ta<tag_amount;){var item=tags[Math.floor(Math.random()*tags.length)];_tags.indexOf(item)===-1&&(_tags.push(item),ta++)}if(_credential.tags=_tags.map(function(item){if(item)return{text:item}}).filter(function(item){return item}),credential_list.push(_credential),i<max){var progress={percent:i/max*100,loaded:i,total:max};_this.call_progress(progress),generateCredential(max,i+1,callback)}else callback(credential_list)}else generateCredential(max,i,callback)}})}};generateCredential(50,1,function(credential_list){_this.call_then(credential_list)})})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.teamPassCsv={info:{name:"TeamPass csv",id:"teamPassCsv",exportSteps:["Go to Tools -> Export. Select Comma Separated Values, All entries then continue."]}},PassmanImporter.teamPassCsv.readFile=function(file_data){return new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data,!1),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=row[1],_credential.description=row[2],_credential.password=row[3],_credential.username=row[4];var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};credential_list.push(_credential),this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};if(function(window,$,PassmanImporter){PassmanImporter.zohoCsv={info:{name:"ZOHO csv",id:"zohoCsv",exportSteps:['Create an csv export. Go to Tools -> Export secrets -> Select "General CSV" and click "Export Secrets"']}},PassmanImporter.zohoCsv.readFile=function(file_data){return new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();if(_credential.label=row.secret_name,
-_credential.url=row.secret_url,_credential.description=row.notes,row.hasOwnProperty("secretdata"))for(var rows=row.secretdata.split("\n"),r=0;r<rows.length;r++){var cells=rows[r].split(":"),key=cells[0],value=cells.slice(1).join(":");key&&value&&_credential.custom_fields.push({label:key,value:value,secret:!1})}""!==_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter),!window.PassmanExporter)var PassmanExporter={getCredentialsWithFiles:function(credentials,FileService,EncryptService){var t={cred:credentials,FS:FileService,ES:EncryptService};return new C_Promise(function(){var _this=this.parent,credentials=_this.cred;this.parent.total=0,this.parent.finished=0,this.parent.fileGUID_cred=[],this.parent.files=[],this.parent.step=function(file){this.parent.finished++,this.call_progress({total:this.parent.total,finished:this.parent.finished});var dta=this.parent.fileGUID_cred[file.guid];file.filename=this.parent.ES.decryptString(file.filename,this.parent.cred[dta.cred_pos].vault_key),file.file_data=this.parent.ES.decryptString(file.file_data,this.parent.cred[dta.cred_pos].vault_key),"files"===dta.on?this.parent.cred[dta.cred_pos][dta.on][dta.at]=file:this.parent.cred[dta.cred_pos][dta.on][dta.at].value=file,this.parent.total===this.parent.finished&&this.call_then(this.parent.cred)}.bind(this);for(var i=0;i<credentials.length;i++){var item=credentials[i];for(c=0;c<item.custom_fields.length;c++){var cf=item.custom_fields[c];"file"===cf.field_type&&(this.parent.total++,this.parent.fileGUID_cred[cf.value.guid]={cred_pos:i,on:"custom_fields",at:c},this.parent.FS.getFile(cf.value).then(function(data){this.parent.step(data)}.bind(this)))}for(var c=0;c<item.files.length;c++)this.parent.total++,this.parent.fileGUID_cred[item.files[c].guid]={cred_pos:i,on:"files",at:c},this.parent.FS.getFile(item.files[c]).then(function(data){this.parent.step(data)}.bind(this))}0===this.parent.total&&this.call_then(this.parent.cred)},t)}};PassmanExporter.csv={info:{name:"CSV",id:"csv",description:"Export credentials as a csv file."}},PassmanExporter.csv.export=function(credentials,FileService,EncryptService){return new C_Promise(function(){PassmanExporter.getCredentialsWithFiles(credentials,FileService,EncryptService).then(function(){for(var headers=["label","username","password","email","description","tags","url","custom_fields","files"],file_data='"'+headers.join('","')+'"\n',i=0;i<credentials.length;i++){for(var _credential=credentials[i],row_data=[],h=0;h<headers.length;h++){var field=headers[h];if("tags"===field){for(var _tags=[],t=0;t<_credential[field].length;t++)_tags.push(_credential[field][t].text);var tag_data="["+_tags.join(",")+"]";row_data.push('"'+tag_data.replaceAll('"','""')+'"')}else if("custom_fields"==field||"files"==field){var _fields=JSON.stringify(_credential[field]);_fields=_fields.replaceAll('"','""'),row_data.push('"'+_fields+'"')}else{var data=_credential[field],value=null===data?"":data.replaceAll('"','""');row_data.push('"'+value+'"')}}var progress={percent:i/credentials.length*100,loaded:i,total:credentials.length};this.call_progress(progress),file_data+=row_data.join(",")+"\n"}this.call_then(),download(file_data,"passman-export.csv","text/csv")}.bind(this)).progress(function(){})})},PassmanExporter.json={info:{name:"JSON",id:"json",description:"Export credentials as a JSON file."}},PassmanExporter.json.export=function(credentials,FileService,EncryptService){return new C_Promise(function(){PassmanExporter.getCredentialsWithFiles(credentials,FileService,EncryptService).then(function(){for(var _output=[],i=0;i<credentials.length;i++){var _credential=angular.copy(credentials[i]);delete _credential.vault_key,delete _credential.vault_id,delete _credential.shared_key,_output.push(_credential);var progress={percent:i/credentials.length*100,loaded:i,total:credentials.length};this.call_progress(progress)}var file_data=JSON.stringify(_output);this.call_then(),download(file_data,"passman-export.json")}.bind(this)).progress(function(){})})},function(){angular.module("passmanApp").controller("BookmarkletCtrl",["$scope","$rootScope","$location","VaultService","CredentialService","SettingsService","NotificationService","EncryptService","TagService","FileService","ShareService","$translate",function($scope,$rootScope,$location,VaultService,CredentialService,SettingsService,NotificationService,EncryptService,TagService,FileService,ShareService,$translate){if($scope.active_vault=!1,$scope.http_warning_hidden=!0,"http"===$location.$$protocol&&($scope.using_http=!0),$scope.logout=function(){$rootScope.override_default_vault=!0,$scope.active_vault=!1},SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));VaultService.getVault(_vault).then(function(vault){vault.vaultKey=angular.copy(SettingsService.getSetting("defaultVaultPass")),VaultService.setActiveVault(vault),$scope.active_vault=vault,$scope.pwSettings=VaultService.getVaultSetting("pwSettings",{length:12,useUppercase:!0,useLowercase:!0,useDigits:!0,useSpecialChars:!0,minimumDigitCount:3,avoidAmbiguousCharacters:!1,requireEveryCharType:!0,generateOnCreate:!0})})}VaultService.getVaults().then(function(vaults){$scope.vaults=vaults}),$scope.default_vault=!1,$scope.remember_vault_password=!1,$scope.list_selected_vault=!1,$scope.toggleDefaultVault=function(){$scope.default_vault=!$scope.default_vault,$scope.default_vault===!0?SettingsService.setSetting("defaultVault",$scope.list_selected_vault):SettingsService.setSetting("defaultVault",null)},$scope.toggleRememberPassword=function(){$scope.remember_vault_password=!$scope.remember_vault_password,$scope.remember_vault_password&&(SettingsService.setSetting("defaultVault",$scope.list_selected_vault),$scope.default_vault=!0),$scope.remember_vault_password!==!0&&SettingsService.setSetting("defaultVault",null)},$scope.clearState=function(){$scope.list_selected_vault=!1,$scope.creating_vault=!1,$scope.error=!1},$scope.selectVault=function(vault){$scope.list_selected_vault=vault},$scope.sharing_keys={},$scope.newVault=function(){$scope.creating_vault=!0;var key_size=1024;ShareService.generateRSAKeys(key_size).progress(function(progress){var p=progress>0?2:1,msg=$translate.instant("generating.sharing.keys");msg=msg.replace("%step",p),$scope.creating_keys=msg,$scope.$digest()}).then(function(kp){var pem=ShareService.rsaKeyPairToPEM(kp);$scope.creating_keys=!1,$scope.sharing_keys.private_sharing_key=pem.privateKey,$scope.sharing_keys.public_sharing_key=pem.publicKey,$scope.$digest()})};var _loginToVault=function(vault,vault_key){var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),delete _vault.credentials,$scope.active_vault=_vault};$scope.vaultDecryptionKey="",$scope.loginToVault=function(vault,vault_key){$scope.error=!1;var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),VaultService.setActiveVault(_vault);try{EncryptService.decryptString(vault.challenge_password),$scope.remember_vault_password&&SettingsService.setSetting("defaultVaultPass",vault_key),_loginToVault(vault,vault_key)}catch(e){$scope.error=$translate.instant("invalid.vault.key")}},$scope.createVault=function(vault_name,vault_key,vault_key2){return vault_key!==vault_key2?void($scope.error=$translate.instant("password.do.not.match")):void VaultService.createVault(vault_name).then(function(vault){$scope.vaults.push(vault);var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),VaultService.setActiveVault(_vault);var test_credential=CredentialService.newCredential();test_credential.label="Test key for vault "+vault_name,test_credential.hidden=!0,test_credential.vault_id=vault.vault_id,test_credential.password="lorum ipsum",CredentialService.createCredential(test_credential).then(function(){_vault.public_sharing_key=angular.copy($scope.sharing_keys.public_sharing_key),_vault.private_sharing_key=EncryptService.encryptString(angular.copy($scope.sharing_keys.private_sharing_key)),VaultService.updateSharingKeys(_vault).then(function(){_loginToVault(vault,vault_key)})})})},$scope.storedCredential=CredentialService.newCredential();var QueryString=function(){for(var query_string={},query=window.location.search.substring(1),vars=query.split("&"),i=0;i<vars.length;i++){var pair=vars[i].split("=");if("undefined"==typeof query_string[pair[0]])query_string[pair[0]]=decodeURIComponent(pair[1]);else if("string"==typeof query_string[pair[0]]){var arr=[query_string[pair[0]],decodeURIComponent(pair[1])];query_string[pair[0]]=arr}else query_string[pair[0]].push(decodeURIComponent(pair[1]))}return query_string}(),query_string=QueryString;$scope.storedCredential.label=query_string.title,$scope.storedCredential.url=query_string.url,$scope.setHttpWarning=function(state){$scope.http_warning_hidden=state},$translate(["general","password","custom.fields","files","otp"]).then(function(translations){$scope.tabs=[{title:translations.general,url:"views/partials/forms/edit_credential/basics.html",color:"blue"},{title:translations.password,url:"views/partials/forms/edit_credential/password.html",color:"green"},{title:translations["custom.fields"],url:"views/partials/forms/edit_credential/custom_fields.html",color:"orange"},{title:translations.files,url:"views/partials/forms/edit_credential/files.html",color:"yellow"},{title:translations.otp,url:"views/partials/forms/edit_credential/otp.html",color:"purple"}],$scope.currentTab=$scope.tabs[0]}),$scope.getTags=function($query){return TagService.searchTag($query)},$scope.onClickTab=function(tab){$scope.currentTab=tab},$scope.isActiveTab=function(tab){return tab.url===$scope.currentTab.url},$scope.pwGenerated=function(pass){$scope.storedCredential.password_repeat=pass};var _customField={label:"",value:"",secret:!1,field_type:"text"};$scope.selected_field_type="text",$scope.new_custom_field=angular.copy(_customField),$scope.addCustomField=function(){var _field=angular.copy($scope.new_custom_field);if(_field.label||NotificationService.showNotification($translate.instant("error.no.label"),3e3),_field.value||NotificationService.showNotification($translate.instant("error.no.value"),3e3),_field.label&&_field.value)if($scope.selected_field_type="text",_field.secret=angular.copy("password"===$scope.selected_field_type),_field.field_type=angular.copy($scope.selected_field_type),"file"===_field.field_type){var _file=$scope.new_custom_field.value;FileService.uploadFile(_file).then(function(result){delete result.file_data,result.filename=EncryptService.decryptString(result.filename),_field.value=result,$scope.storedCredential.custom_fields.push(_field),$scope.new_custom_field=angular.copy(_customField)})}else $scope.storedCredential.custom_fields.push(_field),$scope.new_custom_field=angular.copy(_customField)},$scope.addFileToCustomField=function(file){var _file={filename:file.name,size:file.size,mimetype:file.type,data:file.data};$scope.new_custom_field.value=_file,$scope.$digest()},$scope.deleteCustomField=function(field){field.hasOwnProperty("field_type")&&"file"===field.field_type&&FileService.deleteFile(field.value);var idx=$scope.storedCredential.custom_fields.indexOf(field);$scope.storedCredential.custom_fields.splice(idx,1)},$scope.new_file={name:"",data:null},$scope.deleteFile=function(file){var idx=$scope.storedCredential.files.indexOf(file);FileService.deleteFile(file).then(function(){$scope.storedCredential.files.splice(idx,1)})},$scope.fileLoaded=function(file){var _file={filename:file.name,size:file.size,mimetype:file.type,data:file.data};FileService.uploadFile(_file).then(function(result){delete result.file_data,result.filename=EncryptService.decryptString(result.filename),$scope.storedCredential.files.push(result)}),$scope.$digest()},$scope.fileLoadError=function(error){return error},$scope.selected_file="",$scope.fileprogress=[],$scope.fileSelectProgress=function(progress){progress&&($scope.fileprogress=progress,$scope.$digest())},$scope.renewIntervalValue=0,$scope.renewIntervalModifier="0",$scope.updateInterval=function(renewIntervalValue,renewIntervalModifier){var value=parseInt(renewIntervalValue),modifier=parseInt(renewIntervalModifier);value&&modifier&&($scope.storedCredential.renew_interval=value*modifier)},$scope.parseQR=function(QRCode){var parsedQR,qrInfo,re=/otpauth:\/\/(totp|hotp)\/(.*)\?(secret|issuer)=(.*)&(issuer|secret)=(.*)/;qrInfo=[],parsedQR=QRCode.qrData.match(re),parsedQR&&(qrInfo={type:parsedQR[1],label:decodeURIComponent(parsedQR[2]),qr_uri:QRCode}),qrInfo[parsedQR[3]]=parsedQR[4],qrInfo[parsedQR[5]]=parsedQR[6],$scope.storedCredential.otp=qrInfo,$scope.$digest()},$scope.saveCredential=function(){delete $scope.storedCredential.password_repeat,$scope.storedCredential.credential_id||($scope.storedCredential.vault_id=$scope.active_vault.vault_id,CredentialService.createCredential($scope.storedCredential).then(function(){NotificationService.showNotification($translate.instant("credential.created"),5e3)}))}}])}(),function(){angular.module("passmanApp").controller("CredentialCtrl",["$scope","VaultService","SettingsService","$location","CredentialService","$rootScope","FileService","EncryptService","TagService","$timeout","NotificationService","CacheService","ShareService","SharingACL","$interval","$filter","$routeParams","$sce","$translate",function($scope,VaultService,SettingsService,$location,CredentialService,$rootScope,FileService,EncryptService,TagService,$timeout,NotificationService,CacheService,ShareService,SharingACL,$interval,$filter,$routeParams,$sce,$translate){if($scope.active_vault=VaultService.getActiveVault(),SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=angular.copy(SettingsService.getSetting("defaultVaultPass")),VaultService.setActiveVault(_vault),$scope.active_vault=_vault}}else $scope.active_vault||$location.path("/");$scope.show_spinner=!0;var fetchCredentials=function(){VaultService.getVault({guid:$routeParams.vault_id}).then(function(vault){var vaultKey=angular.copy($scope.active_vault.vaultKey),_credentials=angular.copy(vault.credentials);vault.credentials=[],$scope.active_vault=vault,$scope.active_vault.vaultKey=vaultKey,$rootScope.vaultCache||($rootScope.vaultCache=[]),VaultService.setActiveVault($scope.active_vault);for(var i=0;i<_credentials.length;i++){var _credential=_credentials[i];try{if(_credential.shared_key){var enc_key=EncryptService.decryptString(_credential.shared_key);_credential=ShareService.decryptSharedCredential(angular.copy(_credential),enc_key)}else _credential=CredentialService.decryptCredential(angular.copy(_credential));_credential.tags_raw=_credential.tags}catch(e){NotificationService.showNotification($translate.instant("error.decrypt"),5e3)}_credentials[i]=_credential}ShareService.getCredendialsSharedWithUs(vault.guid).then(function(shared_credentials){for(var c=0;c<shared_credentials.length;c++){var _shared_credential_data,_shared_credential=shared_credentials[c],decrypted_key=EncryptService.decryptString(_shared_credential.shared_key);try{_shared_credential_data=ShareService.decryptSharedCredential(_shared_credential.credential_data,decrypted_key)}catch(e){}_shared_credential_data&&(delete _shared_credential.credential_data,_shared_credential_data.acl=_shared_credential,_shared_credential_data.acl.permissions=new SharingACL(_shared_credential_data.acl.permissions),_shared_credential_data.tags_raw=_shared_credential_data.tags,_credentials.push(_shared_credential_data))}if(angular.merge($scope.active_vault.credentials,_credentials),$scope.show_spinner=!1,$rootScope.$broadcast("credentials_loaded"),$rootScope.vaultCache[$scope.active_vault.guid]=angular.copy($scope.active_vault),!vault.private_sharing_key){var key_size=1024;ShareService.generateRSAKeys(key_size).then(function(kp){var pem=ShareService.rsaKeyPairToPEM(kp);$scope.creating_keys=!1,$scope.active_vault.private_sharing_key=pem.privateKey,$scope.active_vault.public_sharing_key=pem.publicKey,$scope.$digest(),VaultService.updateSharingKeys($scope.active_vault)})}})})},getPendingShareRequests=function(){ShareService.getPendingRequests().then(function(shareRequests){shareRequests.length>0&&($scope.incoming_share_requests=shareRequests,jQuery(".share_popup").dialog({width:800,modal:!0,dialogClass:"shareincoming-dialog"}))})},refresh_data_interval=null;$scope.active_vault&&($scope.$parent.selectedVault=!0,$rootScope.vaultCache&&$rootScope.vaultCache[$scope.active_vault.guid]?($scope.active_vault=$rootScope.vaultCache[$scope.active_vault.guid],$rootScope.$broadcast("credentials_loaded"),$scope.show_spinner=!1):fetchCredentials(),getPendingShareRequests(),refresh_data_interval=$interval(function(){fetchCredentials(),getPendingShareRequests()},3e5)),$scope.$on("$destroy",function(){$interval.cancel(refresh_data_interval)}),$scope.permissions=new SharingACL(0),$scope.hasPermission=function(acl,permission){if(acl){var tmp=new SharingACL(acl.permission);return tmp.hasPermission(permission)}return!0},$scope.acceptShareRequest=function(share_request){var crypted_shared_key=share_request.shared_key,private_key=EncryptService.decryptString(VaultService.getActiveVault().private_sharing_key);private_key=ShareService.rsaPrivateKeyFromPEM(private_key),crypted_shared_key=private_key.decrypt(forge.util.decode64(crypted_shared_key)),crypted_shared_key=EncryptService.encryptString(crypted_shared_key),ShareService.saveSharingRequest(share_request,crypted_shared_key).then(function(){var idx=$scope.incoming_share_requests.indexOf(share_request);$scope.incoming_share_requests.splice(idx,1);for(var active_share_requests=!1,v=0;v<$scope.incoming_share_requests.length;v++)$scope.incoming_share_requests[v].target_vault_id===$scope.active_vault.vault_id&&(active_share_requests=!0);active_share_requests===!1&&(jQuery(".ui-dialog").remove(),fetchCredentials())})},$scope.declineShareRequest=function(share_request){ShareService.declineSharingRequest(share_request).then(function(){var idx=$scope.incoming_share_requests.indexOf(share_request);$scope.incoming_share_requests.splice(idx,1);for(var active_share_requests=!1,v=0;v<$scope.incoming_share_requests.length;v++)$scope.incoming_share_requests[v].target_vault_id===$scope.active_vault.vault_id&&(active_share_requests=!0);active_share_requests===!1&&(jQuery(".ui-dialog").remove(),fetchCredentials())})};var settingsLoaded=function(){$scope.settings=SettingsService.getSettings()};SettingsService.getSetting("settings_loaded")?settingsLoaded():$rootScope.$on("settings_loaded",function(){settingsLoaded()}),$scope.addCredential=function(){var new_credential=CredentialService.newCredential(),enc_c=CredentialService.encryptCredential(new_credential);SettingsService.setSetting("edit_credential",enc_c),$location.path("/vault/"+$scope.active_vault.guid+"/new")},$scope.editCredential=function(credential){var _credential=angular.copy(credential);$rootScope.$emit("app_menu",!1),SettingsService.setSetting("edit_credential",CredentialService.encryptCredential(_credential)),$location.path("/vault/"+$scope.active_vault.guid+"/edit/"+_credential.guid)},$scope.getRevisions=function(credential){var _credential=angular.copy(credential);$rootScope.$emit("app_menu",!1),SettingsService.setSetting("revision_credential",CredentialService.encryptCredential(_credential)),$location.path("/vault/"+$scope.active_vault.guid+"/"+_credential.guid+"/revisions")},$scope.shareCredential=function(credential){var _credential=angular.copy(credential);$rootScope.$emit("app_menu",!1),SettingsService.setSetting("share_credential",CredentialService.encryptCredential(_credential)),$location.path("/vault/"+$scope.active_vault.guid+"/"+_credential.guid+"/share")};var notification;$scope.deleteCredential=function(credential){var _credential=angular.copy(credential);try{_credential=CredentialService.decryptCredential(_credential)}catch(e){}_credential.delete_time=(new Date).getTime()/1e3;for(var i=0;i<$scope.active_vault.credentials.length;i++)$scope.active_vault.credentials[i].credential_id===credential.credential_id&&($scope.active_vault.credentials[i].delete_time=_credential.delete_time);$scope.closeSelected(),notification&&NotificationService.hideNotification(notification);var key=CredentialService.getSharedKeyFromCredential(_credential);CredentialService.updateCredential(_credential,!1,key).then(function(){notification=NotificationService.showNotification($translate.instant("credential.deleted"),5e3)})},$scope.recoverCredential=function(credential){var _credential=angular.copy(credential);try{_credential=CredentialService.decryptCredential(_credential)}catch(e){}for(var i=0;i<$scope.active_vault.credentials.length;i++)$scope.active_vault.credentials[i].credential_id===credential.credential_id&&($scope.active_vault.credentials[i].delete_time=0);_credential.delete_time=0,$scope.closeSelected(),notification&&NotificationService.hideNotification(notification);var key=CredentialService.getSharedKeyFromCredential(_credential);CredentialService.updateCredential(_credential,!1,key).then(function(){NotificationService.showNotification($translate.instant("credential.recovered"),5e3)})},$scope.destroyCredential=function(credential){var _credential=angular.copy(credential);CredentialService.destroyCredential(_credential.guid).then(function(){for(var i=0;i<$scope.active_vault.credentials.length;i++)if($scope.active_vault.credentials[i].credential_id===credential.credential_id){$scope.active_vault.credentials.splice(i,1),NotificationService.showNotification($translate.instant("credential.destroyed"),5e3);break}})},$scope.view_mode="list",$scope.switchViewMode=function(viewMode){$scope.view_mode=viewMode},$rootScope.$on("push_decrypted_credential_to_list",function(){$rootScope.$broadcast("credentials_loaded")}),$scope.filterOptions={filterText:"",fields:["label","username","email","custom_fields"]},$scope.$on("nc_searchbox",function(event,searchterm,fields){$scope.filterOptions.filterText=searchterm,fields&&($scope.filterOptions.fields=fields)}),$scope.filtered_credentials=[],$scope.$watch("[selectedtags, filterOptions, delete_time, active_vault.credentials]",function(){if($scope.active_vault&&$scope.active_vault.credentials){var credentials=angular.copy($scope.active_vault.credentials),filtered_credentials=$filter("credentialSearch")(credentials,$scope.filterOptions);filtered_credentials=$filter("tagFilter")(filtered_credentials,$scope.selectedtags),filtered_credentials=$filter("filter")(filtered_credentials,{hidden:0}),$scope.filtered_credentials=filtered_credentials,$scope.filterOptions.selectedtags=angular.copy($scope.selectedtags);for(var i=0;i<$scope.active_vault.credentials.length;i++){var _credential=$scope.active_vault.credentials[i];_credential.tags&&TagService.addTags(_credential.tags)}}},!0),$scope.no_credentials_label=[],$scope.no_credentials_label.all=!0,$scope.no_credentials_label.s_good=!1,$scope.no_credentials_label.s_medium=!1,$scope.no_credentials_label.s_low=!1,$scope.no_credentials_label.expired=!1,$scope.disableAllLabels=function(){$scope.no_credentials_label.all=!1,$scope.no_credentials_label.s_good=!1,$scope.no_credentials_label.s_medium=!1,$scope.no_credentials_label.s_low=!1,$scope.no_credentials_label.expired=!1},$scope.$on("filterSpecial",function(event,args){switch($scope.disableAllLabels(),args){case"strength_good":$scope.filterStrength(3,1e3),$scope.no_credentials_label.s_good=!0;break;case"strength_medium":$scope.filterStrength(2,3),$scope.no_credentials_label.s_medium=!0;break;case"strength_low":$scope.filterStrength(0,1),$scope.no_credentials_label.s_low=!0;break;case"expired":$scope.filterExpired(),$scope.no_credentials_label.expired=!0;break;case"all":$scope.filterAll(),$scope.no_credentials_label.all=!0}}),$scope.getListSizes=function(){for(var l=$scope.filtered_credentials,deleted=0,i=0;i<l.length;i++)l[i].delete_time>0&&deleted++;var result=[];return result.listsize=l.length,result.listsize_wout_deleted=l.length-deleted,result.listsize_deleted=deleted,result},$scope.filterAll=function(){$scope.selectedtags=[],$scope.filterOptions.filterText="";for(var creds_filtered=[],i=0;i<$scope.active_vault.credentials.length;i++)0===$scope.active_vault.credentials[i].delete_time&&creds_filtered.push($scope.active_vault.credentials[i]);$scope.filtered_credentials=$scope.filterHidden(creds_filtered)},$scope.filterStrength=function(strength_min,strength_max){for(var initialCredentials=$scope.active_vault.credentials,postFiltered=[],i=0;i<initialCredentials.length;i++){var _credential=initialCredentials[i],zxcvbn_result=zxcvbn(_credential.password);zxcvbn_result.score>=strength_min&&zxcvbn_result.score<=strength_max&&postFiltered.push(initialCredentials[i])}$scope.filtered_credentials=$scope.filterHidden(postFiltered)},$scope.filterExpired=function(){for(var initialCredentials=$scope.active_vault.credentials,now=Date.now(),postFiltered=[],i=0;i<initialCredentials.length;i++){var _credential=initialCredentials[i];0!==_credential.expire_time&&_credential.expire_time<=now&&postFiltered.push(initialCredentials[i])}$scope.filtered_credentials=$scope.filterHidden(postFiltered)},$scope.filterHidden=function(list){for(var list_without_hidden=[],i=0;i<list.length;i++)1!==list[i].hidden&&list_without_hidden.push(list[i]);return list_without_hidden},$scope.selectedtags=[];var to;$rootScope.$on("selected_tags_updated",function(evt,_sTags){for(var _selectedTags=[],x=0;x<_sTags.length;x++)_selectedTags.push(_sTags[x].text);$scope.selectedtags=_selectedTags,$timeout.cancel(to),_selectedTags.length>0&&(to=$timeout(function(){if($scope.filtered_credentials){for(var _filtered_tags=[],i=0;i<$scope.filtered_credentials.length;i++)for(var tags=$scope.filtered_credentials[i].tags_raw,x=0;x<tags.length;x++){var tag=tags[x].text;_filtered_tags.indexOf(tag)===-1&&_filtered_tags.push(tag)}$rootScope.$emit("limit_tags_in_list",_filtered_tags)}},50))}),$scope.delete_time=0,$scope.showCredentialRow=function(credential){return 0===$scope.delete_time?0===credential.delete_time:credential.delete_time>$scope.delete_time},$rootScope.$on("set_delete_time",function(event,time){$scope.delete_time=time}),$scope.setDeleteTime=function(delete_time){$scope.delete_time=delete_time},$scope.selectedCredential=!1,$scope.selectCredential=function(credential){credential.description&&(credential.description_html=$sce.trustAsHtml(angular.copy(credential.description).replace("\n","<br />"))),$scope.selectedCredential=angular.copy(credential),$rootScope.$emit("app_menu",!0)},$scope.closeSelected=function(){$rootScope.$emit("app_menu",!1),$scope.selectedCredential=!1},$rootScope.$on("logout",function(){$scope.active_vault&&($rootScope.vaultCache[$scope.active_vault.guid]=null),$scope.active_vault=null,$scope.credentials=[],VaultService.clearVaultService()}),$scope.clearState=function(){$scope.delete_time=0}}])}(),function(){angular.module("passmanApp").controller("CredentialEditCtrl",["$scope","VaultService","CredentialService","SettingsService","$location","$routeParams","FileService","EncryptService","TagService","NotificationService","ShareService","$translate","$rootScope",function($scope,VaultService,CredentialService,SettingsService,$location,$routeParams,FileService,EncryptService,TagService,NotificationService,ShareService,$translate,$rootScope){if($scope.active_vault=VaultService.getActiveVault(),SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=SettingsService.getSetting("defaultVaultPass"),VaultService.setActiveVault(_vault),$scope.active_vault=_vault}}else if(!$scope.active_vault)return void $location.path("/");VaultService.getVault($scope.active_vault).then(function(vault){vault.vaultKey=VaultService.getActiveVault().vaultKey,delete vault.credentials,VaultService.setActiveVault(vault),$scope.pwSettings=VaultService.getVaultSetting("pwSettings",{length:12,useUppercase:!0,useLowercase:!0,useDigits:!0,useSpecialChars:!0,minimumDigitCount:3,avoidAmbiguousCharacters:!1,requireEveryCharType:!0,generateOnCreate:!0})}),$scope.currentTab={title:$translate.instant("general"),url:"views/partials/forms/edit_credential/basics.html",color:"blue"},$scope.otpType="qrcode",$translate(["general","password","custom.fields","files","otp"]).then(function(translations){$scope.tabs=[{title:translations.general,url:"views/partials/forms/edit_credential/basics.html",color:"blue"},{title:translations.password,url:"views/partials/forms/edit_credential/password.html",color:"green"},{title:translations["custom.fields"],url:"views/partials/forms/edit_credential/custom_fields.html",color:"orange"},{title:translations.files,url:"views/partials/forms/edit_credential/files.html",color:"yellow"},{title:translations.otp,url:"views/partials/forms/edit_credential/otp.html",color:"purple"}],$scope.currentTab=$scope.tabs[0]}),$scope.active_vault&&($scope.$parent.selectedVault=!0);var storedCredential=SettingsService.getSetting("edit_credential");storedCredential?($scope.storedCredential=CredentialService.decryptCredential(angular.copy(storedCredential)),$scope.storedCredential.password_repeat=angular.copy($scope.storedCredential.password),$scope.storedCredential.expire_time=1e3*$scope.storedCredential.expire_time):CredentialService.getCredential($routeParams.credential_id).then(function(result){$scope.storedCredential=CredentialService.decryptCredential(angular.copy(result))}),$scope.oldPassword=$scope.storedCredential.password,$scope.getTags=function($query){return TagService.searchTag($query)},$scope.onClickTab=function(tab){$scope.currentTab=tab},$scope.isActiveTab=function(tab){return tab.url===$scope.currentTab.url},$scope.pwGenerated=function(pass){$scope.storedCredential.password_repeat=pass};var _customField={label:"",value:"",secret:!1,field_type:"text"};$scope.selected_field_type="text",$scope.new_custom_field=angular.copy(_customField),$scope.addCustomField=function(){var _field=angular.copy($scope.new_custom_field);if(_field.label||NotificationService.showNotification($translate.instant("error.no.label"),3e3),_field.value||NotificationService.showNotification($translate.instant("error.no.value"),3e3),_field.label&&_field.value)if($scope.selected_field_type="text",_field.secret="password"===_field.field_type,"file"===_field.field_type){var key=!1,_file=$scope.new_custom_field.value;!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),FileService.uploadFile(_file,key).then(function(result){delete result.file_data,result.filename=EncryptService.decryptString(result.filename,key),_field.value=result,$scope.storedCredential.custom_fields.push(_field),$scope.new_custom_field=angular.copy(_customField)})}else $scope.storedCredential.custom_fields.push(_field),$scope.new_custom_field=angular.copy(_customField)},$scope.addFileToCustomField=function(file){$scope.new_custom_field.value={filename:file.name,size:file.size,mimetype:file.type,data:file.data},$scope.$digest()},$scope.deleteCustomField=function(field){field.hasOwnProperty("field_type")&&"file"===field.field_type&&FileService.deleteFile(field.value);var idx=$scope.storedCredential.custom_fields.indexOf(field);$scope.storedCredential.custom_fields.splice(idx,1)},$scope.new_file={name:"",data:null
-},$scope.deleteFile=function(file){var idx=$scope.storedCredential.files.indexOf(file);FileService.deleteFile(file).then(function(){$scope.storedCredential.files.splice(idx,1)})},$scope.fileLoaded=function(file){var key,_file={filename:file.name,size:file.size,mimetype:file.type,data:file.data};!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),FileService.uploadFile(_file,key).then(function(result){delete result.file_data,result.filename=EncryptService.decryptString(result.filename,key),$scope.storedCredential.files.push(result)}),$scope.$digest()},$scope.fileLoadError=function(error){console.log($translate.instant("error.loading.file"),error)},$scope.selected_file="",$scope.fileprogress=[],$scope.fileSelectProgress=function(progress){progress&&($scope.fileprogress=progress,$scope.$digest())},$scope.renewIntervalValue=0,$scope.renewIntervalModifier="0",$scope.updateInterval=function(renewIntervalValue,renewIntervalModifier){var value=parseInt(renewIntervalValue),modifier=parseInt(renewIntervalModifier);value&&modifier&&($scope.storedCredential.renew_interval=value*modifier)},$scope.parseQR=function(QRCode){if(!QRCode)return void NotificationService.showNotification($translate.instant("invalid.qr"),5e3);var uri=new URL(QRCode.qrData),type=uri.href.indexOf("totp/")!==-1?"totp":"hotp",label=uri.pathname.replace("//"+type+"/","");$scope.storedCredential.otp={type:type,label:decodeURIComponent(label),qr_uri:QRCode,issuer:uri.searchParams.get("issuer"),secret:uri.searchParams.get("secret")},$scope.$digest()},$scope.saving=!1,$scope.compromise=function(){console.log("This password was compromised"),$scope.storedCredential.compromised=!0},$scope.saveCredential=function(){if($scope.saving=!0,$scope.storedCredential.compromised&&$scope.oldPassword!==$scope.storedCredential.password&&($scope.storedCredential.compromised=!1),$scope.new_custom_field.label&&$scope.new_custom_field.value&&$scope.storedCredential.custom_fields.push(angular.copy($scope.new_custom_field)),$scope.storedCredential.password!==$scope.storedCredential.password_repeat)return $scope.saving=!1,void NotificationService.showNotification($translate.instant("password.do.not.match"),5e3);if(delete $scope.storedCredential.password_repeat,$scope.storedCredential.credential_id){var key,_credential;!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),_credential=key?ShareService.encryptSharedCredential($scope.storedCredential,key):angular.copy($scope.storedCredential),delete _credential.shared_key;var _useKey=null!=key,regex=/(<([^>]+)>)/gi;_credential.description&&""!==_credential.description&&(_credential.description=_credential.description.replace(regex,"")),CredentialService.updateCredential(_credential,_useKey).then(function(updated_cred){$scope.saving=!1,SettingsService.setSetting("edit_credential",null),$location.path("/vault/"+$routeParams.vault_id),NotificationService.showNotification($translate.instant("credential.updated"),5e3),$scope.updateExistingListWithCredential(updated_cred)})}else $scope.storedCredential.vault_id=$scope.active_vault.vault_id,CredentialService.createCredential($scope.storedCredential).then(function(new_cred){$scope.saving=!1,$location.path("/vault/"+$routeParams.vault_id),NotificationService.showNotification($translate.instant("credential.created"),5e3),$scope.updateExistingListWithCredential(new_cred)})},$scope.updateExistingListWithCredential=function(credential){try{if(credential.shared_key){var enc_key=EncryptService.decryptString(credential.shared_key);credential=ShareService.decryptSharedCredential(credential,enc_key)}else credential=CredentialService.decryptCredential(credential);credential.tags_raw=credential.tags;for(var found=!1,credList=$rootScope.vaultCache[$scope.active_vault.guid].credentials,i=0;i<credList.length;i++)credList[i].credential_id===credential.credential_id&&($rootScope.vaultCache[$scope.active_vault.guid].credentials[i]=credential,found=!0);found||$rootScope.vaultCache[$scope.active_vault.guid].credentials.push(credential),$rootScope.$broadcast("push_decrypted_credential_to_list",credential)}catch(e){NotificationService.showNotification($translate.instant("error.decrypt"),5e3),console.log(e)}},$scope.cancel=function(){$location.path("/vault/"+$routeParams.vault_id)}}])}(),function(){angular.module("passmanApp").controller("ExportCtrl",["$scope","$window","CredentialService","VaultService","FileService","EncryptService","$translate",function($scope,$window,CredentialService,VaultService,FileService,EncryptService,$translate){$scope.available_exporters=[],$scope.active_vault=VaultService.getActiveVault(),$scope.confirm_key="",$scope.$watch(function(){return $window.PassmanExporter},function(exporters){exporters=Object.keys(angular.copy(exporters));for(var i=0;i<exporters.length;i++){var exporter=exporters[i];$window.PassmanExporter[exporter].hasOwnProperty("info")&&$scope.available_exporters.push($window.PassmanExporter[exporter].info)}},!0),$scope.log=[],$scope.setExporter=function(exporter){exporter=JSON.parse(exporter),$scope.selectedExporter=exporter};var _log=function(str){$scope.log.push(str)};$scope.startExport=function(){if($scope.error=!1,VaultService.getActiveVault().vaultKey!==$scope.confirm_key){var msg=$translate.instant("invalid.vault.key");return $scope.error=msg,void _log(msg)}_log($translate.instant("export.starting"));var _credentials=[];VaultService.getVault(VaultService.getActiveVault()).then(function(vault){if(_log($translate.instant("export.decrypt")),vault.hasOwnProperty("credentials")&&vault.credentials.length>0){for(var i=0;i<vault.credentials.length;i++){var _credential=angular.copy(vault.credentials[i]);if(0===_credential.hidden){var key=CredentialService.getSharedKeyFromCredential(_credential);_credential=CredentialService.decryptCredential(_credential,key),_credential.vault_key=key,_credentials.push(_credential)}}$window.PassmanExporter[$scope.selectedExporter.id].export(_credentials,FileService,EncryptService).then(function(){_log($translate.instant("done"))})}})}}])}(),function(){angular.module("passmanApp").controller("GenericCsvImportCtrl",["$scope","CredentialService","$translate",function($scope,CredentialService,$translate){$scope.hello="world",$scope.credentialProperties=[{label:"Label",prop:"label",matching:["label","title","name"]},{label:"Username",prop:"username",matching:["username","user","login","login name"]},{label:"Password",prop:"password",matching:["password","pass","pw"]},{label:"TOTP Secret",prop:"otp",matching:["totp"]},{label:"Custom field",prop:"custom_field"},{label:"Notes",prop:"description",matching:["notes","description","comments"]},{label:"Email",prop:"email",matching:["email","mail"]},{label:"URL",prop:"url",matching:["website","url","fulladdress","site","web site"]},{label:"Tags",prop:"tags"},{label:"Ignored",prop:null}];var tagMapper=function(t){return{text:t}},rowToCredential=function(row){for(var _credential=PassmanImporter.newCredential(),k=0;k<$scope.import_fields.length;k++){var field=$scope.import_fields[k];if(field)if("otp"===field)_credential.otp.secret=row[k];else if("custom_field"===field){var key=$scope.matched?$scope.parsed_csv[0][k]:"Custom field "+k;_credential.custom_fields.push({label:key,value:row[k],secret:0})}else if("tags"===field){if(row[k]){var tags=row[k].split(",");_credential.tags=tags.map(tagMapper)}}else _credential[field]=row[k]}return _credential};$scope.inspectCredential=function(row){$scope.inspected_credential=rowToCredential(row)},$scope.csvLoaded=function(file){$scope.import_fields=[],$scope.inspected_credential=!1,$scope.matched=!1,$scope.skipFirstRow=!1;var file_data=file.data.split(",");file_data=decodeURIComponent(escape(window.atob(file_data[1]))),Papa.parse(file_data,{complete:function(results){if(results.data){for(var i=0;i<results.data[0].length;i++){var propName=results.data[0][i];$scope.import_fields[i]=null;for(var p=0;p<$scope.credentialProperties.length;p++){var credentialProperty=$scope.credentialProperties[p];credentialProperty.matching&&credentialProperty.matching.indexOf(propName.toLowerCase())!==-1&&($scope.import_fields[i]=credentialProperty.prop,$scope.matched=!0)}}$scope.matched&&$scope.inspectCredential(results.data[1]),$scope.parsed_csv=results.data,$scope.$apply()}}})};var addCredential=function(index){function handleState(index){$scope.parsed_csv[index+1]?($scope.import_progress={progress:index/$scope.parsed_csv.length*100,loaded:index,total:$scope.parsed_csv.length},addCredential(index+1)):($scope.import_progress={progress:100,loaded:$scope.parsed_csv.length,total:$scope.parsed_csv.length},$scope.log.push($translate.instant("done")),$scope.importing=!1)}var _credential=rowToCredential($scope.parsed_csv[index]);return _credential.vault_id=$scope.active_vault.vault_id,_credential.label?($scope.log.push($translate.instant("import.adding",{credential:_credential.label})),void CredentialService.createCredential(_credential).then(function(result){result.credential_id&&($scope.log.push($translate.instant("import.added",{credential:_credential.label})),handleState(index))})):($scope.log.push($translate.instant("import.skipping",{line:index})),void handleState(index))};$scope.importing=!1,$scope.startCSVImport=function(){$scope.importing=!0,$scope.log=[];var start=$scope.skipFirstRow?1:0;addCredential(start)},$scope.updateExample=function(){var start=$scope.skipFirstRow?1:0;$scope.inspectCredential($scope.parsed_csv[start])}}])}(),function(){angular.module("passmanApp").controller("ImportCtrl",["$scope","$window","CredentialService","VaultService","$translate",function($scope,$window,CredentialService,VaultService,$translate){$scope.available_importers=[],$scope.active_vault=VaultService.getActiveVault(),$scope.$watch(function(){return $window.PassmanImporter},function(importers){for(var key in importers){var importer=importers[key];importer.hasOwnProperty("info")&&$scope.available_importers.push(importer.info)}},!0),$scope.log=[],$scope.setImporter=function(importer){importer=JSON.parse(importer),$scope.selectedImporter=importer};var file_data,_log=function(str){$scope.log.push(str)};$scope.fileLoaded=function(file){file_data=file.data.split(","),file_data=decodeURIComponent(escape(window.atob(file_data[1]))),_log($translate.instant("import.file.read")),$scope.$digest()},$scope.fileLoadError=function(file){console.error($translate.instant("error.loading.file"),file)},$scope.fileSelectProgress=function(){};var parsed_data;$scope.import_progress={progress:0,loaded:0,total:0};var addCredential=function(parsed_data_index){if(parsed_data[parsed_data_index]){var _credential=parsed_data[parsed_data_index];if(!_credential.label)return void(parsed_data[parsed_data_index+1]&&(_log($translate.instant("import.no.label")),addCredential(parsed_data_index+1)));_log($translate.instant("import.adding",{credential:_credential.label})),_credential.vault_id=$scope.active_vault.vault_id,CredentialService.createCredential(_credential).then(function(result){result.credential_id&&(_log($translate.instant("import.added",{credential:_credential.label})),parsed_data[parsed_data_index+1]?($scope.import_progress={progress:parsed_data_index/parsed_data.length*100,loaded:parsed_data_index,total:parsed_data.length},addCredential(parsed_data_index+1)):($scope.import_progress={progress:100,loaded:parsed_data.length,total:parsed_data.length},_log($translate.instant("done"))))})}};$scope.file_read_progress={percent:0,loaded:0,total:0},$scope.startImport=function(){$scope.import_progress=0,$scope.file_read_percent=0,file_data&&$window.PassmanImporter[$scope.selectedImporter.id].readFile(file_data).then(function(parseddata){parsed_data=parseddata,$scope.file_read_progress={percent:100,loaded:parsed_data.length,total:parsed_data.length};var msg=$translate.instant("import.loaded").replace("{{num}}",parsed_data.length);_log(msg),parsed_data.length>0&&addCredential(0)}).progress(function(progress){$scope.file_read_progress=progress,$scope.$digest()})}}])}(),function(){angular.module("passmanApp").controller("MainCtrl",["$scope","$rootScope","$location","SettingsService","$window","$interval","$filter",function($scope,$rootScope,$location,SettingsService,$window,$interval,$filter){$scope.selectedVault=!1,$scope.http_warning_hidden=!0,"http"===$location.$$protocol&&"localhost"!==$location.$$host&&"127.0.0.1"!==$location.$host&&($scope.using_http=!0,$scope.http_warning_hidden=!1),$scope.removeHiddenStyles=function(){document.getElementById("warning_bar").classList.remove("template-hidden")},$rootScope.$on("settings_loaded",function(){SettingsService.isEnabled("disable_contextmenu")&&document.addEventListener("contextmenu",function(event){event.preventDefault()}),SettingsService.isEnabled("https_check")&&($scope.http_warning_hidden=!0),SettingsService.isEnabled("disable_debugger")&&!function a(){try{!function b(i){1===(""+i/i).length&&i%20!==0||function(){}.constructor("debugger")(),b(++i)}(0)}catch(e){setTimeout(a,5e3)}}()}),$rootScope.setHttpWarning=function(state){$scope.http_warning_hidden=state},$rootScope.$on("app_menu",function(evt,shown){$scope.app_sidebar=shown}),$rootScope.$on("logout",function(){$scope.selectedVault=!1});var tickSessionTimer=function(){if($scope.session_time_left){$scope.session_time_left--;var session_time_left_formatted=$filter("toHHMMSS")($scope.session_time_left);$scope.translationData={session_time:session_time_left_formatted},$rootScope.$broadcast("logout_timer_tick_tack",$scope.session_time_left),0===$scope.session_time_left&&$window.location.reload()}};$scope.session_time_left=!1,$scope.$on("logout_timer_set",function(evt,timer){$scope.session_time_left=timer,$scope.translationData={session_time:timer},$interval(tickSessionTimer,1e3)})}])}(),function(){angular.module("passmanApp").controller("MenuCtrl",["$scope","VaultService","$location","$rootScope","TagService","SettingsService","$translate","SearchboxexpanderService",function($scope,VaultService,$location,$rootScope,TagService,SettingsService,$translate,SearchboxexpanderService){$rootScope.logout=function(){$rootScope.override_default_vault=!0,SettingsService.setSetting("defaultVaultPass",!1),TagService.resetTags(),$rootScope.$broadcast("logout"),$location.path("/")},$scope.removeHiddenStyles=function(){document.getElementById("app-navigation").classList.remove("template-hidden")},$scope.selectedTags=[],$scope.getTags=function($query){return TagService.searchTag($query)},$scope.$watch(function(){return VaultService.getActiveVault()},function(vault){$scope.active_vault=vault}),$scope.filtered_tags=[],$rootScope.$on("limit_tags_in_list",function(evt,tags){$scope.filtered_tags=[];for(var i=0;i<tags.length;i++){for(var tag={text:tags[i]},found=!1,x=0;x<$scope.selectedTags.length;x++)$scope.selectedTags[x].text===tag.text&&(found=!0);found===!1&&$scope.filtered_tags.push(tag)}}),$scope.$watch("selectedTags",function(){$rootScope.$broadcast("selected_tags_updated",$scope.selectedTags)},!0),$scope.tagSelected=function(tag){for(var i=0;i<$scope.selectedTags.length;i++)if($scope.selectedTags[i].text===tag.text)return!0;return!1},$scope.removeTagFromSelected=function(tag){for(var where=-1,i=0;i<$scope.selectedTags.length;i++)$scope.selectedTags[i].text===tag.text&&(where=i);$scope.selectedTags.splice(where,1)},$scope.clearForm=function(){document.getElementById("tagsearch").value=""},$scope.tagClickedString=function(tagtext){var tag=[];tag.text=tagtext,$scope.tagClicked(tag)},$scope.tagClicked=function(tag){$scope.tagSelected(tag)?$scope.removeTagFromSelected(tag):$scope.selectedTags.push(tag)},SearchboxexpanderService.expandSearch($rootScope,$scope),$scope.clickedNavigationItem="all",$scope.filterCredentialBySpecial=function(string){$scope.clickedNavigationItem=string,"nav_trashbin"!==string&&($scope.delete_time=0,$rootScope.$broadcast("set_delete_time",$scope.delete_time)),$scope.selectedTags=[],$rootScope.$broadcast("filterSpecial",string),$scope.settingsShown=!1},$scope.collapsedDefaultValue=!0,$scope.tagCollapsibleOpen=VaultService.getVaultSetting("vaultTagCollapsedState",$scope.collapsedDefaultValue),$scope.tagCollapsibleClicked=function(){VaultService.getVaultSetting("vaultTagCollapsedState",$scope.collapsedDefaultValue)===!0?VaultService.setVaultSetting("vaultTagCollapsedState",!1):VaultService.setVaultSetting("vaultTagCollapsedState",!0)},$scope.tagCollapsibleState=function(){return VaultService.getVaultSetting("vaultTagCollapsedState",$scope.collapsedDefaultValue)?"":"open"},$scope.initPlaceholder=function(){$translate.onReady().then(function(){var string=$translate.instant("navigation.advanced.filter");document.getElementById("tags-input-outer").setAttribute("placeholder",string),document.getElementById("tags-input-outer").firstChild.firstChild.childNodes[1].setAttribute("placeholder",string)})},$scope.legacyNavbarDefault=!0,$scope.legacyNavbarAlreadyInitialized=!1,"undefined"==typeof $scope.legacyNavbar&&($scope.legacyNavbar=$scope.legacyNavbarDefault),$scope.$watch("legacyNavbar",function(newValue,oldValue){VaultService.setVaultSetting("vaultNavBarLegacy",newValue)}),$scope.initializeNavbar=function(){$scope.legacyNavbarAlreadyInitialized||($scope.legacyNavbar=VaultService.getVaultSetting("vaultNavBarLegacy",$scope.legacyNavbarDefault),$scope.legacyNavbarAlreadyInitialized=!0)},$rootScope.$on("credentials_loaded",function(){$rootScope.$broadcast("selected_tags_updated",$scope.selectedTags),$scope.initializeNavbar()}),$scope.available_tags=TagService.getTags(),$scope.$watch(function(){return 0===$scope.selectedTags.length?TagService.getTags():TagService.getTags()},function(tags){$scope.available_tags=TagService.getTags()},!0),$scope.toggleDeleteTime=function(){$scope.delete_time>0?$scope.delete_time=0:($scope.delete_time=1,this.filterCredentialBySpecial("nav_trashbin")),$rootScope.$broadcast("set_delete_time",$scope.delete_time)}}])}(),function(){angular.module("passmanApp").controller("PublicSharedCredential",["$scope","ShareService","$window","EncryptService","NotificationService","$translate",function($scope,ShareService,$window,EncryptService,NotificationService,$translate){var _key;$scope.loading=!1,$scope.loadSharedCredential=function(){$scope.loading=!0;var data=window.atob($window.location.hash.replace("#","")).split("<::>"),guid=data[0];_key=data[1],ShareService.getPublicSharedCredential(guid).then(function(sharedCredential){$scope.loading=!1,200===sharedCredential.status?$scope.shared_credential=ShareService.decryptSharedCredential(sharedCredential.data.credential_data,_key):$scope.expired=!0})},$scope.downloadFile=function(credential,file){ShareService.downloadSharedFile(credential,file).then(function(result){if(!result.hasOwnProperty("file_data"))return void NotificationService.showNotification($translate.instant("error.loading.file.perm"),5e3);var file_data=EncryptService.decryptString(result.file_data,_key);download(file_data,escapeHTML(file.filename),file.mimetype)})}}])}(),function(){angular.module("passmanApp").controller("RevisionCtrl",["$scope","SettingsService","VaultService","CredentialService","$location","$routeParams","$rootScope","NotificationService","$filter","ShareService","EncryptService","$translate",function($scope,SettingsService,VaultService,CredentialService,$location,$routeParams,$rootScope,NotificationService,$filter,ShareService,EncryptService,$translate){if($scope.active_vault=VaultService.getActiveVault(),SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=SettingsService.getSetting("defaultVaultPass"),VaultService.setActiveVault(_vault),VaultService.getVault(_vault).then(function(vault){vault.vaultKey=SettingsService.getSetting("defaultVaultPass"),VaultService.setActiveVault(vault),$scope.active_vault=vault,$scope.$parent.selectedVault=!0})}}else $scope.active_vault||$location.path("/");$scope.active_vault&&($scope.$parent.selectedVault=!0);var storedCredential=SettingsService.getSetting("revision_credential"),getRevisions=function(){CredentialService.getRevisions($scope.storedCredential.guid).then(function(revisions){$scope.revisions=revisions})};storedCredential?($scope.storedCredential=CredentialService.decryptCredential(angular.copy(storedCredential)),getRevisions()):CredentialService.getCredential($routeParams.credential_id).then(function(result){$scope.storedCredential=CredentialService.decryptCredential(angular.copy(result)),getRevisions()}),$scope.selectRevision=function(revision){var key;$scope.selectedRevision=angular.copy(revision),!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),key?$scope.selectedRevision.credential_data=ShareService.decryptSharedCredential(angular.copy(revision.credential_data),key):$scope.selectedRevision.credential_data=CredentialService.decryptCredential(angular.copy(revision.credential_data)),$rootScope.$emit("app_menu",!0)},$scope.closeSelected=function(){$rootScope.$emit("app_menu",!1),$scope.selectedRevision=!1},$scope.deleteRevision=function(revision){CredentialService.deleteRevision($scope.storedCredential.guid,revision.revision_id).then(function(){for(var i=0;i<$scope.revisions.length;i++)if($scope.revisions[i].revision_id===revision.revision_id){$scope.revisions.splice(i,1),NotificationService.showNotification($translate.instant("revision.deleted"),5e3);break}})},$scope.restoreRevision=function(revision){var key,_revision=angular.copy(revision),_credential=_revision.credential_data;!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),key&&(_credential=ShareService.encryptSharedCredential(_credential,key)),delete _credential.shared_key,_credential.revision_created=$filter("date")(1e3*_revision.created,"dd-MM-yyyy @ HH:mm:ss"),CredentialService.updateCredential(_credential,key).then(function(restored_cred){SettingsService.setSetting("revision_credential",null),$rootScope.$emit("app_menu",!1),$location.path("/vault/"+$routeParams.vault_id),NotificationService.showNotification($translate.instant("revision.restored"),5e3),$scope.updateExistingListWithCredential(restored_cred)})},$scope.updateExistingListWithCredential=function(credential){try{if(credential.shared_key){var enc_key=EncryptService.decryptString(credential.shared_key);credential=ShareService.decryptSharedCredential(credential,enc_key)}else credential=CredentialService.decryptCredential(credential);credential.tags_raw=credential.tags;for(var found=!1,credList=$rootScope.vaultCache[$scope.active_vault.guid].credentials,i=0;i<credList.length;i++)credList[i].credential_id===credential.credential_id&&($rootScope.vaultCache[$scope.active_vault.guid].credentials[i]=credential,found=!0);found||$rootScope.vaultCache[$scope.active_vault.guid].credentials.push(credential),$rootScope.$broadcast("push_decrypted_credential_to_list",credential)}catch(e){NotificationService.showNotification($translate.instant("error.decrypt"),5e3),console.log(e)}},$scope.cancelRevision=function(){$location.path("/vault/"+$routeParams.vault_id),$scope.storedCredential=null,SettingsService.setSetting("revision_credential",null)}}])}(),function(){angular.module("passmanApp").controller("SettingsCtrl",["$scope","$rootScope","SettingsService","VaultService","CredentialService","$location","$routeParams","$http","EncryptService","NotificationService","$sce","$translate",function($scope,$rootScope,SettingsService,VaultService,CredentialService,$location,$routeParams,$http,EncryptService,NotificationService,$sce,$translate){if($scope.vault_settings={},$scope.new_vault_name="",$scope.showGenericImport=!1,$scope.active_vault=VaultService.getActiveVault(),SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=SettingsService.getSetting("defaultVaultPass"),VaultService.setActiveVault(_vault),$scope.active_vault=_vault}}else if(!$scope.active_vault)return void $location.path("/");VaultService.getVault($scope.active_vault).then(function(vault){vault.vaultKey=VaultService.getActiveVault().vaultKey,delete vault.credentials,VaultService.setActiveVault(vault),$scope.vault_settings=vault.vault_settings,$scope.vault_settings.hasOwnProperty("pwSettings")||($scope.vault_settings.pwSettings={length:12,useUppercase:!0,useLowercase:!0,useDigits:!0,useSpecialChars:!0,minimumDigitCount:3,avoidAmbiguousCharacters:!1,requireEveryCharType:!0,generateOnCreate:!0})});var key_strengths=["password.poor","password.poor","password.weak","password.good","password.strong"];$scope.minimal_value_key_strength=SettingsService.getSetting("vault_key_strength"),$translate(key_strengths[SettingsService.getSetting("vault_key_strength")]).then(function(translation){$scope.required_score={strength:translation}});var btn_txt=$translate.instant("bookmarklet.text"),http=location.protocol,slashes=http.concat("//"),host=slashes.concat(window.location.hostname),complete=host+location.pathname;$scope.bookmarklet=$sce.trustAsHtml('<a class="button" href="javascript:(function(){var a=window,b=document,c=encodeURIComponent,e=c(document.title),d=a.open(\''+complete+"bookmarklet?url='+c(b.location)+'&title='+e,'bkmk_popup','left='+((a.screenX||a.screenLeft)+10)+',top='+((a.screenY||a.screenTop)+10)+',height=750px,width=475px,resizable=0,alwaysRaised=1');a.setTimeout(function(){d.focus()},300);})();\">"+btn_txt+"</a>"),$scope.saveVaultSettings=function(){var _vault=$scope.active_vault;_vault.name=$scope.new_vault_name,_vault.vault_settings=angular.copy($scope.vault_settings),VaultService.updateVault(_vault).then(function(){$scope.active_vault.name=angular.copy(_vault.name),NotificationService.showNotification($translate.instant("settings.saved"),5e3)})},$scope.tabs=[{title:$translate.instant("settings.general"),url:"views/partials/forms/settings/general_settings.html"},{title:$translate.instant("settings.audit"),url:"views/partials/forms/settings/tool.html"},{title:$translate.instant("settings.password"),url:"views/partials/forms/settings/password_settings.html"},{title:$translate.instant("settings.import"),url:"views/partials/forms/settings/import.html"},{title:$translate.instant("settings.export"),url:"views/partials/forms/settings/export.html"},{title:$translate.instant("settings.sharing"),url:"views/partials/forms/settings/sharing.html"}],$scope.currentTab=$scope.tabs[0],$scope.onClickTab=function(tab){$scope.currentTab=tab},$scope.isActiveTab=function(tab){return tab.url===$scope.currentTab.url};var getPassmanVersion=function(){var url=OC.generateUrl("apps/passman/api/internal/version");$http.get(url).then(function(result){$scope.passman_version=result.data.version})};getPassmanVersion(),$scope.$watch(function(){return VaultService.getActiveVault()},function(vault){vault&&($scope.active_vault=vault)}),$rootScope.$on("logout",function(){$scope.selectedVault=!1});var getCurrentVaultCredentials=function(callback){VaultService.getVault($scope.active_vault).then(callback)};$scope.startScan=function(minStrength){getCurrentVaultCredentials(function(vault){for(var results=[],i=0;i<vault.credentials.length;i++){var c=angular.copy(vault.credentials[i]);if(c.password&&0===c.hidden)try{if(c=CredentialService.decryptCredential(c),c.password){var zxcvbn_result=zxcvbn(c.password);zxcvbn_result.score<=minStrength&&results.push({guid:c.guid,label:c.label,password:c.password,password_zxcvbn_result:zxcvbn_result})}}catch(e){console.warn(e)}}$scope.scan_result=results})},$scope.cur_state={},$scope.$on("$locationChangeStart",function(event){$scope.change_pw&&$scope.change_pw.total>0&&$scope.change_pw.done<$scope.change_pw.total&&(confirm($translate.instant("changepw.navigate.away.warning"))||event.preventDefault())}),$scope.changeVaultPassword=function(oldVaultPass,newVaultPass,newVaultPass2){return $scope.error="",oldVaultPass!==VaultService.getActiveVault().vaultKey?void($scope.error=$translate.instant("incorrect.password")):newVaultPass!==newVaultPass2?void($scope.error=$translate.instant("password.no.match")):(SettingsService.setSetting("defaultVault",null),SettingsService.setSetting("defaultVaultPass",null),void VaultService.getVault($scope.active_vault).then(function(vault){jQuery("input").attr("disabled",!0),jQuery("button").attr("disabled",!0);var _selected_credentials=angular.copy(vault.credentials);$scope.change_pw={percent:0,done:0,total:_selected_credentials.length};var changeCredential=function(index,oldVaultPass,newVaultPass){var usedKey=oldVaultPass;_selected_credentials[index].hasOwnProperty("shared_key")&&_selected_credentials[index].shared_key&&(usedKey=EncryptService.decryptString(angular.copy(_selected_credentials[index].shared_key),oldVaultPass)),CredentialService.reencryptCredential(_selected_credentials[index].guid,usedKey,newVaultPass).progress(function(data){$scope.cur_state=data}).then(function(){var percent=index/_selected_credentials.length*100;$scope.change_pw={percent:percent,done:index+1,total:_selected_credentials.length},index<_selected_credentials.length-1?changeCredential(index+1,oldVaultPass,newVaultPass):(vault.private_sharing_key=EncryptService.decryptString(angular.copy(vault.private_sharing_key),oldVaultPass),vault.private_sharing_key=EncryptService.encryptString(vault.private_sharing_key,newVaultPass),VaultService.updateSharingKeys(vault).then(function(){$rootScope.$broadcast("logout"),NotificationService.showNotification($translate.instant("login.new.pass"),5e3)}))})};changeCredential(0,VaultService.getActiveVault().vaultKey,newVaultPass)}))},$scope.confirm_vault_delete=!1,$scope.delete_vault_password="",$scope.delete_vault=function(){$scope.confirm_vault_delete&&$scope.delete_vault_password===VaultService.getActiveVault().vaultKey&&getCurrentVaultCredentials(function(vault){var credentials=vault.credentials;$scope.remove_pw={percent:0,done:0,total:vault.credentials.length};var deleteCredential=function(index){$scope.translationData={password:credentials[index].label},CredentialService.destroyCredential(credentials[index].guid).then(function(){var percent=index/vault.credentials.length*100;return $scope.remove_pw={percent:percent,done:index,total:vault.credentials.length},index===credentials.length-1?void VaultService.deleteVault(vault).then(function(){SettingsService.setSetting("defaultVaultPass",!1),SettingsService.setSetting("defaultVault",null),$rootScope.$broadcast("logout"),$location.path("/")}):void deleteCredential(index+1)})};deleteCredential(0)})},$rootScope.$on("logout",function(){$scope.active_vault=null,VaultService.setActiveVault(null),$location.path("/")}),$scope.cancel=function(){$location.path("/vault/"+$routeParams.vault_id);
-}}])}(),function(){angular.module("passmanApp").controller("ShareCtrl",["$scope","VaultService","CredentialService","SettingsService","$location","$routeParams","ShareService","NotificationService","SharingACL","EncryptService","$translate","$rootScope",function($scope,VaultService,CredentialService,SettingsService,$location,$routeParams,ShareService,NotificationService,SharingACL,EncryptService,$translate,$rootScope){$scope.active_vault=VaultService.getActiveVault(),$scope.tabs=[{title:$translate.instant("share.u.g"),url:"views/partials/forms/share_credential/basics.html"},{title:$translate.instant("share.link"),url:"views/partials/forms/share_credential/link_sharing.html",color:"green"}],$scope.currentTab=$scope.tabs[0];var settingsLoaded=function(){var settings=SettingsService.getSettings();0!==settings.user_sharing_enabled&&"0"!==settings.user_sharing_enabled||$scope.tabs.splice(0,1),0!==settings.link_sharing_enabled&&"0"!==settings.link_sharing_enabled||$scope.tabs.splice(1,1),$scope.tabs.length>0&&($scope.currentTab=$scope.tabs[0])};if(SettingsService.getSetting("settings_loaded")?settingsLoaded():$rootScope.$on("settings_loaded",function(){settingsLoaded()}),$scope.onClickTab=function(tab){$scope.currentTab=tab},$scope.isActiveTab=function(tab){return tab.url===$scope.currentTab.url},SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=angular.copy(SettingsService.getSetting("defaultVaultPass")),VaultService.setActiveVault(_vault),$scope.active_vault=_vault}}else $scope.active_vault||$location.path("/");var storedCredential=SettingsService.getSetting("share_credential");storedCredential?$scope.storedCredential=CredentialService.decryptCredential(angular.copy(storedCredential)):$location.path("/vault/"+$routeParams.vault_id),$scope.active_vault&&($scope.$parent.selectedVault=!0),$scope.cancel=function(){SettingsService.setSetting("share_credential",null),$location.path("/vault/"+$routeParams.vault_id)},$scope.default_permissions=new SharingACL(0),$scope.default_permissions.addPermission($scope.default_permissions.permissions.READ|$scope.default_permissions.permissions.WRITE|$scope.default_permissions.permissions.FILES);var link_acl=angular.copy($scope.default_permissions);link_acl.removePermission($scope.default_permissions.permissions.WRITE);var oneMonthLater=new Date;oneMonthLater.setMonth(oneMonthLater.getMonth()+1),$scope.share_settings={linkSharing:{enabled:!1,settings:{expire_time:oneMonthLater,expire_views:5,acl:link_acl}},credentialSharedWithUserAndGroup:[],cypher_progress:{done:0,total:0},upload_progress:{done:0,total:0}};var getAcl=function(){ShareService.getSharedCredentialACL($scope.storedCredential).then(function(aclList){for(var _list=[],enc_key=!!$scope.storedCredential.shared_key&&EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key)),i=0;i<aclList.length;i++){var acl=aclList[i];if(null===acl.user_id){if($scope.share_settings.linkSharing={enabled:!0,settings:{expire_time:new Date(1e3*acl.expire),expire_views:acl.expire_views,acl:new SharingACL(acl.permissions)}},enc_key){var hash=window.btoa($scope.storedCredential.guid+"<::>"+enc_key);$scope.share_link=getShareLink(hash)}}else{var obj={userId:acl.user_id,displayName:acl.user_id,type:"user",acl:new SharingACL(acl.permissions),acl_id:acl.acl_id,pending:acl.pending,credential_guid:acl.item_guid,created:acl.created};_list.push(obj)}}$scope.share_settings.credentialSharedWithUserAndGroup=_list})};getAcl();new SharingACL(0);$scope.$watch("share_settings.upload_progress.done",function(){$scope.share_settings.upload_progress.done===$scope.share_settings.upload_progress.total&&$scope.share_settings.upload_progress.total>0&&getAcl()}),$scope.inputSharedWith=[],$scope.searchUsers=function($query){return ShareService.search($query)},$scope.hasPermission=function(acl,permission){return acl.hasPermission(permission)},$scope.setPermission=function(acl,permission){acl.togglePermission(permission)},$scope.shareWith=function(shareWith){if($scope.inputSharedWith=[],shareWith.length>0)for(var i=0;i<shareWith.length;i++){for(var obj={userId:shareWith[i].uid,displayName:shareWith[i].text,type:shareWith[i].type,acl:angular.copy($scope.default_permissions),pending:!0,credential_guid:$scope.storedCredential.guid},found=!1,z=0;z<$scope.share_settings.credentialSharedWithUserAndGroup.length;z++)shareWith[z]&&$scope.share_settings.credentialSharedWithUserAndGroup[z].userId===shareWith[z].uid&&(found=!0);found===!1&&$scope.share_settings.credentialSharedWithUserAndGroup.push(obj)}},$scope.unshareUser=function(user){ShareService.unshareCredentialFromUser($scope.storedCredential,user.userId).then(function(result){if(result.result===!0){var idx=$scope.share_settings.credentialSharedWithUserAndGroup.indexOf(user);$scope.share_settings.credentialSharedWithUserAndGroup.splice(idx,1)}})},$scope.unshareCredential=function(credential){var _credential=angular.copy(credential),old_key=EncryptService.decryptString(angular.copy(_credential.shared_key)),new_key=VaultService.getActiveVault().vaultKey;_credential.shared_key=null,_credential.unshare_action=!0,_credential.skip_revision=!0,CredentialService.reencryptCredential(_credential.guid,old_key,new_key,!0).then(function(data){getAcl();var c=data.cryptogram;c.shared_key=null,c.unshare_action=!0,c.skip_revision=!0,ShareService.unshareCredential(c),CredentialService.updateCredential(c,!0).then(function(){NotificationService.showNotification($translate.instant("credential.unshared"),4e3),$scope.sharing_complete=!0,$scope.storedCredential.shared_key=null,$scope.share_settings.credentialSharedWithUserAndGroup=[]})})},$scope.applyShareToUser=function(user,enc_key){ShareService.getVaultsByUser(user.userId).then(function(data){$scope.share_settings.cypher_progress.total+=data.length,user.vaults=data;var start=(new Date).getTime()/1e3;ShareService.cypherRSAStringWithPublicKeyBulkAsync(user.vaults,enc_key).progress(function(){$scope.share_settings.cypher_progress.done++,$scope.share_settings.cypher_progress.percent=$scope.share_settings.cypher_progress.done/$scope.share_settings.cypher_progress.total*100,$scope.$digest()}).then(function(result){$scope.share_settings.cypher_progress.times.push({time:(new Date).getTime()/1e3-start,user:data[0].user_id}),user.vaults=result,user.hasOwnProperty("acl_id")||$scope.uploadChanges(user),$scope.$digest()})})},$scope.$on("$locationChangeStart",function(event){$scope.sharing_complete||confirm($translate.instant("share.navigate.away.warning"))||event.preventDefault()});var getShareLink=function(hash){var port,defaultPort="http"===$location.$$protocol?80:443;return port=defaultPort!==$location.$$port?":"+$location.$$port:"",$location.$$protocol+"://"+$location.$$host+port+OC.generateUrl("apps/passman/share/public#")+hash};$scope.sharing_complete=!0,$scope.applyShare=function(){if($scope.sharing_complete=!1,$scope.share_settings.cypher_progress.percent=0,$scope.share_settings.cypher_progress.done=0,$scope.share_settings.cypher_progress.total=0,$scope.share_settings.cypher_progress.times=[],$scope.share_settings.cypher_progress.times_total=[],$scope.share_settings.upload_progress.done=0,$scope.share_settings.upload_progress.total=0,$scope.storedCredential.shared_key&&""!==$scope.storedCredential.shared_key&&null!==$scope.storedCredential.shared_key){var enc_key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key));if($scope.share_settings.linkSharing.enabled){var expire_time=new Date(angular.copy($scope.share_settings.linkSharing.settings.expire_time)).getTime()/1e3,shareObj={item_id:$scope.storedCredential.credential_id,item_guid:$scope.storedCredential.guid,permissions:$scope.share_settings.linkSharing.settings.acl.getAccessLevel(),expire_timestamp:expire_time,expire_views:$scope.share_settings.linkSharing.settings.expire_views};ShareService.createPublicSharedCredential(shareObj).then(function(){var hash=window.btoa($scope.storedCredential.guid+"<::>"+enc_key);$scope.share_link=getShareLink(hash)})}for(var list=$scope.share_settings.credentialSharedWithUserAndGroup,i=0;i<list.length;i++){var iterator=i,target_user=list[i];if(target_user.hasOwnProperty("created")){var acl={user_id:target_user.userId,permission:target_user.acl.getAccessLevel()};ShareService.updateCredentialAcl($scope.storedCredential,acl)}else $scope.applyShareToUser(list[iterator],enc_key)}NotificationService.showNotification($translate.instant("saved"),4e3),$scope.sharing_complete=!0}else ShareService.generateSharedKey(20).then(function(key){var encryptedSharedCredential=angular.copy($scope.storedCredential),old_key=VaultService.getActiveVault().vaultKey;CredentialService.reencryptCredential(encryptedSharedCredential.guid,old_key,key).progress(function(){}).then(function(data){var _credential=data.cryptogram;_credential.set_share_key=!0,_credential.skip_revision=!0,_credential.shared_key=EncryptService.encryptString(key),CredentialService.updateCredential(_credential,!0).then(function(){$scope.storedCredential.shared_key=_credential.shared_key,NotificationService.showNotification($translate.instant("credential.shared"),4e3),$scope.sharing_complete=!0})});for(var list=$scope.share_settings.credentialSharedWithUserAndGroup,i=0;i<list.length;i++)"user"===list[i].type&&$scope.applyShareToUser(list[i],key);if($scope.share_settings.linkSharing.enabled){var expire_time=new Date(angular.copy($scope.share_settings.linkSharing.settings.expire_time)).getTime()/1e3,shareObj={item_id:$scope.storedCredential.credential_id,item_guid:$scope.storedCredential.guid,permissions:$scope.share_settings.linkSharing.settings.acl.getAccessLevel(),expire_timestamp:expire_time,expire_views:$scope.share_settings.linkSharing.settings.expire_views};ShareService.createPublicSharedCredential(shareObj).then(function(){var hash=window.btoa($scope.storedCredential.guid+"<::>"+key);$scope.share_link=getShareLink(hash)})}})},$scope.uploadChanges=function(user){$scope.share_settings.upload_progress.total++,user.accessLevel=angular.copy(user.acl.getAccessLevel()),ShareService.shareWithUser(storedCredential,user).then(function(){$scope.share_settings.upload_progress.done++,$scope.share_settings.upload_progress.percent=$scope.share_settings.upload_progress.done/$scope.share_settings.upload_progress.total*100})},$scope.calculate_total_time=function(){$scope.share_settings.cypher_progress.times=$scope.share_settings.cypher_progress.times||[];for(var total=0,i=0;i<$scope.share_settings.cypher_progress.times.length;i++)total+=$scope.share_settings.cypher_progress.times[i].time;return total}}])}(),function(){angular.module("passmanApp").controller("SharingSettingsCtrl",["$scope","VaultService","CredentialService","SettingsService","$location","$routeParams","ShareService","EncryptService",function($scope,VaultService,CredentialService,SettingsService,$location,$routeParams,ShareService,EncryptService){$scope.active_vault=VaultService.getActiveVault(),$scope.sharing_keys=angular.copy(ShareService.getSharingKeys()),$scope.progress=1,$scope.generating=!1,$scope.available_sizes=[{size:1024,name:1024},{size:2048,name:2048},{size:4096,name:4096}],$scope.setKeySize=function(size){for(var i=0;i<$scope.available_sizes.length;i++)if($scope.available_sizes[i].size===size)return void($scope.key_size=$scope.available_sizes[i])},$scope.setKeySize(2048),$scope.generateKeys=function(length){$scope.progress=1,$scope.generating=!0,ShareService.generateRSAKeys(length).progress(function(progress){$scope.progress=progress>0?2:1,$scope.$digest()}).then(function(kp){$scope.generating=!1;var pem=ShareService.rsaKeyPairToPEM(kp);$scope.active_vault.private_sharing_key=EncryptService.encryptString(pem.privateKey),$scope.active_vault.public_sharing_key=pem.publicKey,VaultService.updateSharingKeys($scope.active_vault).then(function(){$scope.sharing_keys=ShareService.getSharingKeys()})})},$scope.updateSharingKeys=function(){$scope.active_vault.private_sharing_key=EncryptService.encryptString(angular.copy($scope.sharing_keys.private_sharing_key)),$scope.active_vault.public_sharing_key=angular.copy($scope.sharing_keys.public_sharing_key),VaultService.updateSharingKeys($scope.active_vault).then(function(){$scope.sharing_keys=ShareService.getSharingKeys()})}}])}(),function(){angular.module("passmanApp").controller("VaultCtrl",["$scope","VaultService","SettingsService","CredentialService","$location","ShareService","EncryptService","$translate","$rootScope","$interval",function($scope,VaultService,SettingsService,CredentialService,$location,ShareService,EncryptService,$translate,$rootScope,$interval){VaultService.getVaults().then(function(vaults){if($scope.vaults=vaults,null!=SettingsService.getSetting("defaultVault"))for(var default_vault=SettingsService.getSetting("defaultVault"),i=0;i<vaults.length;i++){var vault=vaults[i];if(vault.guid===default_vault.guid){$scope.default_vault=!0,$rootScope.override_default_vault||($scope.list_selected_vault=vault,$rootScope.override_default_vault=!1),SettingsService.setSetting("defaultVault",vault),SettingsService.getSetting("defaultVaultPass")&&$location.path("/vault/"+vault.guid),$scope.vault_tries[vault.guid]={tries:0,timeout:0};break}}});var key_strengths=["password.poor","password.poor","password.weak","password.good","password.strong"];$scope.default_vault=!1,$scope.remember_vault_password=!1,$scope.auto_logout_timer=!1,$scope.logout_timer="0",$scope.list_selected_vault=!1,$scope.minimal_value_key_strength=3;var settingsLoaded=function(){$scope.minimal_value_key_strength=SettingsService.getSetting("vault_key_strength"),$translate(key_strengths[SettingsService.getSetting("vault_key_strength")]).then(function(translation){$scope.required_score={strength:translation}})};SettingsService.getSetting("settings_loaded")?settingsLoaded():$rootScope.$on("settings_loaded",function(){settingsLoaded()}),$scope.toggleDefaultVault=function(){$scope.default_vault=!$scope.default_vault,$scope.default_vault===!0?SettingsService.setSetting("defaultVault",$scope.list_selected_vault):SettingsService.setSetting("defaultVault",null)},$scope.toggleRememberPassword=function(){$scope.remember_vault_password=!$scope.remember_vault_password,$scope.remember_vault_password&&(SettingsService.setSetting("defaultVault",$scope.list_selected_vault),$scope.default_vault=!0),$scope.remember_vault_password!==!0&&SettingsService.setSetting("defaultVault",null)},$scope.toggleAutoLogout=function(){$scope.auto_logout_timer=!$scope.auto_logout_timer},$scope.clearState=function(){$scope.list_selected_vault=!1,$scope.creating_vault=!1,$scope.error=!1},$scope.selectVault=function(vault){$scope.list_selected_vault=vault,$scope.vault_tries[vault.guid]||($scope.vault_tries[vault.guid]={tries:0,timeout:0})},$scope.sharing_keys={},$scope.newVault=function(){$scope.creating_vault=!0;var key_size=1024;ShareService.generateRSAKeys(key_size).progress(function(progress){var p=progress>0?2:1,msg=$translate.instant("generating.sharing.keys");msg=msg.replace("%step",p),$scope.creating_keys=msg,$scope.$digest()}).then(function(kp){var pem=ShareService.rsaKeyPairToPEM(kp);$scope.creating_keys=!1,$scope.sharing_keys.private_sharing_key=pem.privateKey,$scope.sharing_keys.public_sharing_key=pem.publicKey,$scope.$digest()})},$scope.requestDeletion=function(vault){$location.path("/vault/"+vault.guid+"/request-deletion")};var _loginToVault=function(vault,vault_key){var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),delete _vault.credentials;var timer=parseInt($scope.logout_timer);$scope.auto_logout_timer&&timer>0&&$rootScope.$broadcast("logout_timer_set",60*timer),VaultService.setActiveVault(_vault),$location.path("/vault/"+vault.guid)};$scope.selectLogoutTimer=function(time){$scope.auto_logout_timer=!0,$scope.logout_timer=time};var tickLockTimer=function(guid){$scope.vault_tries[guid].timeout=$scope.vault_tries[guid].timeout-1,$scope.vault_tries[guid].timeout<=0&&($interval.cancel($scope.vault_tries[guid].timer),$scope.vault_tries[guid].timeout=0)};$scope.vault_tries={},$scope.vaultDecryptionKey="",$scope.loginToVault=function(vault,vault_key){$scope.error=!1;var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),VaultService.setActiveVault(_vault);try{EncryptService.decryptString(vault.challenge_password),$scope.remember_vault_password&&SettingsService.setSetting("defaultVaultPass",vault_key),_loginToVault(vault,vault_key)}catch(e){if($scope.error=$translate.instant("invalid.vault.key"),$scope.vault_tries[vault.guid].tries=$scope.vault_tries[vault.guid].tries+1,$scope.vault_tries[vault.guid].tries>=3){var duration=Math.pow(2,1/7)*Math.pow(15,4/7)*Math.pow(Math.pow(2,2/7)*Math.pow(15,1/7),$scope.vault_tries[vault.guid].tries);$scope.vault_tries[vault.guid].timeout=duration,$scope.vault_tries[vault.guid].hasOwnProperty("timer")&&$interval.cancel($scope.vault_tries[vault.guid].timer),$scope.vault_tries[vault.guid].timer=$interval(function(){tickLockTimer(vault.guid)},1e3)}}},$scope.createVault=function(vault_name,vault_key,vault_key2){return vault_key!==vault_key2?void($scope.error=$translate.instant("password.do.not.match")):void VaultService.createVault(vault_name).then(function(vault){$scope.vaults.push(vault);var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),VaultService.setActiveVault(_vault),SettingsService.setSetting("defaultVaultPass",null),SettingsService.setSetting("defaultVault",null);var test_credential=CredentialService.newCredential();test_credential.label="Test key for vault "+vault_name,test_credential.hidden=!0,test_credential.vault_id=vault.vault_id,test_credential.password="lorum ipsum",CredentialService.createCredential(test_credential).then(function(){_vault.public_sharing_key=angular.copy($scope.sharing_keys.public_sharing_key),_vault.private_sharing_key=EncryptService.encryptString(angular.copy($scope.sharing_keys.private_sharing_key)),VaultService.updateSharingKeys(_vault).then(function(){_loginToVault(vault,vault_key)})})})}}])}(),function(){angular.module("passmanApp").controller("RequestDeleteCtrl",["$scope","$location","$http","$routeParams","VaultService","NotificationService","$translate",function($scope,$location,$http,$routeParams,VaultService,NotificationService,$translate){$scope.reason="",VaultService.getVault({guid:$routeParams.vault_id}).then(function(vault){$scope.pending_deletion=vault.delete_request_pending}),$scope.requestDeletion=function(){var queryUrl=OC.generateUrl("apps/passman/admin/request-deletion/"+$routeParams.vault_id),params={reason:$scope.reason};$http.post(queryUrl,params).then(function(){NotificationService.showNotification($translate.instant("deletion.requested"),5e3),$location.path("#/")})},$scope.removeRequestDeletion=function(){var queryUrl=OC.generateUrl("apps/passman/admin/request-deletion/"+$routeParams.vault_id);$http.delete(queryUrl).then(function(){NotificationService.showNotification($translate.instant("deletion.removed"),5e3),$location.path("#/")})}}])}(),angular.module("templates-main",["views/credential_revisions.html","views/edit_credential.html","views/partials/credential_template.html","views/partials/forms/edit_credential/basics.html","views/partials/forms/edit_credential/custom_fields.html","views/partials/forms/edit_credential/files.html","views/partials/forms/edit_credential/otp.html","views/partials/forms/edit_credential/password.html","views/partials/forms/settings/export.html","views/partials/forms/settings/general_settings.html","views/partials/forms/settings/generic_csv_import.html","views/partials/forms/settings/import.html","views/partials/forms/settings/password_settings.html","views/partials/forms/settings/sharing.html","views/partials/forms/settings/tool.html","views/partials/forms/share_credential/basics.html","views/partials/forms/share_credential/link_sharing.html","views/partials/icon-picker.html","views/partials/password-meter.html","views/settings.html","views/share_credential.html","views/show_vault.html","views/vault_req_deletion.html","views/vaults.html"]),angular.module("views/credential_revisions.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/credential_revisions.html",'<div class="main_list" off-click-filter="\'.download-js-link, .sidebar-shown, #app-sidebar\'"><div id="passman-controls"><div class="actions creatable"><div class="breadcrumb"><div class="crumb svg ui-droppable"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg"><a ng-click="cancelRevision()">{{active_vault.name}}</a></div><div class="crumb svg last"><a ng-if="storedCredential.credential_id">{{ \'showing.revisions\' | translate}} "{{revision.credential_data.label}}"</a></div></div></div></div><table class="credential-table" ng-init="menuOpen = false;"><tr ng-repeat="revision in revisions | orderBy:\'-created\'" ng-click="selectRevision(revision)" ng-class="{\'selected\': selectedRevision.revision_id == revision.revision_id}"><td><span class="icon"><i class="fa fa-lock"></i></span> <span class="label">{{ \'revision.of\' | translate}} {{revision.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}} ({{revision.credential_data.label}}) <span ng-if="revision.edited_by">{{ \'revision.edited.by\' | translate}} {{revision.edited_by}}</span></span></td></tr><tr ng-show="revisions.length == 0"><td>{{ \'no.revisions\' | translate}}</td></tr></table></div><div id="app-sidebar" class="detailsView scroll-container app_sidebar" off-click="closeSelected()" ng-show="selectedRevision"><span class="close icon-close" ng-click="closeSelected()" alt="Close"></span> <b ng-show="selectedRevision">{{ \'revision.of\' | translate}} {{selectedRevision.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</b><div class="credential-data"><div class="row" ng-show="selectedRevision.credential_data.label"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'label\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.label"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.username"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'account\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.username"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.password"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'password\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.password" secret="\'true\'"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.otp.secret"><div class="col-xs-4 col-md-3 col-lg-3">{{\'otp\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span otp-generator secret="selectedRevision.credential_data.otp.secret"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.email"><div class="col-xs-4 col-md-3 col-lg-3">{{\'email\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.email"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.url"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'url\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.url"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.description"><div class="col-xs-4 col-md-3 col-lg-3">{{\'notes\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.description_html"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.files.length > 0"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'files\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><div ng-repeat="file in selectedRevision.credential_data.files" class="link" ng-click="downloadFile(selectedRevision.credential_data, file)">{{file.filename}} ({{file.size | bytes}})</div></div></div><div class="row" ng-repeat="field in selectedRevision.credential_data.custom_fields"><div class="col-xs-4 col-md-3 col-lg-3">{{field.label}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="field.value" secret="field.secret" ng-if="field.field_type !== \'file\' || !field.field_type"></span> <span ng-if="field.field_type === \'file\'" class="link" ng-click="downloadFile(selectedCredential, field.value)">{{field.value.filename}} ({{field.value.size | bytes}})</span></div></div><div class="row" ng-show="selectedRevision.credential_data.expire_time > 0"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'expire.time\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9">{{selectedRevision.credential_data.expire_time * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row" ng-show="selectedRevision.credential_data.changed"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'changed\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9">{{selectedRevision.credential_data.changed * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row" ng-show="selectedRevision.credential_data.created"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'created\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9">{{selectedRevision.credential_data.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row"><div class="col-xs-12"><div class="tags"><span class="tag" ng-repeat="tag in selectedRevision.credential_data.tags">{{tag.text}}</span></div></div></div></div><div ng-show="selectedRevision"><button class="button" ng-click="restoreRevision(selectedRevision)"><span class="fa fa-edit"></span> {{ \'restore.revision\' | translate}}</button> <button class="button" ng-click="deleteRevision(selectedRevision)"><span class="fa fa-trash"></span> {{ \'delete.revision\' | translate}}</button></div></div>')}]),angular.module("views/edit_credential.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/edit_credential.html",'<div id="passman-controls"><div class="breadcrumb"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg" data-dir="/Test"><a ng-click="cancel()">{{active_vault.name}}</a></div><div class="crumb svg last" data-dir="/Test"><a ng-if="storedCredential.credential_id">{{ \'edit.credential\' | translate}} "{{storedCredential.label}}"</a> <a ng-if="!storedCredential.credential_id">{{ \'create.credential\' | translate}}</a></div></div></div></div><div><ul class="tab_header"><li ng-repeat="tab in tabs track by $index" class="tab" ng-class="isActiveTab(tab)? \'active\' : \'inactive\'" ng-click="onClickTab(tab)" use-theme color="\'true\'">{{tab.title}}<div class="indicator" use-theme negative="\'true\'"></div></li></ul><div class="tab_container edit_credential" use-theme type="\'border-top-color\'"><div ng-include="currentTab.url"></div><button ng-click="saveCredential()" ng-disabled="saving"><i class="fa fa-spinner fa-spin" ng-show="saving"></i> {{ \'save\' | translate}}</button> <button ng-click="cancel()">{{ \'cancel\' | translate}}</button></div></div>')}]),angular.module("views/partials/credential_template.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/credential_template.html",'<div class="credential-data"><div class="row" ng-show="credential.label && showLabel"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'label\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.label"></span></div></div><div class="compromised-details" ng-show="credential.compromised"><div class="icon-error-color icon"></div><div class="text">{{ \'compromised.warning\' | translate }}</div></div><div class="row" ng-show="credential.username"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'account\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.username"></span></div></div><div class="row" ng-show="credential.password"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'password\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.password" secret="\'true\'"></span></div></div><div class="row" ng-show="credential.otp.secret"><div class="col-xs-4 col-md-3 col-lg-3">{{\'otp\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span otp-generator secret="credential.otp.secret"></span></div></div><div class="row" ng-show="credential.email"><div class="col-xs-4 col-md-3 col-lg-3">{{\'email\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.email"></span></div></div><div class="row" ng-show="credential.url"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'url\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.url" url="true"></span></div></div><div class="row" ng-show="credential.description"><div class="col-xs-4 col-md-3 col-lg-3">{{\'notes\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.description_html"></span></div></div><div class="row" ng-show="credential.files.length > 0"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'files\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><div ng-repeat="file in credential.files"><a class="link" ng-click="downloadFile(credential, file)">{{file.filename}} ({{file.size | bytes}})</a><br></div></div></div><div class="row" ng-repeat="field in credential.custom_fields"><div class="col-xs-4 col-md-3 col-lg-3">{{field.label}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="field.value" secret="field.secret" ng-if="field.field_type !== \'file\' || !field.field_type"></span> <span ng-if="field.field_type === \'file\'" class="link" ng-click="downloadFile(credential, field.value)">{{field.value.filename}} ({{field.value.size | bytes}})</span></div></div><div class="row" ng-show="credential.expire_time > 0"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'expire.time\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9">{{credential.expire_time * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row" ng-show="credential.changed"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'changed\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9">{{credential.changed * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row" ng-show="credential.created"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'created\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9">{{credential.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row"><div class="col-xs-12"><div class="tags"><span class="tag" ng-repeat="tag in credential.tags track by $index">{{tag.text}}</span></div></div></div></div>')}]),angular.module("views/partials/forms/edit_credential/basics.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/edit_credential/basics.html",'<div class="row"><div class="col-xs-12 col-md-6"><label>{{ \'label\' | translate}}</label><div class="icon-label"><div class="icon-picker" icon-picker="storedCredential"></div><input type="text" class="form-control" ng-model="storedCredential.label"></div><label>{{ \'username\' | translate}}</label><div><input type="text" ng-model="storedCredential.username"></div><label>{{ \'email\' | translate}}</label><div><input type="text" ng-model="storedCredential.email"></div><label>{{ \'password\' | translate}}</label><div><password-gen ng-model="storedCredential.password" settings="pwSettings" callback="pwGenerated"></password-gen><ng-password-meter password="storedCredential.password"></ng-password-meter></div><div><label>{{ \'password.r\' | translate}}</label><input type="password" ng-model="storedCredential.password_repeat"></div><label>{{ \'url\' | translate}}</label><div><input type="text" ng-model="storedCredential.url"></div></div><div class="col-xs-12 col-md-6"><label>{{ \'notes\' | translate}}</label><div><textarea class="credential_textarea" ng-model="storedCredential.description"></textarea></div><label>{{ \'add.tag\' | translate}}</label><div class="tags_input"><tags-input ng-model="storedCredential.tags" replace-spaces-with-dashes="false"><auto-complete source="getTags($query)" min-length="0"></auto-complete></tags-input></div></div><div class="col-xs-12 col-md-6"><button class="compromised-button" ng-click="compromise()">{{ \'compromised.label\' | translate}}</button><div class="compromised-details" ng-show="storedCredential.compromised"><div class="icon-error-color icon"></div><div class="text">{{ \'compromised.warning\' | translate }}</div></div></div></div>');
+download(file_data,escapeHTML(file.filename),file.mimetype)};credential.hasOwnProperty("acl")?ShareService.downloadSharedFile(credential,file).then(callback):FileService.getFile(file).then(callback)},scope.showLabel=attrs.hasOwnProperty("showLabel")}}}])}(),function(){angular.module("passmanApp").directive("fileSelect",["$window",function($window){return{restrict:"A",scope:{success:"&success",error:"&error",progress:"&progress"},link:function(scope,el){scope.success=scope.success(),scope.error=scope.error(),scope.progress=scope.progress();var _currentFile,fileReader=new $window.FileReader;fileReader.onload=function(){_currentFile.data=fileReader.result,scope.success(_currentFile)},fileReader.onprogress=function(event){var percent=event.loaded/event.total*100;scope.progress&&scope.$apply(scope.progress({file_total:event.total,file_loaded:event.loaded,file_percent:percent}))},fileReader.onerror=function(){scope.error()},el.bind("change",function(e){var i,_queueTotalFileSize=0;for(i=0;i<e.target.files.length;i++)_queueTotalFileSize+=e.target.files[i].size;for(i=0;i<e.target.files.length;i++){_currentFile=e.target.files[i];var mb_limit=5;_currentFile.size>1024*mb_limit*1024&&scope.error("TO_BIG",_currentFile),fileReader.readAsDataURL(_currentFile)}})}}}])}(),function(){angular.module("passmanApp").directive("credentialIcon",["$window",function($window){return{template:'<img ng-src="{{ iconUrl }}" class="icon-image">',restrict:"E",scope:{credential:"="},link:function(scope,element){scope.credential&&scope.$watch("credential",function(){if(scope.credential.icon&&scope.credential.icon.type)scope.iconUrl="data:image/"+scope.credential.icon.type+";base64,"+scope.credential.icon.content;else if(scope.credential.url){var url=window.btoa(angular.copy(scope.credential.url)).replace("/","_");scope.iconUrl=OC.generateUrl("apps/passman/api/v2/icon/")+url+"/"+scope.credential.credential_id}},!0)}}}])}(),function(){angular.module("passmanApp").directive("iconPicker",["$window","IconService","$http","NotificationService","$translate",function($window,IconService,$http,NotificationService,$translate){return{templateUrl:"views/partials/icon-picker.html",restrict:"A",scope:{credential:"=iconPicker"},link:function(scope,element){IconService.getIcons().then(function(icons){scope.iconGroupsAll=icons,scope.iconGroups=icons}),scope.selectIcon=function(icon){scope.selectedIcon=icon},scope.jumpToGroup=function(groupName){var offset=$("#"+groupName).position();$(".iconList").scrollTop(offset.top)};var search=document.getElementById("iconPicker-Search");search.addEventListener("keypress",function(e){13===e.keyCode&&e.preventDefault()}),search.addEventListener("keyup",function(e){var g={};g.Numix=[],scope.iconGroupsAll.Numix.forEach(function(element){scope.isAllowedIcon(element)&&g.Numix.push(element)}),g["essential-collection"]=[],scope.iconGroupsAll["essential-collection"].forEach(function(element){scope.isAllowedIcon(element)&&g["essential-collection"].push(element)}),g["font-awesome"]=[],scope.iconGroupsAll["font-awesome"].forEach(function(element){scope.isAllowedIcon(element)&&g["font-awesome"].push(element)}),scope.iconGroups=g,scope.$apply()}),scope.isAllowedIcon=function(IconElement){var searchval=search.value.toLowerCase(),urlCropped=IconElement.url.substring(IconElement.url.lastIndexOf("/")+1,IconElement.url.length);return!(!urlCropped.includes(searchval)&&IconElement.pack.toLowerCase()!==searchval)},$("#iconPicker-CustomIcon").on("change",function(ev){scope.customIcon={};var f=ev.target.files[0],fr=new FileReader;fr.onload=function(ev2){scope.customIcon.data=ev2.target.result,scope.$apply()},fr.readAsDataURL(f)}),scope.deleteIcon=function(){delete scope.credential.icon.type,delete scope.credential.icon.content,delete scope.credential.icon,$("#iconPicker").dialog("close")},scope.refreshUrlIcon=function(){NotificationService.showNotification($translate.instant("use.icon.refresh.trying"),5e3);var queryUrl=OC.generateUrl("apps/passman/api/v2/geticon/"+btoa(scope.credential.url));$http.get(queryUrl).then(function(response){"undefined"!=typeof response.data.content?(scope.customIcon={},scope.customIcon.data="data:image/"+response.data.type+";base64,"+response.data.content):NotificationService.showNotification($translate.instant("use.icon.refresh.error"),5e3)})},scope.useIcon=function(){if(scope.customIcon){var data=scope.customIcon.data;scope.credential.icon.type=data.substring(data.lastIndexOf(":")+1,data.lastIndexOf(";")),scope.credential.icon.content=data.substring(data.lastIndexOf(",")+1,data.length)}else $http.get(scope.selectedIcon.url).then(function(result){var base64Data=window.btoa(result.data),mimeType="svg+xml";scope.credential.icon||(scope.credential.icon={}),scope.credential.icon.type=mimeType,scope.credential.icon.content=base64Data});$("#iconPicker").dialog("close")},$(element).click(function(){$("#iconPicker").dialog({width:800,height:380,modal:!0,dialogClass:"iconpicker-dialog",close:function(){$(this).dialog("destroy")}})})}}}])}(),function(){angular.module("passmanApp").directive("ngEnter",function(){return function(scope,element,attrs){element.bind("keydown keypress",function(event){13===event.which&&(scope.$apply(function(){scope.$eval(attrs.ngEnter)}),event.preventDefault())})}})}(),function(){angular.module("passmanApp").directive("otpGenerator",["$compile","$timeout",function($compile,$timeout){function dec2hex(s){return(s<15.5?"0":"")+Math.round(s).toString(16)}function hex2dec(s){return parseInt(s,16)}function base32tohex(base32){if(base32){var i,base32chars="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bits="",hex="";for(i=0;i<base32.length;i++){var val=base32chars.indexOf(base32.charAt(i).toUpperCase());bits+=leftpad(val.toString(2),5,"0")}for(i=0;i+4<=bits.length;i+=4){var chunk=bits.substr(i,4);hex+=parseInt(chunk,2).toString(16)}return hex.length%2?hex+"0":hex}}function leftpad(str,len,pad){return len+1>=str.length&&(str=Array(len+1-str.length).join(pad)+str),str}return{restrict:"A",template:'<span class="otp_generator"><span credential-field value="otp" secret="\'true\'"></span> <span ng-bind="timeleft"></span></span>',transclude:!1,scope:{secret:"="},replace:!0,link:function(scope){scope.otp=null,scope.timeleft=null,scope.timer=null;var updateOtp=function(){if(scope.secret){var key=base32tohex(scope.secret),epoch=Math.round((new Date).getTime()/1e3),time=leftpad(dec2hex(Math.floor(epoch/30)),16,"0"),hmacObj=new jsSHA(time,"HEX"),hmac=hmacObj.getHMAC(key,"HEX","SHA-1","HEX"),offset=hex2dec(hmac.substring(hmac.length-1)),otp=(hex2dec(hmac.substr(2*offset,8))&hex2dec("7fffffff"))+"";otp=otp.substr(otp.length-6,6),scope.otp=otp}},timer=function(){var epoch=Math.round((new Date).getTime()/1e3),countDown=30-epoch%30;epoch%30===0&&updateOtp(),scope.timeleft=countDown,scope.timer=$timeout(timer,1e3)};scope.$watch("secret",function(n){n?($timeout.cancel(scope.timer),updateOtp(),timer()):$timeout.cancel(scope.timer)},!0),scope.$on("$destroy",function(){$timeout.cancel(scope.timer)})}}}])}(),function(){angular.module("passmanApp").directive("passwordGen",function($timeout,$translate){function Arcfour(){this.j=this.i=0,this.S=[]}function ARC4init(r){var t,n,e;for(t=0;256>t;++t)this.S[t]=t;for(t=n=0;256>t;++t)n=n+this.S[t]+r[t%r.length]&255,e=this.S[t],this.S[t]=this.S[n],this.S[n]=e;this.j=this.i=0}function ARC4next(){var r;return this.i=this.i+1&255,this.j=this.j+this.S[this.i]&255,r=this.S[this.i],this.S[this.i]=this.S[this.j],this.S[this.j]=r,this.S[r+this.S[this.i]&255]}function prng_newstate(){return new Arcfour}function generatePassword(r,t,n,e,o,i,p,g){var _,a,s,f,d,h,u,l,c,v,w,y,m;if(void 0===r&&(r=8+get_random(0,1)),r>256&&(r=256,document.getElementById("length").value=256),i>256&&(i=256),void 0===t&&(t=!0),void 0===n&&(n=!0),void 0===e&&(e=!0),void 0===o&&(o=!1),void 0===i&&(i=0),void 0===p&&(p=!1),void 0===g&&(g=!0),_=0,a=0,s=0,g&&(_=a=s=1),f=[],n&&_>0)for(d=0;_>d;d++)f[f.length]="L";if(t&&a>0)for(d=0;a>d;d++)f[f.length]="U";if(e&&i>0)for(d=0;i>d;d++)f[f.length]="D";if(o&&s>0)for(d=0;s>d;d++)f[f.length]="S";for(;f.length<r;)f[f.length]="A";for(f.sort(function(){return 2*get_random(0,1)-1}),h="",u="abcdefghjkmnpqrstuvwxyz",p||(u+="ilo"),n&&(h+=u),l="ABCDEFGHJKMNPQRSTUVWXYZ",p||(l+="ILO"),t&&(h+=l),c="23456789",p||(c+="10"),e&&(h+=c),v="!@#$%^&*",o&&(h+=v),w="",y=0;r>y;y++){switch(f[y]){case"L":m=u;break;case"U":m=l;break;case"D":m=c;break;case"S":m=v;break;case"A":m=h}d=get_random(0,m.length-1),w+=m.charAt(d)}return w}function rng_seed_int(r){rng_pool[rng_pptr++]^=255&r,rng_pool[rng_pptr++]^=r>>8&255,rng_pool[rng_pptr++]^=r>>16&255,rng_pool[rng_pptr++]^=r>>24&255,rng_pptr>=rng_psize&&(rng_pptr-=rng_psize)}function rng_seed_time(){rng_seed_int((new Date).getTime())}function rng_get_byte(){if(null==rng_state){for(rng_seed_time(),rng_state=prng_newstate(),rng_state.init(rng_pool),rng_pptr=0;rng_pptr<rng_pool.length;++rng_pptr)rng_pool[rng_pptr]=0;rng_pptr=0}return rng_state.next()}function rng_get_bytes(r){var t;for(t=0;t<r.length;++t)r[t]=rng_get_byte()}function SecureRandom(){}function get_random(r,t){var n,e,o,i=t-r+1;for(rng_seed_time(),n=[],e=0;4>e;e++)n[e]=0;for(rng_get_bytes(n),o=0,e=0;4>e;e++)o*=256,o+=n[e];return o%=i,o+=r}var rng_psize,rng_state,rng_pool,rng_pptr,t,z,crypt_obj,num,buf,i;if(Arcfour.prototype.init=ARC4init,Arcfour.prototype.next=ARC4next,rng_psize=256,null==rng_pool){if(rng_pool=[],rng_pptr=0,"undefined"!=typeof navigator&&"Netscape"==navigator.appName&&navigator.appVersion<"5"&&"undefined"!=typeof window&&window.crypto)for(z=window.crypto.random(32),t=0;t<z.length;++t)rng_pool[rng_pptr++]=255&z.charCodeAt(t);try{if(crypt_obj=null,"undefined"!=typeof window&&void 0!==window.crypto?crypt_obj=window.crypto:"undefined"!=typeof window&&void 0!==window.msCrypto&&(crypt_obj=window.msCrypto),void 0!==crypt_obj&&"function"==typeof crypt_obj.getRandomValues&&rng_psize>rng_pptr)for(num=Math.floor((rng_psize-rng_pptr)/2)+1,buf=new Uint16Array(num),crypt_obj.getRandomValues(buf),i=0;i<buf.length;i++)t=buf[i],rng_pool[rng_pptr++]=t>>>8,rng_pool[rng_pptr++]=255&t}catch(e){}for(;rng_psize>rng_pptr;)t=Math.floor(65536*sjcl.random.randomWords(1)),rng_pool[rng_pptr++]=t>>>8,rng_pool[rng_pptr++]=255&t;rng_pptr=0,rng_seed_time()}return SecureRandom.prototype.nextBytes=rng_get_bytes,{scope:{model:"=ngModel",length:"@",placeholder:"@",settings:"=settings",callback:"&callback"},restrict:"E",replace:"true",template:'<div class=" pw-gen "><div class="input-group "><input ng-show="!passwordVisible" type="password" ng-disabled="disabled" class="form-control " ng-model="password" placeholder="{{placeholder}}"><input ng-show="passwordVisible" type="text" ng-disabled="disabled" class="form-control " ng-model="password" placeholder="{{placeholder}}"><span class="generate_pw"><div class="cell" tooltip="gen_msg" ng-click="generatePasswordStart()"><i class="fa fa-refresh"></i></div><div class="cell" tooltip="tggltxt" ng-click="toggleVisibility()"><i class="fa" ng-class="{\'fa-eye\': passwordVisible, \'fa-eye-slash\': !passwordVisible }"></i></div><div class="cell" tooltip="\'Copy password to clipboard\'"><i class="fa fa-clipboard" ngclipboard-success="onSuccess(e);" ngclipboard-error="onError(e);" ngclipboard data-clipboard-text="{{password}}"></i></div></button></div></div>',link:function(scope){scope.callback=scope.callback(),scope.$watch("model",function(){scope.password=scope.model}),scope.passwordVisible=!1,scope.toggleVisibility=function(){scope.passwordVisible=!scope.passwordVisible},scope.passwordNotNull=!1,scope.$watch("settings",function(){scope.settings&&!scope.password&&scope.settings.generateOnCreate&&scope.generatePasswordStart()}),$translate(["password.gen","password.copy","copied","toggle.visibility"]).then(function(translations){scope.tggltxt=translations["toggle.visibility"],scope.copy_msg=translations["password.copy"],scope.gen_msg=translations["password.gen"]}),scope.$watch("password",function(){scope.model=scope.password,scope.password_repeat=scope.model}),scope.onSuccess=function(e){OC.Notification.showTemporary($translate.instant("password.copied")),e.clearSelection()},scope.onError=function(){OC.Notification.showTemporary("Press Ctrl+C to copy!")},scope.progressDivShow=!1,scope.generatePasswordStart=function(){scope.progressDivShow=!0,scope.progressValue=0,scope.progressWidth={width:scope.progressValue+"%"},scope.generatePasswordProgress()},scope.generatePasswordProgress=function(){$timeout(function(){scope.progressValue<100?(scope.password=scope._generatePassword(scope.settings),scope.progressValue+=10,scope.progressWidth={width:scope.progressValue+"%"},scope.disabled=!0,scope.generatePasswordProgress()):(scope.disabled=!1,scope.callback&&scope.callback(scope.password))},10)},scope._generatePassword=function(settings){var _settings={length:12,useUppercase:!0,useLowercase:!0,useDigits:!0,useSpecialChars:!0,minimumDigitCount:3,avoidAmbiguousCharacters:!1,requireEveryCharType:!0};settings=angular.merge(_settings,settings);var password=generatePassword(settings.length,settings.useUppercase,settings.useLowercase,settings.useDigits,settings.useSpecialChars,settings.minimumDigitCount,settings.avoidAmbiguousCharacters,settings.requireEveryCharType);return password}}}})}(),function(){angular.module("passmanApp").directive("progressBar",["$translate",function($translate){return{restrict:"A",template:'<div class="progress"><div class="progress-bar" role="progressbar" aria-valuenow="{{progress}}"aria-valuemin="0" aria-valuemax="100" style="width:{{progress}}%;" use-theme><span class="sr-only">{{progress}}% {{completed_text}}</span><span ng-if="index && total" class="progress-label" use-theme type="\'color\'" color="\'true\'">{{index}} / {{total}}</span><span ng-if="!index && !total" class="progress-label" use-theme type="\'color\'" color="\'true\'">{{progress}}%</span></div></div>',scope:{progress:"=progressBar",index:"=index",total:"=total"},link:function(scope){$translate(["complete"]).then(function(translations){scope.completed_text=translations.complete})}}}])}(),function(){angular.module("passmanApp").directive("qrread",["$parse",function($parse){return{scope:!0,link:function(scope,element,attributes){var invoker=$parse(attributes.onRead);scope.imageData=null,qrcode.callback=function(result){invoker(scope,{qrdata:{qrData:result,image:scope.imageData}})},element.bind("change",function(changeEvent){var reader=new FileReader,file=changeEvent.target.files[0];reader.readAsDataURL(file),reader.onload=function(){return function(e){scope.imageData=e.target.result,qrcode.decode(e.target.result)}}(file)})}}}])}(),function(){angular.module("passmanApp").directive("tooltip",[function(){return{restrict:"A",scope:{tooltip:"=tooltip"},link:function(scope,el){scope.$watch("tooltip",function(){scope.tooltip&&(jQuery(el).attr("title",scope.tooltip),jQuery(el).tooltip(),jQuery(el).attr("data-original-title",scope.tooltip),jQuery(".tooltip-inner").text(scope.tooltip),jQuery(el).is(":visible"))})}}}])}(),function(){angular.module("passmanApp").directive("useTheme",[function(){function invertColor(hexTripletColor){var color=hexTripletColor;return color=color.substring(1),color=parseInt(color,16),color^=16777215,color=color.toString(16),color=("000000"+color).slice(-6),color="#"+color}return{restrict:"A",scope:{type:"=type",color:"=",negative:"="},link:function(scope,el){var _color=jQuery("#header").css("background-color"),_bg=_color;scope.negative&&(_bg=invertColor(_bg)),scope.type?jQuery(el).css(scope.type,_bg):jQuery(el).css("background-color",_bg),scope.color&&jQuery(el).css("color",invertColor(_color))}}}])}();var PassmanImporter={};!function(window,$,PassmanImporter){PassmanImporter.parseRow_=function(row){row=row.trim();var isQuoted=!1;return'"'===row.charAt(0)&&(row=row.substring(1),isQuoted=!0),'"'===row.charAt(row.length-2)&&(row=row.substring(0,row.length-2),isQuoted=!0),row=isQuoted===!0?row.split('","'):row.split(",")},PassmanImporter.htmlDecode=function(input){var e=document.createElement("div");return e.innerHTML=input,e.childNodes[0].nodeValue},PassmanImporter.toObject_=function(headings,row){for(var result={},i=0,ii=row.length;i<ii;i++)headings[i]?(headings[i]=headings[i].replace(",","_").toLowerCase().replace(" ","_").replace("(","").replace(")","").replace('"',""),result[headings[i]]=row[i]):result[ii]=row[i];return result},PassmanImporter.join_=function(arr,sep){for(var parts=[],i=0,ii=arr.length;i<ii;i++)arr[i]&&parts.push(arr[i]);return parts.join(sep)},PassmanImporter.newCredential=function(){var credential={credential_id:null,guid:null,vault_id:null,label:null,description:null,created:null,changed:null,tags:[],email:null,username:null,password:null,url:null,favicon:null,renew_interval:null,expire_time:0,delete_time:0,files:[],custom_fields:[],otp:{},hidden:!1,compromised:!1};return credential},PassmanImporter.readCsv=function(csv,hasHeadings){hasHeadings=void 0===hasHeadings||hasHeadings;var lines=[];return Papa.parse(csv,{complete:function(results){if(results.data)for(var headings=hasHeadings?results.data[0]:null,start=hasHeadings?1:0,i=start;i<results.data.length;i++){var _row=hasHeadings?PassmanImporter.toObject_(headings,results.data[i]):results.data[i];lines.push(_row)}}}),lines},PassmanImporter.readJson=function(string){return JSON.parse(string)}}(window,$,PassmanImporter),String.prototype.replaceAll=function(search,replacement){var target=this;return target.replace(new RegExp(search,"g"),replacement)},Array.prototype.clean=function(deleteValue){for(var i=0;i<this.length;i++)this[i]===deleteValue&&(this.splice(i,1),i--);return this};var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.clippers={info:{name:"Clipperz.is",id:"clippers",exportSteps:["Go to menu -> Export -> Download HTML + JSON. Fields will be imported as custom fields."]}},PassmanImporter.clippers.readFile=function(file_data){return new C_Promise(function(){var credential_list=[],re=/<textarea>(.*?)<\/textarea>/gi,matches=re.exec(file_data);if(matches){var raw_json=matches[0].substring(10);raw_json=PassmanImporter.htmlDecode(raw_json.slice(0,-11));for(var json_objects=PassmanImporter.readJson(raw_json),i=0;i<json_objects.length;i++){var card=json_objects[i];re=/(\w+)/gi;var tags=card.label.match(re);card.label=card.label.replace(tags.join(" "),"").trim(),tags=tags.map(function(item){return{text:item.replace("","")}});var _credential=PassmanImporter.newCredential();_credential.label=card.label,_credential.description=card.data.notes,_credential.tags=tags;for(var field in card.currentVersion.fields){var field_data=card.currentVersion.fields[field];_credential.custom_fields.push({label:field_data.label,value:field_data.value,secret:field_data.hidden===!0})}_credential.label&&credential_list.push(_credential);var progress={percent:i/json_objects.length*100,loaded:i,total:json_objects.length};this.call_progress(progress)}}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.dashLaneCsv={info:{name:"Dashlane 4 csv",id:"dashLaneCsv",exportSteps:["Create an csv export. Go to File -> export -> Unsecured archive (readable) in CSV format"]}},PassmanImporter.dashLaneCsv.readFile=function(file_data){return new C_Promise(function(){for(var rows=file_data.split("\n"),credential_list=[],i=0;i<rows.length;i++){var row=rows[i],row_data=row.split('","');'"'===row_data[0].charAt(0)&&(row_data[0]=row_data[0].substring(1)),'"'===row_data[row_data.length-1].toString().charAt(row_data[row_data.length-1].length-1)&&(row_data[row_data.length-1]=row_data[row_data.length-1].substring(0,row_data[row_data.length-1].length-1));var _credential=PassmanImporter.newCredential();_credential.label=row_data[0],_credential.username=row_data[2],_credential.password=row_data[row_data.length-2],_credential.url=row_data[0],_credential.description=row_data[row_data.length-1],_credential.label&&credential_list.push(_credential);var progress={percent:i/rows.length*100,loaded:i,total:rows.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){function parseEnpass(fileData){var lastProperty,matches,loginBlocks,property;loginBlocks=fileData.replaceAll("Title :","<~passman~>\nTitle :").split("<~passman~>\n").clean("");for(var regex=/(.*) : (.*)/,results=[],l=0;l<loginBlocks.length;l++){for(var loginBlock=loginBlocks[l],lrow=loginBlock.split("\n"),result={},r=0;r<lrow.length;r++){var row=lrow[r];matches=regex.exec(row),matches?(property=matches[1],result[property]=matches[2]):lastProperty&&(result[lastProperty]+="\n"+row),property&&(lastProperty=property)}results.push(result)}return results}PassmanImporter.EnPassTXT={info:{name:"EnPass text file",id:"EnPassTXT",exportSteps:['Access your Enpass Database. Select "File" > "Export" > "As Text"']}},PassmanImporter.EnPassTXT.readFile=function(file_data){var mapper={Title:"label",Username:"username",Password:"password",Email:"email",Url:"url",Note:"description"},secret_fields=["cvc","pin","security answer"];return new C_Promise(function(){for(var credential_list=[],credentials=parseEnpass(file_data),i=0;i<credentials.length;i++){var enpass_credential=credentials[i],new_credential=PassmanImporter.newCredential();for(var key in enpass_credential)if(enpass_credential.hasOwnProperty(key))if(mapper.hasOwnProperty(key)){var prop=mapper[key];new_credential[prop]=enpass_credential[key]}else if("TOTP"!==key){var isSecret=secret_fields.indexOf(key.toLowerCase())!==-1?1:0;new_credential.custom_fields.push({label:key,value:enpass_credential[key],secret:isSecret})}enpass_credential.hasOwnProperty("TOTP")&&(new_credential.otp.secret=enpass_credential.TOTP);var progress={percent:i/credentials.length*100,loaded:i,total:credentials.length};credential_list.push(new_credential),this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.keepassCsv={info:{name:"KeePass csv",id:"keepassCsv",exportSteps:["If using Keepass V1: Create an csv export with the following options enabled: http://i.imgur.com/CaeTA4d.png","With Keepass V2 or Keepass XC no configuration is needed"]}},PassmanImporter.keepassCsv.readFile=function(file_data){var p=new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=row.account,_credential.username=row.login_name,_credential.password=row.password,_credential.url=row.web_site,_credential.description=row.comments,row.hasOwnProperty("expires")&&(row.expires=row.expires.replace('"',""),_credential.expire_time=new Date(row.expires).getTime()/1e3);var tags=row.group?[{text:row.group}]:[];if(row.hasOwnProperty("group_tree"))for(var exploded_tree=row.group_tree.split("\\\\"),t=0;t<exploded_tree.length;t++)exploded_tree[t].trim().length>0&&tags.push({text:exploded_tree[t].trim()});_credential.tags=tags,credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)});return p}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.lastpassCsv={info:{name:"LastPass csv",id:"lastpassCsv",exportSteps:["Create an csv export. Go to More options -> Advanced -> Export -> Last Pass CSV File"]}},PassmanImporter.lastpassCsv.readFile=function(file_data){return new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=PassmanImporter.htmlDecode(row.name),_credential.username=row.username,_credential.password=row.password,_credential.url=row.url,_credential.tags=row.grouping?[{text:row.grouping}]:[],_credential.description=row.extra,_credential.label&&"undefined"!==_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){var steps=["Backups for the Passwords app need to be enabled on the Admin panel (they are disabled by default).","On the Passwords App, in the bottom left corner, press Settings",'Press "Download Backup"',"Confirm the export and save the file"];PassmanImporter.passwordsApp={info:{name:"Passwords App csv",id:"passwordsApp",exportSteps:steps}},PassmanImporter.passwordsApp.readFile=function(file_data){var p=new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=row.website+" - "+row.username,_credential.username=row.username,_credential.password=row.password,_credential.url=row.fulladdress,_credential.description=row.notes,credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)});return p}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.padlock={info:{name:"Padlock",id:"padlock",exportSteps:["Create a csv export. Go to Menu -> Settings -> Export Data and copy text into a .csv file"]}},PassmanImporter.padlock.readFile=function(file_data){return new C_Promise(function(){for(var rows=PassmanImporter.readCsv(file_data,!0),credential_list=[],i=0;i<rows.length;i++){var row=rows[i],_credential=PassmanImporter.newCredential(),j=0;for(var k in row)row[k]&&("name"!=k?"username"!=k?"password"!=k?"url"!=k.toLowerCase()?"e-mail"!=k.toLowerCase()&&"email"!=k.toLowerCase()?"description"!=k.toLowerCase()?(_credential.custom_fields[j]={label:k,value:row[k],secret:!0,field_type:"text"},j++):_credential.description=row[k]:_credential.email=row[k]:_credential.url=row[k]:_credential.password=row.password:_credential.username=row.username:_credential.label=row.name);_credential.label&&credential_list.push(_credential);var progress={percent:i/rows.length*100,loaded:i,total:rows.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.passmanJson={info:{name:"Passman JSON",id:"passmanJson",exportSteps:["Export the item in passman as passman json, with all fields enabled"]}},PassmanImporter.passmanJson.readFile=function(file_data){return new C_Promise(function(){for(var parsed_json=PassmanImporter.readJson(file_data),credential_list=[],i=0;i<parsed_json.length;i++){var item=parsed_json[i],_credential=PassmanImporter.newCredential();if(_credential.label=item.label,_credential.username=item.username,_credential.password=item.password,_credential.email=item.email,_credential.url=item.url,_credential.tags=item.tags,_credential.description=item.description,item.hasOwnProperty("customFields")&&item.customFields.length>0)for(var cf=0;cf<item.customFields.length;cf++)_credential.custom_fields.push({label:item.customFields[cf].label,value:item.customFields[cf].value,secret:"1"===item.customFields[cf].clicktoshow});item.hasOwnProperty("otp")&&item.otp&&(_credential.otp={issuer:item.otp.issuer,label:item.otp.label,qr_uri:{image:item.otp.qrCode,qrData:""},secret:item.otp.secret,type:item.otp.type}),_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_json.length*100,loaded:i,total:parsed_json.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.passpackCsv={info:{name:"Passpack csv",id:"passpackCsv",exportSteps:["Go to Tools -> Export. Select Comma Separated Values, All entries then continue."]}},PassmanImporter.passpackCsv.readFile=function(file_data){return new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data,!1),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=row[0],_credential.username=row[1],_credential.password=row[2],_credential.url=row[3];var tags=row[4].split(" ");tags.length>0&&(_credential.tags=tags.map(function(item){if(item)return{text:item}}).filter(function(item){return item})),_credential.description=row[5],_credential.email=row[6],_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.randomData={info:{name:"Random data",id:"randomData",exportSteps:["Create's 50 random credentials for testing purposes."]}},PassmanImporter.randomData.readFile=function(){return new C_Promise(function(){var label,tags=["Social media","Hosting","Forums","Webshops","FTP","SSH","Banking","Applications","Server stuff","mysql","Wifi","Games","Certificate","Serials"],credential_list=[],_this=this,generateCredential=function(max,i,callback){if(jQuery){var url=OC.generateUrl("apps/passman/api/internal/generate_person");$.ajax({url:url,dataType:"json",success:function(data){if(data){var _credential=PassmanImporter.newCredential();label=Math.random()>=.5?data.domain:data.email_d+" - "+data.email_u,_credential.label=label,_credential.username=data.username,_credential.password=data.password,_credential.url=data.url;for(var tag_amount=Math.floor(5*Math.random()),ta=0,_tags=[];ta<tag_amount;){var item=tags[Math.floor(Math.random()*tags.length)];_tags.indexOf(item)===-1&&(_tags.push(item),ta++)}if(_credential.tags=_tags.map(function(item){if(item)return{text:item}}).filter(function(item){return item}),credential_list.push(_credential),i<max){var progress={percent:i/max*100,loaded:i,total:max};_this.call_progress(progress),generateCredential(max,i+1,callback)}else callback(credential_list)}else generateCredential(max,i,callback)}})}};generateCredential(50,1,function(credential_list){_this.call_then(credential_list)})})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.teamPassCsv={info:{name:"TeamPass csv",id:"teamPassCsv",exportSteps:["Go to Tools -> Export. Select Comma Separated Values, All entries then continue."]}},PassmanImporter.teamPassCsv.readFile=function(file_data){return new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data,!1),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=row[1],_credential.description=row[2],_credential.password=row[3],_credential.username=row[4];var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};credential_list.push(_credential),this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};if(function(window,$,PassmanImporter){PassmanImporter.zohoCsv={info:{name:"ZOHO csv",id:"zohoCsv",exportSteps:['Create an csv export. Go to Tools -> Export secrets -> Select "General CSV" and click "Export Secrets"']}},PassmanImporter.zohoCsv.readFile=function(file_data){return new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();
+if(_credential.label=row.secret_name,_credential.url=row.secret_url,_credential.description=row.notes,row.hasOwnProperty("secretdata"))for(var rows=row.secretdata.split("\n"),r=0;r<rows.length;r++){var cells=rows[r].split(":"),key=cells[0],value=cells.slice(1).join(":");key&&value&&_credential.custom_fields.push({label:key,value:value,secret:!1})}""!==_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter),!window.PassmanExporter)var PassmanExporter={getCredentialsWithFiles:function(credentials,FileService,EncryptService){var t={cred:credentials,FS:FileService,ES:EncryptService};return new C_Promise(function(){var _this=this.parent,credentials=_this.cred;this.parent.total=0,this.parent.finished=0,this.parent.fileGUID_cred=[],this.parent.files=[],this.parent.step=function(file){this.parent.finished++,this.call_progress({total:this.parent.total,finished:this.parent.finished});var dta=this.parent.fileGUID_cred[file.guid];file.filename=this.parent.ES.decryptString(file.filename,this.parent.cred[dta.cred_pos].vault_key),file.file_data=this.parent.ES.decryptString(file.file_data,this.parent.cred[dta.cred_pos].vault_key),"files"===dta.on?this.parent.cred[dta.cred_pos][dta.on][dta.at]=file:this.parent.cred[dta.cred_pos][dta.on][dta.at].value=file,this.parent.total===this.parent.finished&&this.call_then(this.parent.cred)}.bind(this);for(var i=0;i<credentials.length;i++){var item=credentials[i];for(c=0;c<item.custom_fields.length;c++){var cf=item.custom_fields[c];"file"===cf.field_type&&(this.parent.total++,this.parent.fileGUID_cred[cf.value.guid]={cred_pos:i,on:"custom_fields",at:c},this.parent.FS.getFile(cf.value).then(function(data){this.parent.step(data)}.bind(this)))}for(var c=0;c<item.files.length;c++)this.parent.total++,this.parent.fileGUID_cred[item.files[c].guid]={cred_pos:i,on:"files",at:c},this.parent.FS.getFile(item.files[c]).then(function(data){this.parent.step(data)}.bind(this))}0===this.parent.total&&this.call_then(this.parent.cred)},t)}};PassmanExporter.csv={info:{name:"CSV",id:"csv",description:"Export credentials as a csv file."}},PassmanExporter.csv.export=function(credentials,FileService,EncryptService){return new C_Promise(function(){PassmanExporter.getCredentialsWithFiles(credentials,FileService,EncryptService).then(function(){for(var headers=["label","username","password","email","description","tags","url","custom_fields","files"],file_data='"'+headers.join('","')+'"\n',i=0;i<credentials.length;i++){for(var _credential=credentials[i],row_data=[],h=0;h<headers.length;h++){var field=headers[h];if("tags"===field){for(var _tags=[],t=0;t<_credential[field].length;t++)_tags.push(_credential[field][t].text);var tag_data="["+_tags.join(",")+"]";row_data.push('"'+tag_data.replaceAll('"','""')+'"')}else if("custom_fields"==field||"files"==field){var _fields=JSON.stringify(_credential[field]);_fields=_fields.replaceAll('"','""'),row_data.push('"'+_fields+'"')}else{var data=_credential[field],value=null===data?"":data.replaceAll('"','""');row_data.push('"'+value+'"')}}var progress={percent:i/credentials.length*100,loaded:i,total:credentials.length};this.call_progress(progress),file_data+=row_data.join(",")+"\n"}this.call_then(),download(file_data,"passman-export.csv","text/csv")}.bind(this)).progress(function(){})})},PassmanExporter.json={info:{name:"JSON",id:"json",description:"Export credentials as a JSON file."}},PassmanExporter.json.export=function(credentials,FileService,EncryptService){return new C_Promise(function(){PassmanExporter.getCredentialsWithFiles(credentials,FileService,EncryptService).then(function(){for(var _output=[],i=0;i<credentials.length;i++){var _credential=angular.copy(credentials[i]);delete _credential.vault_key,delete _credential.vault_id,delete _credential.shared_key,_output.push(_credential);var progress={percent:i/credentials.length*100,loaded:i,total:credentials.length};this.call_progress(progress)}var file_data=JSON.stringify(_output);this.call_then(),download(file_data,"passman-export.json")}.bind(this)).progress(function(){})})},function(){angular.module("passmanApp").controller("BookmarkletCtrl",["$scope","$rootScope","$location","VaultService","CredentialService","SettingsService","NotificationService","EncryptService","TagService","FileService","ShareService","$translate",function($scope,$rootScope,$location,VaultService,CredentialService,SettingsService,NotificationService,EncryptService,TagService,FileService,ShareService,$translate){if($scope.active_vault=!1,$scope.http_warning_hidden=!0,"http"===$location.$$protocol&&($scope.using_http=!0),$scope.logout=function(){$rootScope.override_default_vault=!0,$scope.active_vault=!1},SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));VaultService.getVault(_vault).then(function(vault){vault.vaultKey=angular.copy(SettingsService.getSetting("defaultVaultPass")),VaultService.setActiveVault(vault),$scope.active_vault=vault,$scope.pwSettings=VaultService.getVaultSetting("pwSettings",{length:12,useUppercase:!0,useLowercase:!0,useDigits:!0,useSpecialChars:!0,minimumDigitCount:3,avoidAmbiguousCharacters:!1,requireEveryCharType:!0,generateOnCreate:!0})})}VaultService.getVaults().then(function(vaults){$scope.vaults=vaults}),$scope.default_vault=!1,$scope.remember_vault_password=!1,$scope.list_selected_vault=!1,$scope.toggleDefaultVault=function(){$scope.default_vault=!$scope.default_vault,$scope.default_vault===!0?SettingsService.setSetting("defaultVault",$scope.list_selected_vault):SettingsService.setSetting("defaultVault",null)},$scope.toggleRememberPassword=function(){$scope.remember_vault_password=!$scope.remember_vault_password,$scope.remember_vault_password&&(SettingsService.setSetting("defaultVault",$scope.list_selected_vault),$scope.default_vault=!0),$scope.remember_vault_password!==!0&&SettingsService.setSetting("defaultVault",null)},$scope.clearState=function(){$scope.list_selected_vault=!1,$scope.creating_vault=!1,$scope.error=!1},$scope.selectVault=function(vault){$scope.list_selected_vault=vault},$scope.sharing_keys={},$scope.newVault=function(){$scope.creating_vault=!0;var key_size=1024;ShareService.generateRSAKeys(key_size).progress(function(progress){var p=progress>0?2:1,msg=$translate.instant("generating.sharing.keys");msg=msg.replace("%step",p),$scope.creating_keys=msg,$scope.$digest()}).then(function(kp){var pem=ShareService.rsaKeyPairToPEM(kp);$scope.creating_keys=!1,$scope.sharing_keys.private_sharing_key=pem.privateKey,$scope.sharing_keys.public_sharing_key=pem.publicKey,$scope.$digest()})};var _loginToVault=function(vault,vault_key){var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),delete _vault.credentials,$scope.active_vault=_vault};$scope.vaultDecryptionKey="",$scope.loginToVault=function(vault,vault_key){$scope.error=!1;var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),VaultService.setActiveVault(_vault);try{EncryptService.decryptString(vault.challenge_password),$scope.remember_vault_password&&SettingsService.setSetting("defaultVaultPass",vault_key),_loginToVault(vault,vault_key)}catch(e){$scope.error=$translate.instant("invalid.vault.key")}},$scope.createVault=function(vault_name,vault_key,vault_key2){return vault_key!==vault_key2?void($scope.error=$translate.instant("password.do.not.match")):void VaultService.createVault(vault_name).then(function(vault){$scope.vaults.push(vault);var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),VaultService.setActiveVault(_vault);var test_credential=CredentialService.newCredential();test_credential.label="Test key for vault "+vault_name,test_credential.hidden=!0,test_credential.vault_id=vault.vault_id,test_credential.password="lorum ipsum",CredentialService.createCredential(test_credential).then(function(){_vault.public_sharing_key=angular.copy($scope.sharing_keys.public_sharing_key),_vault.private_sharing_key=EncryptService.encryptString(angular.copy($scope.sharing_keys.private_sharing_key)),VaultService.updateSharingKeys(_vault).then(function(){_loginToVault(vault,vault_key)})})})},$scope.storedCredential=CredentialService.newCredential();var QueryString=function(){for(var query_string={},query=window.location.search.substring(1),vars=query.split("&"),i=0;i<vars.length;i++){var pair=vars[i].split("=");if("undefined"==typeof query_string[pair[0]])query_string[pair[0]]=decodeURIComponent(pair[1]);else if("string"==typeof query_string[pair[0]]){var arr=[query_string[pair[0]],decodeURIComponent(pair[1])];query_string[pair[0]]=arr}else query_string[pair[0]].push(decodeURIComponent(pair[1]))}return query_string}(),query_string=QueryString;$scope.storedCredential.label=query_string.title,$scope.storedCredential.url=query_string.url,$scope.setHttpWarning=function(state){$scope.http_warning_hidden=state},$translate(["general","password","custom.fields","files","otp"]).then(function(translations){$scope.tabs=[{title:translations.general,url:"views/partials/forms/edit_credential/basics.html",color:"blue"},{title:translations.password,url:"views/partials/forms/edit_credential/password.html",color:"green"},{title:translations["custom.fields"],url:"views/partials/forms/edit_credential/custom_fields.html",color:"orange"},{title:translations.files,url:"views/partials/forms/edit_credential/files.html",color:"yellow"},{title:translations.otp,url:"views/partials/forms/edit_credential/otp.html",color:"purple"}],$scope.currentTab=$scope.tabs[0]}),$scope.getTags=function($query){return TagService.searchTag($query)},$scope.onClickTab=function(tab){$scope.currentTab=tab},$scope.isActiveTab=function(tab){return tab.url===$scope.currentTab.url},$scope.pwGenerated=function(pass){$scope.storedCredential.password_repeat=pass};var _customField={label:"",value:"",secret:!1,field_type:"text"};$scope.selected_field_type="text",$scope.new_custom_field=angular.copy(_customField),$scope.addCustomField=function(){var _field=angular.copy($scope.new_custom_field);if(_field.label||NotificationService.showNotification($translate.instant("error.no.label"),3e3),_field.value||NotificationService.showNotification($translate.instant("error.no.value"),3e3),_field.label&&_field.value)if($scope.selected_field_type="text",_field.secret=angular.copy("password"===$scope.selected_field_type),_field.field_type=angular.copy($scope.selected_field_type),"file"===_field.field_type){var _file=$scope.new_custom_field.value;FileService.uploadFile(_file).then(function(result){delete result.file_data,result.filename=EncryptService.decryptString(result.filename),_field.value=result,$scope.storedCredential.custom_fields.push(_field),$scope.new_custom_field=angular.copy(_customField)})}else $scope.storedCredential.custom_fields.push(_field),$scope.new_custom_field=angular.copy(_customField)},$scope.addFileToCustomField=function(file){var _file={filename:file.name,size:file.size,mimetype:file.type,data:file.data};$scope.new_custom_field.value=_file,$scope.$digest()},$scope.deleteCustomField=function(field){field.hasOwnProperty("field_type")&&"file"===field.field_type&&FileService.deleteFile(field.value);var idx=$scope.storedCredential.custom_fields.indexOf(field);$scope.storedCredential.custom_fields.splice(idx,1)},$scope.new_file={name:"",data:null},$scope.deleteFile=function(file){var idx=$scope.storedCredential.files.indexOf(file);FileService.deleteFile(file).then(function(){$scope.storedCredential.files.splice(idx,1)})},$scope.fileLoaded=function(file){var _file={filename:file.name,size:file.size,mimetype:file.type,data:file.data};FileService.uploadFile(_file).then(function(result){delete result.file_data,result.filename=EncryptService.decryptString(result.filename),$scope.storedCredential.files.push(result)}),$scope.$digest()},$scope.fileLoadError=function(error){return error},$scope.selected_file="",$scope.fileprogress=[],$scope.fileSelectProgress=function(progress){progress&&($scope.fileprogress=progress,$scope.$digest())},$scope.renewIntervalValue=0,$scope.renewIntervalModifier="0",$scope.updateInterval=function(renewIntervalValue,renewIntervalModifier){var value=parseInt(renewIntervalValue),modifier=parseInt(renewIntervalModifier);value&&modifier&&($scope.storedCredential.renew_interval=value*modifier)},$scope.parseQR=function(QRCode){var parsedQR,qrInfo,re=/otpauth:\/\/(totp|hotp)\/(.*)\?(secret|issuer)=(.*)&(issuer|secret)=(.*)/;qrInfo=[],parsedQR=QRCode.qrData.match(re),parsedQR&&(qrInfo={type:parsedQR[1],label:decodeURIComponent(parsedQR[2]),qr_uri:QRCode}),qrInfo[parsedQR[3]]=parsedQR[4],qrInfo[parsedQR[5]]=parsedQR[6],$scope.storedCredential.otp=qrInfo,$scope.$digest()},$scope.saveCredential=function(){delete $scope.storedCredential.password_repeat,$scope.storedCredential.credential_id||($scope.storedCredential.vault_id=$scope.active_vault.vault_id,CredentialService.createCredential($scope.storedCredential).then(function(){NotificationService.showNotification($translate.instant("credential.created"),5e3)}))}}])}(),function(){angular.module("passmanApp").controller("CredentialCtrl",["$scope","VaultService","SettingsService","$location","CredentialService","$rootScope","FileService","EncryptService","TagService","$timeout","NotificationService","CacheService","ShareService","SharingACL","$interval","$filter","$routeParams","$sce","$translate",function($scope,VaultService,SettingsService,$location,CredentialService,$rootScope,FileService,EncryptService,TagService,$timeout,NotificationService,CacheService,ShareService,SharingACL,$interval,$filter,$routeParams,$sce,$translate){if($scope.active_vault=VaultService.getActiveVault(),SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=angular.copy(SettingsService.getSetting("defaultVaultPass")),VaultService.setActiveVault(_vault),$scope.active_vault=_vault}}else $scope.active_vault||$location.path("/");$scope.show_spinner=!0;var fetchCredentials=function(){VaultService.getVault({guid:$routeParams.vault_id}).then(function(vault){var vaultKey=angular.copy($scope.active_vault.vaultKey),_credentials=angular.copy(vault.credentials);vault.credentials=[],$scope.active_vault=vault,$scope.active_vault.vaultKey=vaultKey,$rootScope.vaultCache||($rootScope.vaultCache=[]),VaultService.setActiveVault($scope.active_vault);for(var i=0;i<_credentials.length;i++){var _credential=_credentials[i];try{if(_credential.shared_key){var enc_key=EncryptService.decryptString(_credential.shared_key);_credential=ShareService.decryptSharedCredential(angular.copy(_credential),enc_key)}else _credential=CredentialService.decryptCredential(angular.copy(_credential));_credential.tags_raw=_credential.tags}catch(e){NotificationService.showNotification($translate.instant("error.decrypt"),5e3)}_credentials[i]=_credential}ShareService.getCredendialsSharedWithUs(vault.guid).then(function(shared_credentials){for(var c=0;c<shared_credentials.length;c++){var _shared_credential_data,_shared_credential=shared_credentials[c],decrypted_key=EncryptService.decryptString(_shared_credential.shared_key);try{_shared_credential_data=ShareService.decryptSharedCredential(_shared_credential.credential_data,decrypted_key)}catch(e){}_shared_credential_data&&(delete _shared_credential.credential_data,_shared_credential_data.acl=_shared_credential,_shared_credential_data.acl.permissions=new SharingACL(_shared_credential_data.acl.permissions),_shared_credential_data.tags_raw=_shared_credential_data.tags,_credentials.push(_shared_credential_data))}if(angular.merge($scope.active_vault.credentials,_credentials),$scope.show_spinner=!1,$rootScope.$broadcast("credentials_loaded"),$rootScope.vaultCache[$scope.active_vault.guid]=angular.copy($scope.active_vault),!vault.private_sharing_key){var key_size=1024;ShareService.generateRSAKeys(key_size).then(function(kp){var pem=ShareService.rsaKeyPairToPEM(kp);$scope.creating_keys=!1,$scope.active_vault.private_sharing_key=pem.privateKey,$scope.active_vault.public_sharing_key=pem.publicKey,$scope.$digest(),VaultService.updateSharingKeys($scope.active_vault)})}$scope.checkURLAction()})})},getPendingShareRequests=function(){ShareService.getPendingRequests().then(function(shareRequests){shareRequests.length>0&&($scope.incoming_share_requests=shareRequests,jQuery(".share_popup").dialog({width:800,modal:!0,dialogClass:"shareincoming-dialog"}))})},refresh_data_interval=null;$scope.active_vault&&($scope.$parent.selectedVault=!0,$rootScope.vaultCache&&$rootScope.vaultCache[$scope.active_vault.guid]?($scope.active_vault=$rootScope.vaultCache[$scope.active_vault.guid],$rootScope.$broadcast("credentials_loaded"),$scope.show_spinner=!1):fetchCredentials(),getPendingShareRequests(),refresh_data_interval=$interval(function(){fetchCredentials(),getPendingShareRequests()},3e5)),$scope.$on("$destroy",function(){$interval.cancel(refresh_data_interval)}),$scope.permissions=new SharingACL(0),$scope.hasPermission=function(acl,permission){if(acl){var tmp=new SharingACL(acl.permission);return tmp.hasPermission(permission)}return!0},$scope.acceptShareRequest=function(share_request){var crypted_shared_key=share_request.shared_key,private_key=EncryptService.decryptString(VaultService.getActiveVault().private_sharing_key);private_key=ShareService.rsaPrivateKeyFromPEM(private_key),crypted_shared_key=private_key.decrypt(forge.util.decode64(crypted_shared_key)),crypted_shared_key=EncryptService.encryptString(crypted_shared_key),ShareService.saveSharingRequest(share_request,crypted_shared_key).then(function(){var idx=$scope.incoming_share_requests.indexOf(share_request);$scope.incoming_share_requests.splice(idx,1);for(var active_share_requests=!1,v=0;v<$scope.incoming_share_requests.length;v++)$scope.incoming_share_requests[v].target_vault_id===$scope.active_vault.vault_id&&(active_share_requests=!0);active_share_requests===!1&&(jQuery(".ui-dialog").remove(),fetchCredentials())})},$scope.declineShareRequest=function(share_request){ShareService.declineSharingRequest(share_request).then(function(){var idx=$scope.incoming_share_requests.indexOf(share_request);$scope.incoming_share_requests.splice(idx,1);for(var active_share_requests=!1,v=0;v<$scope.incoming_share_requests.length;v++)$scope.incoming_share_requests[v].target_vault_id===$scope.active_vault.vault_id&&(active_share_requests=!0);active_share_requests===!1&&(jQuery(".ui-dialog").remove(),fetchCredentials())})};var settingsLoaded=function(){$scope.settings=SettingsService.getSettings()};SettingsService.getSetting("settings_loaded")?settingsLoaded():$rootScope.$on("settings_loaded",function(){settingsLoaded()}),$scope.addCredential=function(){var new_credential=CredentialService.newCredential(),enc_c=CredentialService.encryptCredential(new_credential);SettingsService.setSetting("edit_credential",enc_c),$location.path("/vault/"+$scope.active_vault.guid+"/new")},$scope.editCredential=function(credential){var _credential=angular.copy(credential);$rootScope.$emit("app_menu",!1),SettingsService.setSetting("edit_credential",CredentialService.encryptCredential(_credential)),$location.path("/vault/"+$scope.active_vault.guid+"/edit/"+_credential.guid)},$scope.getRevisions=function(credential){var _credential=angular.copy(credential);$rootScope.$emit("app_menu",!1),SettingsService.setSetting("revision_credential",CredentialService.encryptCredential(_credential)),$location.path("/vault/"+$scope.active_vault.guid+"/"+_credential.guid+"/revisions")},$scope.shareCredential=function(credential){var _credential=angular.copy(credential);$rootScope.$emit("app_menu",!1),SettingsService.setSetting("share_credential",CredentialService.encryptCredential(_credential)),$location.path("/vault/"+$scope.active_vault.guid+"/"+_credential.guid+"/share")};var notification;$scope.deleteCredential=function(credential){var _credential=angular.copy(credential);try{_credential=CredentialService.decryptCredential(_credential)}catch(e){}_credential.delete_time=(new Date).getTime()/1e3;for(var i=0;i<$scope.active_vault.credentials.length;i++)$scope.active_vault.credentials[i].credential_id===credential.credential_id&&($scope.active_vault.credentials[i].delete_time=_credential.delete_time);$scope.closeSelected(),notification&&NotificationService.hideNotification(notification);var key=CredentialService.getSharedKeyFromCredential(_credential);CredentialService.updateCredential(_credential,!1,key).then(function(){notification=NotificationService.showNotification($translate.instant("credential.deleted"),5e3)})},$scope.recoverCredential=function(credential){var _credential=angular.copy(credential);try{_credential=CredentialService.decryptCredential(_credential)}catch(e){}for(var i=0;i<$scope.active_vault.credentials.length;i++)$scope.active_vault.credentials[i].credential_id===credential.credential_id&&($scope.active_vault.credentials[i].delete_time=0);_credential.delete_time=0,$scope.closeSelected(),notification&&NotificationService.hideNotification(notification);var key=CredentialService.getSharedKeyFromCredential(_credential);CredentialService.updateCredential(_credential,!1,key).then(function(){NotificationService.showNotification($translate.instant("credential.recovered"),5e3)})},$scope.destroyCredential=function(credential){var _credential=angular.copy(credential);CredentialService.destroyCredential(_credential.guid).then(function(){for(var i=0;i<$scope.active_vault.credentials.length;i++)if($scope.active_vault.credentials[i].credential_id===credential.credential_id){$scope.active_vault.credentials.splice(i,1),NotificationService.showNotification($translate.instant("credential.destroyed"),5e3);break}})},$scope.view_mode="list",$scope.switchViewMode=function(viewMode){$scope.view_mode=viewMode},$rootScope.$on("push_decrypted_credential_to_list",function(){$rootScope.$broadcast("credentials_loaded")}),$scope.filterOptions={filterText:"",fields:["label","username","email","custom_fields"]},$scope.$on("nc_searchbox",function(event,searchterm,fields){$scope.filterOptions.filterText=searchterm,fields&&($scope.filterOptions.fields=fields)}),$scope.filtered_credentials=[],$scope.$watch("[selectedtags, filterOptions, delete_time, active_vault.credentials]",function(){if($scope.active_vault&&$scope.active_vault.credentials){var credentials=angular.copy($scope.active_vault.credentials),filtered_credentials=$filter("credentialSearch")(credentials,$scope.filterOptions);filtered_credentials=$filter("tagFilter")(filtered_credentials,$scope.selectedtags),filtered_credentials=$filter("filter")(filtered_credentials,{hidden:0}),$scope.filtered_credentials=filtered_credentials,$scope.filterOptions.selectedtags=angular.copy($scope.selectedtags);for(var i=0;i<$scope.active_vault.credentials.length;i++){var _credential=$scope.active_vault.credentials[i];_credential.tags&&TagService.addTags(_credential.tags)}}},!0),$scope.no_credentials_label=[],$scope.no_credentials_label.all=!0,$scope.no_credentials_label.s_good=!1,$scope.no_credentials_label.s_medium=!1,$scope.no_credentials_label.s_low=!1,$scope.no_credentials_label.expired=!1,$scope.disableAllLabels=function(){$scope.no_credentials_label.all=!1,$scope.no_credentials_label.s_good=!1,$scope.no_credentials_label.s_medium=!1,$scope.no_credentials_label.s_low=!1,$scope.no_credentials_label.expired=!1},$scope.$on("filterSpecial",function(event,args){switch($scope.disableAllLabels(),args){case"strength_good":$scope.filterStrength(3,1e3),$scope.no_credentials_label.s_good=!0;break;case"strength_medium":$scope.filterStrength(2,3),$scope.no_credentials_label.s_medium=!0;break;case"strength_low":$scope.filterStrength(0,1),$scope.no_credentials_label.s_low=!0;break;case"expired":$scope.filterExpired(),$scope.no_credentials_label.expired=!0;break;case"all":$scope.filterAll(),$scope.no_credentials_label.all=!0}}),$scope.getListSizes=function(){for(var l=$scope.filtered_credentials,deleted=0,i=0;i<l.length;i++)l[i].delete_time>0&&deleted++;var result=[];return result.listsize=l.length,result.listsize_wout_deleted=l.length-deleted,result.listsize_deleted=deleted,result},$scope.filterAll=function(){$scope.selectedtags=[],$scope.filterOptions.filterText="";for(var creds_filtered=[],i=0;i<$scope.active_vault.credentials.length;i++)0===$scope.active_vault.credentials[i].delete_time&&creds_filtered.push($scope.active_vault.credentials[i]);$scope.filtered_credentials=$scope.filterHidden(creds_filtered)},$scope.filterStrength=function(strength_min,strength_max){for(var initialCredentials=$scope.active_vault.credentials,postFiltered=[],i=0;i<initialCredentials.length;i++){var _credential=initialCredentials[i],zxcvbn_result=zxcvbn(_credential.password);zxcvbn_result.score>=strength_min&&zxcvbn_result.score<=strength_max&&postFiltered.push(initialCredentials[i])}$scope.filtered_credentials=$scope.filterHidden(postFiltered)},$scope.filterExpired=function(){for(var initialCredentials=$scope.active_vault.credentials,now=Date.now(),postFiltered=[],i=0;i<initialCredentials.length;i++){var _credential=initialCredentials[i];0!==_credential.expire_time&&_credential.expire_time<=now&&postFiltered.push(initialCredentials[i])}$scope.filtered_credentials=$scope.filterHidden(postFiltered)},$scope.filterHidden=function(list){for(var list_without_hidden=[],i=0;i<list.length;i++)1!==list[i].hidden&&list_without_hidden.push(list[i]);return list_without_hidden},$scope.selectedtags=[];var to;$rootScope.$on("selected_tags_updated",function(evt,_sTags){for(var _selectedTags=[],x=0;x<_sTags.length;x++)_selectedTags.push(_sTags[x].text);$scope.selectedtags=_selectedTags,$timeout.cancel(to),_selectedTags.length>0&&(to=$timeout(function(){if($scope.filtered_credentials){for(var _filtered_tags=[],i=0;i<$scope.filtered_credentials.length;i++)for(var tags=$scope.filtered_credentials[i].tags_raw,x=0;x<tags.length;x++){var tag=tags[x].text;_filtered_tags.indexOf(tag)===-1&&_filtered_tags.push(tag)}$rootScope.$emit("limit_tags_in_list",_filtered_tags)}},50))}),$scope.delete_time=0,$scope.showCredentialRow=function(credential){return 0===$scope.delete_time?0===credential.delete_time:credential.delete_time>$scope.delete_time},$rootScope.$on("set_delete_time",function(event,time){$scope.delete_time=time}),$scope.setDeleteTime=function(delete_time){$scope.delete_time=delete_time},$scope.selectedCredential=!1,$scope.selectCredential=function(credential){credential.description&&(credential.description_html=$sce.trustAsHtml(angular.copy(credential.description).replace("\n","<br />"))),$scope.selectedCredential=angular.copy(credential),$rootScope.$emit("app_menu",!0)},$scope.closeSelected=function(){$rootScope.$emit("app_menu",!1),$scope.selectedCredential=!1},$rootScope.$on("logout",function(){$scope.active_vault&&($rootScope.vaultCache[$scope.active_vault.guid]=null),$scope.active_vault=null,$scope.credentials=[],VaultService.clearVaultService()}),$scope.$watch(function(){return $location.search()},function(params){$scope.checkURLAction()}),$scope.checkURLAction=function(){var search=$location.search();void 0!==search.show&&void 0!==$scope.active_vault.credentials&&$scope.active_vault.credentials.length>0&&($scope.closeSelected(),$scope.active_vault.credentials.forEach(function(credential,index,myArray){if(credential.guid===search.show)return $scope.selectCredential(credential),!0}))},$scope.clearState=function(){$scope.delete_time=0}}])}(),function(){angular.module("passmanApp").controller("CredentialEditCtrl",["$scope","VaultService","CredentialService","SettingsService","$location","$routeParams","FileService","EncryptService","TagService","NotificationService","ShareService","$translate","$rootScope",function($scope,VaultService,CredentialService,SettingsService,$location,$routeParams,FileService,EncryptService,TagService,NotificationService,ShareService,$translate,$rootScope){if($scope.active_vault=VaultService.getActiveVault(),SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=SettingsService.getSetting("defaultVaultPass"),VaultService.setActiveVault(_vault),$scope.active_vault=_vault}}else if(!$scope.active_vault)return void $location.path("/");VaultService.getVault($scope.active_vault).then(function(vault){vault.vaultKey=VaultService.getActiveVault().vaultKey,delete vault.credentials,VaultService.setActiveVault(vault),$scope.pwSettings=VaultService.getVaultSetting("pwSettings",{length:12,useUppercase:!0,useLowercase:!0,useDigits:!0,useSpecialChars:!0,minimumDigitCount:3,avoidAmbiguousCharacters:!1,requireEveryCharType:!0,generateOnCreate:!0})}),$scope.currentTab={title:$translate.instant("general"),url:"views/partials/forms/edit_credential/basics.html",color:"blue"},$scope.otpType="qrcode",$translate(["general","password","custom.fields","files","otp"]).then(function(translations){$scope.tabs=[{title:translations.general,url:"views/partials/forms/edit_credential/basics.html",color:"blue"},{title:translations.password,url:"views/partials/forms/edit_credential/password.html",color:"green"},{title:translations["custom.fields"],url:"views/partials/forms/edit_credential/custom_fields.html",color:"orange"},{title:translations.files,url:"views/partials/forms/edit_credential/files.html",color:"yellow"},{title:translations.otp,url:"views/partials/forms/edit_credential/otp.html",color:"purple"}],$scope.currentTab=$scope.tabs[0]}),$scope.active_vault&&($scope.$parent.selectedVault=!0);var storedCredential=SettingsService.getSetting("edit_credential");storedCredential?($scope.storedCredential=CredentialService.decryptCredential(angular.copy(storedCredential)),$scope.storedCredential.password_repeat=angular.copy($scope.storedCredential.password),$scope.storedCredential.expire_time=1e3*$scope.storedCredential.expire_time):CredentialService.getCredential($routeParams.credential_id).then(function(result){$scope.storedCredential=CredentialService.decryptCredential(angular.copy(result))}),$scope.oldPassword=$scope.storedCredential.password,$scope.getTags=function($query){return TagService.searchTag($query)},$scope.onClickTab=function(tab){$scope.currentTab=tab},$scope.isActiveTab=function(tab){return tab.url===$scope.currentTab.url},$scope.pwGenerated=function(pass){$scope.storedCredential.password_repeat=pass};var _customField={label:"",value:"",secret:!1,field_type:"text"};$scope.selected_field_type="text",$scope.new_custom_field=angular.copy(_customField),$scope.addCustomField=function(){var _field=angular.copy($scope.new_custom_field);if(_field.label||NotificationService.showNotification($translate.instant("error.no.label"),3e3),_field.value||NotificationService.showNotification($translate.instant("error.no.value"),3e3),_field.label&&_field.value)if($scope.selected_field_type="text",_field.secret="password"===_field.field_type,"file"===_field.field_type){var key=!1,_file=$scope.new_custom_field.value;!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),FileService.uploadFile(_file,key).then(function(result){delete result.file_data,result.filename=EncryptService.decryptString(result.filename,key),_field.value=result,$scope.storedCredential.custom_fields.push(_field),$scope.new_custom_field=angular.copy(_customField)})}else $scope.storedCredential.custom_fields.push(_field),
+$scope.new_custom_field=angular.copy(_customField)},$scope.addFileToCustomField=function(file){$scope.new_custom_field.value={filename:file.name,size:file.size,mimetype:file.type,data:file.data},$scope.$digest()},$scope.deleteCustomField=function(field){field.hasOwnProperty("field_type")&&"file"===field.field_type&&FileService.deleteFile(field.value);var idx=$scope.storedCredential.custom_fields.indexOf(field);$scope.storedCredential.custom_fields.splice(idx,1)},$scope.new_file={name:"",data:null},$scope.deleteFile=function(file){var idx=$scope.storedCredential.files.indexOf(file);FileService.deleteFile(file).then(function(){$scope.storedCredential.files.splice(idx,1)})},$scope.fileLoaded=function(file){var key,_file={filename:file.name,size:file.size,mimetype:file.type,data:file.data};!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),FileService.uploadFile(_file,key).then(function(result){delete result.file_data,result.filename=EncryptService.decryptString(result.filename,key),$scope.storedCredential.files.push(result)}),$scope.$digest()},$scope.fileLoadError=function(error){console.log($translate.instant("error.loading.file"),error)},$scope.selected_file="",$scope.fileprogress=[],$scope.fileSelectProgress=function(progress){progress&&($scope.fileprogress=progress,$scope.$digest())},$scope.renewIntervalValue=0,$scope.renewIntervalModifier="0",$scope.updateInterval=function(renewIntervalValue,renewIntervalModifier){var value=parseInt(renewIntervalValue),modifier=parseInt(renewIntervalModifier);value&&modifier&&($scope.storedCredential.renew_interval=value*modifier)},$scope.parseQR=function(QRCode){if(!QRCode)return void NotificationService.showNotification($translate.instant("invalid.qr"),5e3);var uri=new URL(QRCode.qrData),type=uri.href.indexOf("totp/")!==-1?"totp":"hotp",label=uri.pathname.replace("//"+type+"/","");$scope.storedCredential.otp={type:type,label:decodeURIComponent(label),qr_uri:QRCode,issuer:uri.searchParams.get("issuer"),secret:uri.searchParams.get("secret")},$scope.$digest()},$scope.saving=!1,$scope.compromise=function(){console.log("This password was compromised"),$scope.storedCredential.compromised=!0},$scope.saveCredential=function(){if($scope.saving=!0,$scope.storedCredential.compromised&&$scope.oldPassword!==$scope.storedCredential.password&&($scope.storedCredential.compromised=!1),$scope.new_custom_field.label&&$scope.new_custom_field.value&&$scope.storedCredential.custom_fields.push(angular.copy($scope.new_custom_field)),$scope.storedCredential.password!==$scope.storedCredential.password_repeat)return $scope.saving=!1,void NotificationService.showNotification($translate.instant("password.do.not.match"),5e3);if(delete $scope.storedCredential.password_repeat,$scope.storedCredential.credential_id){var key,_credential;!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),_credential=key?ShareService.encryptSharedCredential($scope.storedCredential,key):angular.copy($scope.storedCredential),delete _credential.shared_key;var _useKey=null!=key,regex=/(<([^>]+)>)/gi;_credential.description&&""!==_credential.description&&(_credential.description=_credential.description.replace(regex,"")),CredentialService.updateCredential(_credential,_useKey).then(function(updated_cred){$scope.saving=!1,SettingsService.setSetting("edit_credential",null),$location.path("/vault/"+$routeParams.vault_id),NotificationService.showNotification($translate.instant("credential.updated"),5e3),$scope.updateExistingListWithCredential(updated_cred)})}else $scope.storedCredential.vault_id=$scope.active_vault.vault_id,CredentialService.createCredential($scope.storedCredential).then(function(new_cred){$scope.saving=!1,$location.path("/vault/"+$routeParams.vault_id),NotificationService.showNotification($translate.instant("credential.created"),5e3),$scope.updateExistingListWithCredential(new_cred)})},$scope.updateExistingListWithCredential=function(credential){try{if(credential.shared_key){var enc_key=EncryptService.decryptString(credential.shared_key);credential=ShareService.decryptSharedCredential(credential,enc_key)}else credential=CredentialService.decryptCredential(credential);credential.tags_raw=credential.tags;for(var found=!1,credList=$rootScope.vaultCache[$scope.active_vault.guid].credentials,i=0;i<credList.length;i++)credList[i].credential_id===credential.credential_id&&($rootScope.vaultCache[$scope.active_vault.guid].credentials[i]=credential,found=!0);found||$rootScope.vaultCache[$scope.active_vault.guid].credentials.push(credential),$rootScope.$broadcast("push_decrypted_credential_to_list",credential)}catch(e){NotificationService.showNotification($translate.instant("error.decrypt"),5e3),console.log(e)}},$scope.cancel=function(){$location.path("/vault/"+$routeParams.vault_id)}}])}(),function(){angular.module("passmanApp").controller("ExportCtrl",["$scope","$window","CredentialService","VaultService","FileService","EncryptService","$translate",function($scope,$window,CredentialService,VaultService,FileService,EncryptService,$translate){$scope.available_exporters=[],$scope.active_vault=VaultService.getActiveVault(),$scope.confirm_key="",$scope.$watch(function(){return $window.PassmanExporter},function(exporters){exporters=Object.keys(angular.copy(exporters));for(var i=0;i<exporters.length;i++){var exporter=exporters[i];$window.PassmanExporter[exporter].hasOwnProperty("info")&&$scope.available_exporters.push($window.PassmanExporter[exporter].info)}},!0),$scope.log=[],$scope.setExporter=function(exporter){exporter=JSON.parse(exporter),$scope.selectedExporter=exporter};var _log=function(str){$scope.log.push(str)};$scope.startExport=function(){if($scope.error=!1,VaultService.getActiveVault().vaultKey!==$scope.confirm_key){var msg=$translate.instant("invalid.vault.key");return $scope.error=msg,void _log(msg)}_log($translate.instant("export.starting"));var _credentials=[];VaultService.getVault(VaultService.getActiveVault()).then(function(vault){if(_log($translate.instant("export.decrypt")),vault.hasOwnProperty("credentials")&&vault.credentials.length>0){for(var i=0;i<vault.credentials.length;i++){var _credential=angular.copy(vault.credentials[i]);if(0===_credential.hidden){var key=CredentialService.getSharedKeyFromCredential(_credential);_credential=CredentialService.decryptCredential(_credential,key),_credential.vault_key=key,_credentials.push(_credential)}}$window.PassmanExporter[$scope.selectedExporter.id].export(_credentials,FileService,EncryptService).then(function(){_log($translate.instant("done"))})}})}}])}(),function(){angular.module("passmanApp").controller("GenericCsvImportCtrl",["$scope","CredentialService","$translate",function($scope,CredentialService,$translate){$scope.hello="world",$scope.credentialProperties=[{label:"Label",prop:"label",matching:["label","title","name"]},{label:"Username",prop:"username",matching:["username","user","login","login name"]},{label:"Password",prop:"password",matching:["password","pass","pw"]},{label:"TOTP Secret",prop:"otp",matching:["totp"]},{label:"Custom field",prop:"custom_field"},{label:"Notes",prop:"description",matching:["notes","description","comments"]},{label:"Email",prop:"email",matching:["email","mail"]},{label:"URL",prop:"url",matching:["website","url","fulladdress","site","web site"]},{label:"Tags",prop:"tags"},{label:"Ignored",prop:null}];var tagMapper=function(t){return{text:t}},rowToCredential=function(row){for(var _credential=PassmanImporter.newCredential(),k=0;k<$scope.import_fields.length;k++){var field=$scope.import_fields[k];if(field)if("otp"===field)_credential.otp.secret=row[k];else if("custom_field"===field){var key=$scope.matched?$scope.parsed_csv[0][k]:"Custom field "+k;_credential.custom_fields.push({label:key,value:row[k],secret:0})}else if("tags"===field){if(row[k]){var tags=row[k].split(",");_credential.tags=tags.map(tagMapper)}}else _credential[field]=row[k]}return _credential};$scope.inspectCredential=function(row){$scope.inspected_credential=rowToCredential(row)},$scope.csvLoaded=function(file){$scope.import_fields=[],$scope.inspected_credential=!1,$scope.matched=!1,$scope.skipFirstRow=!1;var file_data=file.data.split(",");file_data=decodeURIComponent(escape(window.atob(file_data[1]))),Papa.parse(file_data,{complete:function(results){if(results.data){for(var i=0;i<results.data[0].length;i++){var propName=results.data[0][i];$scope.import_fields[i]=null;for(var p=0;p<$scope.credentialProperties.length;p++){var credentialProperty=$scope.credentialProperties[p];credentialProperty.matching&&credentialProperty.matching.indexOf(propName.toLowerCase())!==-1&&($scope.import_fields[i]=credentialProperty.prop,$scope.matched=!0)}}$scope.matched&&$scope.inspectCredential(results.data[1]),$scope.parsed_csv=results.data,$scope.$apply()}}})};var addCredential=function(index){function handleState(index){$scope.parsed_csv[index+1]?($scope.import_progress={progress:index/$scope.parsed_csv.length*100,loaded:index,total:$scope.parsed_csv.length},addCredential(index+1)):($scope.import_progress={progress:100,loaded:$scope.parsed_csv.length,total:$scope.parsed_csv.length},$scope.log.push($translate.instant("done")),$scope.importing=!1)}var _credential=rowToCredential($scope.parsed_csv[index]);return _credential.vault_id=$scope.active_vault.vault_id,_credential.label?($scope.log.push($translate.instant("import.adding",{credential:_credential.label})),void CredentialService.createCredential(_credential).then(function(result){result.credential_id&&($scope.log.push($translate.instant("import.added",{credential:_credential.label})),handleState(index))})):($scope.log.push($translate.instant("import.skipping",{line:index})),void handleState(index))};$scope.importing=!1,$scope.startCSVImport=function(){$scope.importing=!0,$scope.log=[];var start=$scope.skipFirstRow?1:0;addCredential(start)},$scope.updateExample=function(){var start=$scope.skipFirstRow?1:0;$scope.inspectCredential($scope.parsed_csv[start])}}])}(),function(){angular.module("passmanApp").controller("ImportCtrl",["$scope","$window","CredentialService","VaultService","$translate",function($scope,$window,CredentialService,VaultService,$translate){$scope.available_importers=[],$scope.active_vault=VaultService.getActiveVault(),$scope.$watch(function(){return $window.PassmanImporter},function(importers){for(var key in importers){var importer=importers[key];importer.hasOwnProperty("info")&&$scope.available_importers.push(importer.info)}},!0),$scope.log=[],$scope.setImporter=function(importer){importer=JSON.parse(importer),$scope.selectedImporter=importer};var file_data,_log=function(str){$scope.log.push(str)};$scope.fileLoaded=function(file){file_data=file.data.split(","),file_data=decodeURIComponent(escape(window.atob(file_data[1]))),_log($translate.instant("import.file.read")),$scope.$digest()},$scope.fileLoadError=function(file){console.error($translate.instant("error.loading.file"),file)},$scope.fileSelectProgress=function(){};var parsed_data;$scope.import_progress={progress:0,loaded:0,total:0};var addCredential=function(parsed_data_index){if(parsed_data[parsed_data_index]){var _credential=parsed_data[parsed_data_index];if(!_credential.label)return void(parsed_data[parsed_data_index+1]&&(_log($translate.instant("import.no.label")),addCredential(parsed_data_index+1)));_log($translate.instant("import.adding",{credential:_credential.label})),_credential.vault_id=$scope.active_vault.vault_id,CredentialService.createCredential(_credential).then(function(result){result.credential_id&&(_log($translate.instant("import.added",{credential:_credential.label})),parsed_data[parsed_data_index+1]?($scope.import_progress={progress:parsed_data_index/parsed_data.length*100,loaded:parsed_data_index,total:parsed_data.length},addCredential(parsed_data_index+1)):($scope.import_progress={progress:100,loaded:parsed_data.length,total:parsed_data.length},_log($translate.instant("done"))))})}};$scope.file_read_progress={percent:0,loaded:0,total:0},$scope.startImport=function(){$scope.import_progress=0,$scope.file_read_percent=0,file_data&&$window.PassmanImporter[$scope.selectedImporter.id].readFile(file_data).then(function(parseddata){parsed_data=parseddata,$scope.file_read_progress={percent:100,loaded:parsed_data.length,total:parsed_data.length};var msg=$translate.instant("import.loaded").replace("{{num}}",parsed_data.length);_log(msg),parsed_data.length>0&&addCredential(0)}).progress(function(progress){$scope.file_read_progress=progress,$scope.$digest()})}}])}(),function(){angular.module("passmanApp").controller("MainCtrl",["$scope","$rootScope","$location","SettingsService","$window","$interval","$filter",function($scope,$rootScope,$location,SettingsService,$window,$interval,$filter){$scope.selectedVault=!1,$scope.http_warning_hidden=!0,"http"===$location.$$protocol&&"localhost"!==$location.$$host&&"127.0.0.1"!==$location.$host&&($scope.using_http=!0,$scope.http_warning_hidden=!1),$scope.removeHiddenStyles=function(){document.getElementById("warning_bar").classList.remove("template-hidden")},$rootScope.$on("settings_loaded",function(){SettingsService.isEnabled("disable_contextmenu")&&document.addEventListener("contextmenu",function(event){event.preventDefault()}),SettingsService.isEnabled("https_check")&&($scope.http_warning_hidden=!0),SettingsService.isEnabled("disable_debugger")&&!function a(){try{!function b(i){1===(""+i/i).length&&i%20!==0||function(){}.constructor("debugger")(),b(++i)}(0)}catch(e){setTimeout(a,5e3)}}()}),$rootScope.setHttpWarning=function(state){$scope.http_warning_hidden=state},$rootScope.$on("app_menu",function(evt,shown){$scope.app_sidebar=shown}),$rootScope.$on("logout",function(){$scope.selectedVault=!1});var tickSessionTimer=function(){if($scope.session_time_left){$scope.session_time_left--;var session_time_left_formatted=$filter("toHHMMSS")($scope.session_time_left);$scope.translationData={session_time:session_time_left_formatted},$rootScope.$broadcast("logout_timer_tick_tack",$scope.session_time_left),0===$scope.session_time_left&&$window.location.reload()}};$scope.session_time_left=!1,$scope.$on("logout_timer_set",function(evt,timer){$scope.session_time_left=timer,$scope.translationData={session_time:timer},$interval(tickSessionTimer,1e3)})}])}(),function(){angular.module("passmanApp").controller("MenuCtrl",["$scope","VaultService","$location","$rootScope","TagService","SettingsService","$translate","SearchboxexpanderService",function($scope,VaultService,$location,$rootScope,TagService,SettingsService,$translate,SearchboxexpanderService){$rootScope.logout=function(){$rootScope.override_default_vault=!0,SettingsService.setSetting("defaultVaultPass",!1),TagService.resetTags(),$rootScope.$broadcast("logout"),$location.path("/")},$scope.removeHiddenStyles=function(){document.getElementById("app-navigation").classList.remove("template-hidden")},$scope.selectedTags=[],$scope.getTags=function($query){return TagService.searchTag($query)},$scope.$watch(function(){return VaultService.getActiveVault()},function(vault){$scope.active_vault=vault}),$scope.filtered_tags=[],$rootScope.$on("limit_tags_in_list",function(evt,tags){$scope.filtered_tags=[];for(var i=0;i<tags.length;i++){for(var tag={text:tags[i]},found=!1,x=0;x<$scope.selectedTags.length;x++)$scope.selectedTags[x].text===tag.text&&(found=!0);found===!1&&$scope.filtered_tags.push(tag)}}),$scope.$watch("selectedTags",function(){$rootScope.$broadcast("selected_tags_updated",$scope.selectedTags)},!0),$scope.tagSelected=function(tag){for(var i=0;i<$scope.selectedTags.length;i++)if($scope.selectedTags[i].text===tag.text)return!0;return!1},$scope.removeTagFromSelected=function(tag){for(var where=-1,i=0;i<$scope.selectedTags.length;i++)$scope.selectedTags[i].text===tag.text&&(where=i);$scope.selectedTags.splice(where,1)},$scope.clearForm=function(){document.getElementById("tagsearch").value=""},$scope.tagClickedString=function(tagtext){var tag=[];tag.text=tagtext,$scope.tagClicked(tag)},$scope.tagClicked=function(tag){$scope.tagSelected(tag)?$scope.removeTagFromSelected(tag):$scope.selectedTags.push(tag)},SearchboxexpanderService.expandSearch($rootScope,$scope),$scope.clickedNavigationItem="all",$scope.filterCredentialBySpecial=function(string){$scope.clickedNavigationItem=string,"nav_trashbin"!==string&&($scope.delete_time=0,$rootScope.$broadcast("set_delete_time",$scope.delete_time)),$scope.selectedTags=[],$rootScope.$broadcast("filterSpecial",string),$scope.settingsShown=!1},$scope.collapsedDefaultValue=!0,$scope.tagCollapsibleOpen=VaultService.getVaultSetting("vaultTagCollapsedState",$scope.collapsedDefaultValue),$scope.tagCollapsibleClicked=function(){VaultService.getVaultSetting("vaultTagCollapsedState",$scope.collapsedDefaultValue)===!0?VaultService.setVaultSetting("vaultTagCollapsedState",!1):VaultService.setVaultSetting("vaultTagCollapsedState",!0)},$scope.tagCollapsibleState=function(){return VaultService.getVaultSetting("vaultTagCollapsedState",$scope.collapsedDefaultValue)?"":"open"},$scope.initPlaceholder=function(){$translate.onReady().then(function(){var string=$translate.instant("navigation.advanced.filter");document.getElementById("tags-input-outer").setAttribute("placeholder",string),document.getElementById("tags-input-outer").firstChild.firstChild.childNodes[1].setAttribute("placeholder",string)})},$scope.legacyNavbarDefault=!0,$scope.legacyNavbarAlreadyInitialized=!1,"undefined"==typeof $scope.legacyNavbar&&($scope.legacyNavbar=$scope.legacyNavbarDefault),$scope.$watch("legacyNavbar",function(newValue,oldValue){VaultService.setVaultSetting("vaultNavBarLegacy",newValue)}),$scope.initializeNavbar=function(){$scope.legacyNavbarAlreadyInitialized||($scope.legacyNavbar=VaultService.getVaultSetting("vaultNavBarLegacy",$scope.legacyNavbarDefault),$scope.legacyNavbarAlreadyInitialized=!0)},$rootScope.$on("credentials_loaded",function(){$rootScope.$broadcast("selected_tags_updated",$scope.selectedTags),$scope.initializeNavbar()}),$scope.available_tags=TagService.getTags(),$scope.$watch(function(){return 0===$scope.selectedTags.length?TagService.getTags():TagService.getTags()},function(tags){$scope.available_tags=TagService.getTags()},!0),$scope.toggleDeleteTime=function(){$scope.delete_time>0?$scope.delete_time=0:($scope.delete_time=1,this.filterCredentialBySpecial("nav_trashbin")),$rootScope.$broadcast("set_delete_time",$scope.delete_time)}}])}(),function(){angular.module("passmanApp").controller("PublicSharedCredential",["$scope","ShareService","$window","EncryptService","NotificationService","$translate",function($scope,ShareService,$window,EncryptService,NotificationService,$translate){var _key;$scope.loading=!1,$scope.loadSharedCredential=function(){$scope.loading=!0;var data=window.atob($window.location.hash.replace("#","")).split("<::>"),guid=data[0];_key=data[1],ShareService.getPublicSharedCredential(guid).then(function(sharedCredential){$scope.loading=!1,200===sharedCredential.status?$scope.shared_credential=ShareService.decryptSharedCredential(sharedCredential.data.credential_data,_key):$scope.expired=!0})},$scope.downloadFile=function(credential,file){ShareService.downloadSharedFile(credential,file).then(function(result){if(!result.hasOwnProperty("file_data"))return void NotificationService.showNotification($translate.instant("error.loading.file.perm"),5e3);var file_data=EncryptService.decryptString(result.file_data,_key);download(file_data,escapeHTML(file.filename),file.mimetype)})}}])}(),function(){angular.module("passmanApp").controller("RevisionCtrl",["$scope","SettingsService","VaultService","CredentialService","$location","$routeParams","$rootScope","NotificationService","$filter","ShareService","EncryptService","$translate",function($scope,SettingsService,VaultService,CredentialService,$location,$routeParams,$rootScope,NotificationService,$filter,ShareService,EncryptService,$translate){if($scope.active_vault=VaultService.getActiveVault(),SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=SettingsService.getSetting("defaultVaultPass"),VaultService.setActiveVault(_vault),VaultService.getVault(_vault).then(function(vault){vault.vaultKey=SettingsService.getSetting("defaultVaultPass"),VaultService.setActiveVault(vault),$scope.active_vault=vault,$scope.$parent.selectedVault=!0})}}else $scope.active_vault||$location.path("/");$scope.active_vault&&($scope.$parent.selectedVault=!0);var storedCredential=SettingsService.getSetting("revision_credential"),getRevisions=function(){CredentialService.getRevisions($scope.storedCredential.guid).then(function(revisions){$scope.revisions=revisions})};storedCredential?($scope.storedCredential=CredentialService.decryptCredential(angular.copy(storedCredential)),getRevisions()):CredentialService.getCredential($routeParams.credential_id).then(function(result){$scope.storedCredential=CredentialService.decryptCredential(angular.copy(result)),getRevisions()}),$scope.selectRevision=function(revision){var key;$scope.selectedRevision=angular.copy(revision),!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),key?$scope.selectedRevision.credential_data=ShareService.decryptSharedCredential(angular.copy(revision.credential_data),key):$scope.selectedRevision.credential_data=CredentialService.decryptCredential(angular.copy(revision.credential_data)),$rootScope.$emit("app_menu",!0)},$scope.closeSelected=function(){$rootScope.$emit("app_menu",!1),$scope.selectedRevision=!1},$scope.deleteRevision=function(revision){CredentialService.deleteRevision($scope.storedCredential.guid,revision.revision_id).then(function(){for(var i=0;i<$scope.revisions.length;i++)if($scope.revisions[i].revision_id===revision.revision_id){$scope.revisions.splice(i,1),NotificationService.showNotification($translate.instant("revision.deleted"),5e3);break}})},$scope.restoreRevision=function(revision){var key,_revision=angular.copy(revision),_credential=_revision.credential_data;!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),key&&(_credential=ShareService.encryptSharedCredential(_credential,key)),delete _credential.shared_key,_credential.revision_created=$filter("date")(1e3*_revision.created,"dd-MM-yyyy @ HH:mm:ss"),CredentialService.updateCredential(_credential,key).then(function(restored_cred){SettingsService.setSetting("revision_credential",null),$rootScope.$emit("app_menu",!1),$location.path("/vault/"+$routeParams.vault_id),NotificationService.showNotification($translate.instant("revision.restored"),5e3),$scope.updateExistingListWithCredential(restored_cred)})},$scope.updateExistingListWithCredential=function(credential){try{if(credential.shared_key){var enc_key=EncryptService.decryptString(credential.shared_key);credential=ShareService.decryptSharedCredential(credential,enc_key)}else credential=CredentialService.decryptCredential(credential);credential.tags_raw=credential.tags;for(var found=!1,credList=$rootScope.vaultCache[$scope.active_vault.guid].credentials,i=0;i<credList.length;i++)credList[i].credential_id===credential.credential_id&&($rootScope.vaultCache[$scope.active_vault.guid].credentials[i]=credential,found=!0);found||$rootScope.vaultCache[$scope.active_vault.guid].credentials.push(credential),$rootScope.$broadcast("push_decrypted_credential_to_list",credential)}catch(e){NotificationService.showNotification($translate.instant("error.decrypt"),5e3),console.log(e)}},$scope.cancelRevision=function(){$location.path("/vault/"+$routeParams.vault_id),$scope.storedCredential=null,SettingsService.setSetting("revision_credential",null)}}])}(),function(){angular.module("passmanApp").controller("SettingsCtrl",["$scope","$rootScope","SettingsService","VaultService","CredentialService","$location","$routeParams","$http","EncryptService","NotificationService","$sce","$translate",function($scope,$rootScope,SettingsService,VaultService,CredentialService,$location,$routeParams,$http,EncryptService,NotificationService,$sce,$translate){if($scope.vault_settings={},$scope.new_vault_name="",$scope.showGenericImport=!1,$scope.active_vault=VaultService.getActiveVault(),SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=SettingsService.getSetting("defaultVaultPass"),VaultService.setActiveVault(_vault),$scope.active_vault=_vault}}else if(!$scope.active_vault)return void $location.path("/");VaultService.getVault($scope.active_vault).then(function(vault){vault.vaultKey=VaultService.getActiveVault().vaultKey,delete vault.credentials,VaultService.setActiveVault(vault),$scope.vault_settings=vault.vault_settings,$scope.vault_settings.hasOwnProperty("pwSettings")||($scope.vault_settings.pwSettings={length:12,useUppercase:!0,useLowercase:!0,useDigits:!0,useSpecialChars:!0,minimumDigitCount:3,avoidAmbiguousCharacters:!1,requireEveryCharType:!0,generateOnCreate:!0})});var key_strengths=["password.poor","password.poor","password.weak","password.good","password.strong"];$scope.minimal_value_key_strength=SettingsService.getSetting("vault_key_strength"),$translate(key_strengths[SettingsService.getSetting("vault_key_strength")]).then(function(translation){$scope.required_score={strength:translation}});var btn_txt=$translate.instant("bookmarklet.text"),http=location.protocol,slashes=http.concat("//"),host=slashes.concat(window.location.hostname),complete=host+location.pathname;$scope.bookmarklet=$sce.trustAsHtml('<a class="button" href="javascript:(function(){var a=window,b=document,c=encodeURIComponent,e=c(document.title),d=a.open(\''+complete+"bookmarklet?url='+c(b.location)+'&title='+e,'bkmk_popup','left='+((a.screenX||a.screenLeft)+10)+',top='+((a.screenY||a.screenTop)+10)+',height=750px,width=475px,resizable=0,alwaysRaised=1');a.setTimeout(function(){d.focus()},300);})();\">"+btn_txt+"</a>"),$scope.saveVaultSettings=function(){var _vault=$scope.active_vault;_vault.name=$scope.new_vault_name,_vault.vault_settings=angular.copy($scope.vault_settings),VaultService.updateVault(_vault).then(function(){$scope.active_vault.name=angular.copy(_vault.name),NotificationService.showNotification($translate.instant("settings.saved"),5e3)})},$scope.tabs=[{title:$translate.instant("settings.general"),url:"views/partials/forms/settings/general_settings.html"},{title:$translate.instant("settings.audit"),url:"views/partials/forms/settings/tool.html"},{title:$translate.instant("settings.password"),url:"views/partials/forms/settings/password_settings.html"},{title:$translate.instant("settings.import"),url:"views/partials/forms/settings/import.html"},{title:$translate.instant("settings.export"),url:"views/partials/forms/settings/export.html"},{title:$translate.instant("settings.sharing"),url:"views/partials/forms/settings/sharing.html"}],$scope.currentTab=$scope.tabs[0],$scope.onClickTab=function(tab){$scope.currentTab=tab},$scope.isActiveTab=function(tab){return tab.url===$scope.currentTab.url};var getPassmanVersion=function(){var url=OC.generateUrl("apps/passman/api/internal/version");$http.get(url).then(function(result){$scope.passman_version=result.data.version})};getPassmanVersion(),$scope.$watch(function(){return VaultService.getActiveVault()},function(vault){vault&&($scope.active_vault=vault)}),$rootScope.$on("logout",function(){$scope.selectedVault=!1});var getCurrentVaultCredentials=function(callback){VaultService.getVault($scope.active_vault).then(callback)};$scope.startScan=function(minStrength){getCurrentVaultCredentials(function(vault){for(var results=[],i=0;i<vault.credentials.length;i++){var c=angular.copy(vault.credentials[i]);if(c.password&&0===c.hidden)try{if(c=CredentialService.decryptCredential(c),c.password){var zxcvbn_result=zxcvbn(c.password);zxcvbn_result.score<=minStrength&&results.push({guid:c.guid,label:c.label,password:c.password,password_zxcvbn_result:zxcvbn_result})}}catch(e){console.warn(e)}}$scope.scan_result=results})},$scope.cur_state={},$scope.$on("$locationChangeStart",function(event){$scope.change_pw&&$scope.change_pw.total>0&&$scope.change_pw.done<$scope.change_pw.total&&(confirm($translate.instant("changepw.navigate.away.warning"))||event.preventDefault())}),$scope.changeVaultPassword=function(oldVaultPass,newVaultPass,newVaultPass2){return $scope.error="",oldVaultPass!==VaultService.getActiveVault().vaultKey?void($scope.error=$translate.instant("incorrect.password")):newVaultPass!==newVaultPass2?void($scope.error=$translate.instant("password.no.match")):(SettingsService.setSetting("defaultVault",null),SettingsService.setSetting("defaultVaultPass",null),void VaultService.getVault($scope.active_vault).then(function(vault){jQuery("input").attr("disabled",!0),jQuery("button").attr("disabled",!0);var _selected_credentials=angular.copy(vault.credentials);$scope.change_pw={percent:0,done:0,total:_selected_credentials.length};var changeCredential=function(index,oldVaultPass,newVaultPass){var usedKey=oldVaultPass;_selected_credentials[index].hasOwnProperty("shared_key")&&_selected_credentials[index].shared_key&&(usedKey=EncryptService.decryptString(angular.copy(_selected_credentials[index].shared_key),oldVaultPass)),CredentialService.reencryptCredential(_selected_credentials[index].guid,usedKey,newVaultPass).progress(function(data){$scope.cur_state=data}).then(function(){var percent=index/_selected_credentials.length*100;$scope.change_pw={percent:percent,done:index+1,total:_selected_credentials.length},index<_selected_credentials.length-1?changeCredential(index+1,oldVaultPass,newVaultPass):(vault.private_sharing_key=EncryptService.decryptString(angular.copy(vault.private_sharing_key),oldVaultPass),vault.private_sharing_key=EncryptService.encryptString(vault.private_sharing_key,newVaultPass),VaultService.updateSharingKeys(vault).then(function(){$rootScope.$broadcast("logout"),NotificationService.showNotification($translate.instant("login.new.pass"),5e3)}))})};changeCredential(0,VaultService.getActiveVault().vaultKey,newVaultPass)}))},$scope.confirm_vault_delete=!1,$scope.delete_vault_password="",$scope.delete_vault=function(){$scope.confirm_vault_delete&&$scope.delete_vault_password===VaultService.getActiveVault().vaultKey&&getCurrentVaultCredentials(function(vault){var credentials=vault.credentials;$scope.remove_pw={percent:0,done:0,total:vault.credentials.length};var deleteCredential=function(index){$scope.translationData={password:credentials[index].label},CredentialService.destroyCredential(credentials[index].guid).then(function(){var percent=index/vault.credentials.length*100;return $scope.remove_pw={percent:percent,
+done:index,total:vault.credentials.length},index===credentials.length-1?void VaultService.deleteVault(vault).then(function(){SettingsService.setSetting("defaultVaultPass",!1),SettingsService.setSetting("defaultVault",null),$rootScope.$broadcast("logout"),$location.path("/")}):void deleteCredential(index+1)})};deleteCredential(0)})},$rootScope.$on("logout",function(){$scope.active_vault=null,VaultService.setActiveVault(null),$location.path("/")}),$scope.cancel=function(){$location.path("/vault/"+$routeParams.vault_id)}}])}(),function(){angular.module("passmanApp").controller("ShareCtrl",["$scope","VaultService","CredentialService","SettingsService","$location","$routeParams","ShareService","NotificationService","SharingACL","EncryptService","$translate","$rootScope",function($scope,VaultService,CredentialService,SettingsService,$location,$routeParams,ShareService,NotificationService,SharingACL,EncryptService,$translate,$rootScope){$scope.active_vault=VaultService.getActiveVault(),$scope.tabs=[{title:$translate.instant("share.u.g"),url:"views/partials/forms/share_credential/basics.html"},{title:$translate.instant("share.link"),url:"views/partials/forms/share_credential/link_sharing.html",color:"green"}],$scope.currentTab=$scope.tabs[0];var settingsLoaded=function(){var settings=SettingsService.getSettings();0!==settings.user_sharing_enabled&&"0"!==settings.user_sharing_enabled||$scope.tabs.splice(0,1),0!==settings.link_sharing_enabled&&"0"!==settings.link_sharing_enabled||$scope.tabs.splice(1,1),$scope.tabs.length>0&&($scope.currentTab=$scope.tabs[0])};if(SettingsService.getSetting("settings_loaded")?settingsLoaded():$rootScope.$on("settings_loaded",function(){settingsLoaded()}),$scope.onClickTab=function(tab){$scope.currentTab=tab},$scope.isActiveTab=function(tab){return tab.url===$scope.currentTab.url},SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=angular.copy(SettingsService.getSetting("defaultVaultPass")),VaultService.setActiveVault(_vault),$scope.active_vault=_vault}}else $scope.active_vault||$location.path("/");var storedCredential=SettingsService.getSetting("share_credential");storedCredential?$scope.storedCredential=CredentialService.decryptCredential(angular.copy(storedCredential)):$location.path("/vault/"+$routeParams.vault_id),$scope.active_vault&&($scope.$parent.selectedVault=!0),$scope.cancel=function(){SettingsService.setSetting("share_credential",null),$location.path("/vault/"+$routeParams.vault_id)},$scope.default_permissions=new SharingACL(0),$scope.default_permissions.addPermission($scope.default_permissions.permissions.READ|$scope.default_permissions.permissions.WRITE|$scope.default_permissions.permissions.FILES);var link_acl=angular.copy($scope.default_permissions);link_acl.removePermission($scope.default_permissions.permissions.WRITE);var oneMonthLater=new Date;oneMonthLater.setMonth(oneMonthLater.getMonth()+1),$scope.share_settings={linkSharing:{enabled:!1,settings:{expire_time:oneMonthLater,expire_views:5,acl:link_acl}},credentialSharedWithUserAndGroup:[],cypher_progress:{done:0,total:0},upload_progress:{done:0,total:0}};var getAcl=function(){ShareService.getSharedCredentialACL($scope.storedCredential).then(function(aclList){for(var _list=[],enc_key=!!$scope.storedCredential.shared_key&&EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key)),i=0;i<aclList.length;i++){var acl=aclList[i];if(null===acl.user_id){if($scope.share_settings.linkSharing={enabled:!0,settings:{expire_time:new Date(1e3*acl.expire),expire_views:acl.expire_views,acl:new SharingACL(acl.permissions)}},enc_key){var hash=window.btoa($scope.storedCredential.guid+"<::>"+enc_key);$scope.share_link=getShareLink(hash)}}else{var obj={userId:acl.user_id,displayName:acl.user_id,type:"user",acl:new SharingACL(acl.permissions),acl_id:acl.acl_id,pending:acl.pending,credential_guid:acl.item_guid,created:acl.created};_list.push(obj)}}$scope.share_settings.credentialSharedWithUserAndGroup=_list})};getAcl();new SharingACL(0);$scope.$watch("share_settings.upload_progress.done",function(){$scope.share_settings.upload_progress.done===$scope.share_settings.upload_progress.total&&$scope.share_settings.upload_progress.total>0&&getAcl()}),$scope.inputSharedWith=[],$scope.searchUsers=function($query){return ShareService.search($query)},$scope.hasPermission=function(acl,permission){return acl.hasPermission(permission)},$scope.setPermission=function(acl,permission){acl.togglePermission(permission)},$scope.shareWith=function(shareWith){if($scope.inputSharedWith=[],shareWith.length>0)for(var i=0;i<shareWith.length;i++){for(var obj={userId:shareWith[i].uid,displayName:shareWith[i].text,type:shareWith[i].type,acl:angular.copy($scope.default_permissions),pending:!0,credential_guid:$scope.storedCredential.guid},found=!1,z=0;z<$scope.share_settings.credentialSharedWithUserAndGroup.length;z++)shareWith[z]&&$scope.share_settings.credentialSharedWithUserAndGroup[z].userId===shareWith[z].uid&&(found=!0);found===!1&&$scope.share_settings.credentialSharedWithUserAndGroup.push(obj)}},$scope.unshareUser=function(user){ShareService.unshareCredentialFromUser($scope.storedCredential,user.userId).then(function(result){if(result.result===!0){var idx=$scope.share_settings.credentialSharedWithUserAndGroup.indexOf(user);$scope.share_settings.credentialSharedWithUserAndGroup.splice(idx,1)}})},$scope.unshareCredential=function(credential){var _credential=angular.copy(credential),old_key=EncryptService.decryptString(angular.copy(_credential.shared_key)),new_key=VaultService.getActiveVault().vaultKey;_credential.shared_key=null,_credential.unshare_action=!0,_credential.skip_revision=!0,CredentialService.reencryptCredential(_credential.guid,old_key,new_key,!0).then(function(data){getAcl();var c=data.cryptogram;c.shared_key=null,c.unshare_action=!0,c.skip_revision=!0,ShareService.unshareCredential(c),CredentialService.updateCredential(c,!0).then(function(){NotificationService.showNotification($translate.instant("credential.unshared"),4e3),$scope.sharing_complete=!0,$scope.storedCredential.shared_key=null,$scope.share_settings.credentialSharedWithUserAndGroup=[]})})},$scope.applyShareToUser=function(user,enc_key){ShareService.getVaultsByUser(user.userId).then(function(data){$scope.share_settings.cypher_progress.total+=data.length,user.vaults=data;var start=(new Date).getTime()/1e3;ShareService.cypherRSAStringWithPublicKeyBulkAsync(user.vaults,enc_key).progress(function(){$scope.share_settings.cypher_progress.done++,$scope.share_settings.cypher_progress.percent=$scope.share_settings.cypher_progress.done/$scope.share_settings.cypher_progress.total*100,$scope.$digest()}).then(function(result){$scope.share_settings.cypher_progress.times.push({time:(new Date).getTime()/1e3-start,user:data[0].user_id}),user.vaults=result,user.hasOwnProperty("acl_id")||$scope.uploadChanges(user),$scope.$digest()})})},$scope.$on("$locationChangeStart",function(event){$scope.sharing_complete||confirm($translate.instant("share.navigate.away.warning"))||event.preventDefault()});var getShareLink=function(hash){var port,defaultPort="http"===$location.$$protocol?80:443;return port=defaultPort!==$location.$$port?":"+$location.$$port:"",$location.$$protocol+"://"+$location.$$host+port+OC.generateUrl("apps/passman/share/public#")+hash};$scope.sharing_complete=!0,$scope.applyShare=function(){if($scope.sharing_complete=!1,$scope.share_settings.cypher_progress.percent=0,$scope.share_settings.cypher_progress.done=0,$scope.share_settings.cypher_progress.total=0,$scope.share_settings.cypher_progress.times=[],$scope.share_settings.cypher_progress.times_total=[],$scope.share_settings.upload_progress.done=0,$scope.share_settings.upload_progress.total=0,$scope.storedCredential.shared_key&&""!==$scope.storedCredential.shared_key&&null!==$scope.storedCredential.shared_key){var enc_key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key));if($scope.share_settings.linkSharing.enabled){var expire_time=new Date(angular.copy($scope.share_settings.linkSharing.settings.expire_time)).getTime()/1e3,shareObj={item_id:$scope.storedCredential.credential_id,item_guid:$scope.storedCredential.guid,permissions:$scope.share_settings.linkSharing.settings.acl.getAccessLevel(),expire_timestamp:expire_time,expire_views:$scope.share_settings.linkSharing.settings.expire_views};ShareService.createPublicSharedCredential(shareObj).then(function(){var hash=window.btoa($scope.storedCredential.guid+"<::>"+enc_key);$scope.share_link=getShareLink(hash)})}for(var list=$scope.share_settings.credentialSharedWithUserAndGroup,i=0;i<list.length;i++){var iterator=i,target_user=list[i];if(target_user.hasOwnProperty("created")){var acl={user_id:target_user.userId,permission:target_user.acl.getAccessLevel()};ShareService.updateCredentialAcl($scope.storedCredential,acl)}else $scope.applyShareToUser(list[iterator],enc_key)}NotificationService.showNotification($translate.instant("saved"),4e3),$scope.sharing_complete=!0}else ShareService.generateSharedKey(20).then(function(key){var encryptedSharedCredential=angular.copy($scope.storedCredential),old_key=VaultService.getActiveVault().vaultKey;CredentialService.reencryptCredential(encryptedSharedCredential.guid,old_key,key).progress(function(){}).then(function(data){var _credential=data.cryptogram;_credential.set_share_key=!0,_credential.skip_revision=!0,_credential.shared_key=EncryptService.encryptString(key),CredentialService.updateCredential(_credential,!0).then(function(){$scope.storedCredential.shared_key=_credential.shared_key,NotificationService.showNotification($translate.instant("credential.shared"),4e3),$scope.sharing_complete=!0})});for(var list=$scope.share_settings.credentialSharedWithUserAndGroup,i=0;i<list.length;i++)"user"===list[i].type&&$scope.applyShareToUser(list[i],key);if($scope.share_settings.linkSharing.enabled){var expire_time=new Date(angular.copy($scope.share_settings.linkSharing.settings.expire_time)).getTime()/1e3,shareObj={item_id:$scope.storedCredential.credential_id,item_guid:$scope.storedCredential.guid,permissions:$scope.share_settings.linkSharing.settings.acl.getAccessLevel(),expire_timestamp:expire_time,expire_views:$scope.share_settings.linkSharing.settings.expire_views};ShareService.createPublicSharedCredential(shareObj).then(function(){var hash=window.btoa($scope.storedCredential.guid+"<::>"+key);$scope.share_link=getShareLink(hash)})}})},$scope.uploadChanges=function(user){$scope.share_settings.upload_progress.total++,user.accessLevel=angular.copy(user.acl.getAccessLevel()),ShareService.shareWithUser(storedCredential,user).then(function(){$scope.share_settings.upload_progress.done++,$scope.share_settings.upload_progress.percent=$scope.share_settings.upload_progress.done/$scope.share_settings.upload_progress.total*100})},$scope.calculate_total_time=function(){$scope.share_settings.cypher_progress.times=$scope.share_settings.cypher_progress.times||[];for(var total=0,i=0;i<$scope.share_settings.cypher_progress.times.length;i++)total+=$scope.share_settings.cypher_progress.times[i].time;return total}}])}(),function(){angular.module("passmanApp").controller("SharingSettingsCtrl",["$scope","VaultService","CredentialService","SettingsService","$location","$routeParams","ShareService","EncryptService",function($scope,VaultService,CredentialService,SettingsService,$location,$routeParams,ShareService,EncryptService){$scope.active_vault=VaultService.getActiveVault(),$scope.sharing_keys=angular.copy(ShareService.getSharingKeys()),$scope.progress=1,$scope.generating=!1,$scope.available_sizes=[{size:1024,name:1024},{size:2048,name:2048},{size:4096,name:4096}],$scope.setKeySize=function(size){for(var i=0;i<$scope.available_sizes.length;i++)if($scope.available_sizes[i].size===size)return void($scope.key_size=$scope.available_sizes[i])},$scope.setKeySize(2048),$scope.generateKeys=function(length){$scope.progress=1,$scope.generating=!0,ShareService.generateRSAKeys(length).progress(function(progress){$scope.progress=progress>0?2:1,$scope.$digest()}).then(function(kp){$scope.generating=!1;var pem=ShareService.rsaKeyPairToPEM(kp);$scope.active_vault.private_sharing_key=EncryptService.encryptString(pem.privateKey),$scope.active_vault.public_sharing_key=pem.publicKey,VaultService.updateSharingKeys($scope.active_vault).then(function(){$scope.sharing_keys=ShareService.getSharingKeys()})})},$scope.updateSharingKeys=function(){$scope.active_vault.private_sharing_key=EncryptService.encryptString(angular.copy($scope.sharing_keys.private_sharing_key)),$scope.active_vault.public_sharing_key=angular.copy($scope.sharing_keys.public_sharing_key),VaultService.updateSharingKeys($scope.active_vault).then(function(){$scope.sharing_keys=ShareService.getSharingKeys()})}}])}(),function(){angular.module("passmanApp").controller("VaultCtrl",["$scope","VaultService","SettingsService","CredentialService","$location","ShareService","EncryptService","$translate","$rootScope","$interval",function($scope,VaultService,SettingsService,CredentialService,$location,ShareService,EncryptService,$translate,$rootScope,$interval){VaultService.getVaults().then(function(vaults){if($scope.vaults=vaults,null!=SettingsService.getSetting("defaultVault"))for(var default_vault=SettingsService.getSetting("defaultVault"),i=0;i<vaults.length;i++){var vault=vaults[i];if(vault.guid===default_vault.guid){$scope.default_vault=!0,$rootScope.override_default_vault||($scope.list_selected_vault=vault,$rootScope.override_default_vault=!1),SettingsService.setSetting("defaultVault",vault),SettingsService.getSetting("defaultVaultPass")&&$location.path("/vault/"+vault.guid),$scope.vault_tries[vault.guid]={tries:0,timeout:0};break}}});var key_strengths=["password.poor","password.poor","password.weak","password.good","password.strong"];$scope.default_vault=!1,$scope.remember_vault_password=!1,$scope.auto_logout_timer=!1,$scope.logout_timer="0",$scope.list_selected_vault=!1,$scope.minimal_value_key_strength=3;var settingsLoaded=function(){$scope.minimal_value_key_strength=SettingsService.getSetting("vault_key_strength"),$translate(key_strengths[SettingsService.getSetting("vault_key_strength")]).then(function(translation){$scope.required_score={strength:translation}})};SettingsService.getSetting("settings_loaded")?settingsLoaded():$rootScope.$on("settings_loaded",function(){settingsLoaded()}),$scope.toggleDefaultVault=function(){$scope.default_vault=!$scope.default_vault,$scope.default_vault===!0?SettingsService.setSetting("defaultVault",$scope.list_selected_vault):SettingsService.setSetting("defaultVault",null)},$scope.toggleRememberPassword=function(){$scope.remember_vault_password=!$scope.remember_vault_password,$scope.remember_vault_password&&(SettingsService.setSetting("defaultVault",$scope.list_selected_vault),$scope.default_vault=!0),$scope.remember_vault_password!==!0&&SettingsService.setSetting("defaultVault",null)},$scope.toggleAutoLogout=function(){$scope.auto_logout_timer=!$scope.auto_logout_timer},$scope.clearState=function(){$scope.list_selected_vault=!1,$scope.creating_vault=!1,$scope.error=!1},$scope.selectVault=function(vault){$scope.list_selected_vault=vault,$scope.vault_tries[vault.guid]||($scope.vault_tries[vault.guid]={tries:0,timeout:0})},$scope.sharing_keys={},$scope.newVault=function(){$scope.creating_vault=!0;var key_size=1024;ShareService.generateRSAKeys(key_size).progress(function(progress){var p=progress>0?2:1,msg=$translate.instant("generating.sharing.keys");msg=msg.replace("%step",p),$scope.creating_keys=msg,$scope.$digest()}).then(function(kp){var pem=ShareService.rsaKeyPairToPEM(kp);$scope.creating_keys=!1,$scope.sharing_keys.private_sharing_key=pem.privateKey,$scope.sharing_keys.public_sharing_key=pem.publicKey,$scope.$digest()})},$scope.requestDeletion=function(vault){$location.path("/vault/"+vault.guid+"/request-deletion")};var _loginToVault=function(vault,vault_key){var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),delete _vault.credentials;var timer=parseInt($scope.logout_timer);$scope.auto_logout_timer&&timer>0&&$rootScope.$broadcast("logout_timer_set",60*timer),VaultService.setActiveVault(_vault),$location.path("/vault/"+vault.guid)};$scope.selectLogoutTimer=function(time){$scope.auto_logout_timer=!0,$scope.logout_timer=time};var tickLockTimer=function(guid){$scope.vault_tries[guid].timeout=$scope.vault_tries[guid].timeout-1,$scope.vault_tries[guid].timeout<=0&&($interval.cancel($scope.vault_tries[guid].timer),$scope.vault_tries[guid].timeout=0)};$scope.vault_tries={},$scope.vaultDecryptionKey="",$scope.loginToVault=function(vault,vault_key){$scope.error=!1;var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),VaultService.setActiveVault(_vault);try{EncryptService.decryptString(vault.challenge_password),$scope.remember_vault_password&&SettingsService.setSetting("defaultVaultPass",vault_key),_loginToVault(vault,vault_key)}catch(e){if($scope.error=$translate.instant("invalid.vault.key"),$scope.vault_tries[vault.guid].tries=$scope.vault_tries[vault.guid].tries+1,$scope.vault_tries[vault.guid].tries>=3){var duration=Math.pow(2,1/7)*Math.pow(15,4/7)*Math.pow(Math.pow(2,2/7)*Math.pow(15,1/7),$scope.vault_tries[vault.guid].tries);$scope.vault_tries[vault.guid].timeout=duration,$scope.vault_tries[vault.guid].hasOwnProperty("timer")&&$interval.cancel($scope.vault_tries[vault.guid].timer),$scope.vault_tries[vault.guid].timer=$interval(function(){tickLockTimer(vault.guid)},1e3)}}},$scope.createVault=function(vault_name,vault_key,vault_key2){return vault_key!==vault_key2?void($scope.error=$translate.instant("password.do.not.match")):void VaultService.createVault(vault_name).then(function(vault){$scope.vaults.push(vault);var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),VaultService.setActiveVault(_vault),SettingsService.setSetting("defaultVaultPass",null),SettingsService.setSetting("defaultVault",null);var test_credential=CredentialService.newCredential();test_credential.label="Test key for vault "+vault_name,test_credential.hidden=!0,test_credential.vault_id=vault.vault_id,test_credential.password="lorum ipsum",CredentialService.createCredential(test_credential).then(function(){_vault.public_sharing_key=angular.copy($scope.sharing_keys.public_sharing_key),_vault.private_sharing_key=EncryptService.encryptString(angular.copy($scope.sharing_keys.private_sharing_key)),VaultService.updateSharingKeys(_vault).then(function(){_loginToVault(vault,vault_key)})})})}}])}(),function(){angular.module("passmanApp").controller("RequestDeleteCtrl",["$scope","$location","$http","$routeParams","VaultService","NotificationService","$translate",function($scope,$location,$http,$routeParams,VaultService,NotificationService,$translate){$scope.reason="",VaultService.getVault({guid:$routeParams.vault_id}).then(function(vault){$scope.pending_deletion=vault.delete_request_pending}),$scope.requestDeletion=function(){var queryUrl=OC.generateUrl("apps/passman/admin/request-deletion/"+$routeParams.vault_id),params={reason:$scope.reason};$http.post(queryUrl,params).then(function(){NotificationService.showNotification($translate.instant("deletion.requested"),5e3),$location.path("#/")})},$scope.removeRequestDeletion=function(){var queryUrl=OC.generateUrl("apps/passman/admin/request-deletion/"+$routeParams.vault_id);$http.delete(queryUrl).then(function(){NotificationService.showNotification($translate.instant("deletion.removed"),5e3),$location.path("#/")})}}])}(),angular.module("templates-main",["views/credential_revisions.html","views/edit_credential.html","views/partials/credential_template.html","views/partials/forms/edit_credential/basics.html","views/partials/forms/edit_credential/custom_fields.html","views/partials/forms/edit_credential/files.html","views/partials/forms/edit_credential/otp.html","views/partials/forms/edit_credential/password.html","views/partials/forms/settings/export.html","views/partials/forms/settings/general_settings.html","views/partials/forms/settings/generic_csv_import.html","views/partials/forms/settings/import.html","views/partials/forms/settings/password_settings.html","views/partials/forms/settings/sharing.html","views/partials/forms/settings/tool.html","views/partials/forms/share_credential/basics.html","views/partials/forms/share_credential/link_sharing.html","views/partials/icon-picker.html","views/partials/password-meter.html","views/settings.html","views/share_credential.html","views/show_vault.html","views/vault_req_deletion.html","views/vaults.html"]),angular.module("views/credential_revisions.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/credential_revisions.html",'<div class="main_list" off-click-filter="\'.download-js-link, .sidebar-shown, #app-sidebar\'"><div id="passman-controls"><div class="actions creatable"><div class="breadcrumb"><div class="crumb svg ui-droppable"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg"><a ng-click="cancelRevision()">{{active_vault.name}}</a></div><div class="crumb svg last"><a ng-if="storedCredential.credential_id">{{ \'showing.revisions\' | translate}} "{{revision.credential_data.label}}"</a></div></div></div></div><table class="credential-table" ng-init="menuOpen = false;"><tr ng-repeat="revision in revisions | orderBy:\'-created\'" ng-click="selectRevision(revision)" ng-class="{\'selected\': selectedRevision.revision_id == revision.revision_id}"><td><span class="icon"><i class="fa fa-lock"></i></span> <span class="label">{{ \'revision.of\' | translate}} {{revision.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}} ({{revision.credential_data.label}}) <span ng-if="revision.edited_by">{{ \'revision.edited.by\' | translate}} {{revision.edited_by}}</span></span></td></tr><tr ng-show="revisions.length == 0"><td>{{ \'no.revisions\' | translate}}</td></tr></table></div><div id="app-sidebar" class="detailsView scroll-container app_sidebar" off-click="closeSelected()" ng-show="selectedRevision"><span class="close icon-close" ng-click="closeSelected()" alt="Close"></span> <b ng-show="selectedRevision">{{ \'revision.of\' | translate}} {{selectedRevision.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</b><div class="credential-data"><div class="row" ng-show="selectedRevision.credential_data.label"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'label\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.label"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.username"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'account\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.username"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.password"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'password\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.password" secret="\'true\'"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.otp.secret"><div class="col-xs-4 col-md-3 col-lg-3">{{\'otp\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span otp-generator secret="selectedRevision.credential_data.otp.secret"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.email"><div class="col-xs-4 col-md-3 col-lg-3">{{\'email\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.email"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.url"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'url\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.url"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.description"><div class="col-xs-4 col-md-3 col-lg-3">{{\'notes\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.description_html"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.files.length > 0"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'files\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><div ng-repeat="file in selectedRevision.credential_data.files" class="link" ng-click="downloadFile(selectedRevision.credential_data, file)">{{file.filename}} ({{file.size | bytes}})</div></div></div><div class="row" ng-repeat="field in selectedRevision.credential_data.custom_fields"><div class="col-xs-4 col-md-3 col-lg-3">{{field.label}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="field.value" secret="field.secret" ng-if="field.field_type !== \'file\' || !field.field_type"></span> <span ng-if="field.field_type === \'file\'" class="link" ng-click="downloadFile(selectedCredential, field.value)">{{field.value.filename}} ({{field.value.size | bytes}})</span></div></div><div class="row" ng-show="selectedRevision.credential_data.expire_time > 0"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'expire.time\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9">{{selectedRevision.credential_data.expire_time * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row" ng-show="selectedRevision.credential_data.changed"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'changed\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9">{{selectedRevision.credential_data.changed * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row" ng-show="selectedRevision.credential_data.created"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'created\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9">{{selectedRevision.credential_data.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row"><div class="col-xs-12"><div class="tags"><span class="tag" ng-repeat="tag in selectedRevision.credential_data.tags">{{tag.text}}</span></div></div></div></div><div ng-show="selectedRevision"><button class="button" ng-click="restoreRevision(selectedRevision)"><span class="fa fa-edit"></span> {{ \'restore.revision\' | translate}}</button> <button class="button" ng-click="deleteRevision(selectedRevision)"><span class="fa fa-trash"></span> {{ \'delete.revision\' | translate}}</button></div></div>')}]),angular.module("views/edit_credential.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/edit_credential.html",'<div id="passman-controls"><div class="breadcrumb"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg" data-dir="/Test"><a ng-click="cancel()">{{active_vault.name}}</a></div><div class="crumb svg last" data-dir="/Test"><a ng-if="storedCredential.credential_id">{{ \'edit.credential\' | translate}} "{{storedCredential.label}}"</a> <a ng-if="!storedCredential.credential_id">{{ \'create.credential\' | translate}}</a></div></div></div></div><div><ul class="tab_header"><li ng-repeat="tab in tabs track by $index" class="tab" ng-class="isActiveTab(tab)? \'active\' : \'inactive\'" ng-click="onClickTab(tab)" use-theme color="\'true\'">{{tab.title}}<div class="indicator" use-theme negative="\'true\'"></div></li></ul><div class="tab_container edit_credential" use-theme type="\'border-top-color\'"><div ng-include="currentTab.url"></div><button ng-click="saveCredential()" ng-disabled="saving"><i class="fa fa-spinner fa-spin" ng-show="saving"></i> {{ \'save\' | translate}}</button> <button ng-click="cancel()">{{ \'cancel\' | translate}}</button></div></div>')}]),angular.module("views/partials/credential_template.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/credential_template.html",'<div class="credential-data"><div class="row" ng-show="credential.label && showLabel"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'label\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.label"></span></div></div><div class="compromised-details" ng-show="credential.compromised"><div class="icon-error-color icon"></div><div class="text">{{ \'compromised.warning\' | translate }}</div></div><div class="row" ng-show="credential.username"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'account\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.username"></span></div></div><div class="row" ng-show="credential.password"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'password\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.password" secret="\'true\'"></span></div></div><div class="row" ng-show="credential.otp.secret"><div class="col-xs-4 col-md-3 col-lg-3">{{\'otp\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span otp-generator secret="credential.otp.secret"></span></div></div><div class="row" ng-show="credential.email"><div class="col-xs-4 col-md-3 col-lg-3">{{\'email\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.email"></span></div></div><div class="row" ng-show="credential.url"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'url\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.url" url="true"></span></div></div><div class="row" ng-show="credential.description"><div class="col-xs-4 col-md-3 col-lg-3">{{\'notes\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.description_html"></span></div></div><div class="row" ng-show="credential.files.length > 0"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'files\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><div ng-repeat="file in credential.files"><a class="link" ng-click="downloadFile(credential, file)">{{file.filename}} ({{file.size | bytes}})</a><br></div></div></div><div class="row" ng-repeat="field in credential.custom_fields"><div class="col-xs-4 col-md-3 col-lg-3">{{field.label}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="field.value" secret="field.secret" ng-if="field.field_type !== \'file\' || !field.field_type"></span> <span ng-if="field.field_type === \'file\'" class="link" ng-click="downloadFile(credential, field.value)">{{field.value.filename}} ({{field.value.size | bytes}})</span></div></div><div class="row" ng-show="credential.expire_time > 0"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'expire.time\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9">{{credential.expire_time * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row" ng-show="credential.changed"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'changed\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9">{{credential.changed * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row" ng-show="credential.created"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'created\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9">{{credential.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row"><div class="col-xs-12"><div class="tags"><span class="tag" ng-repeat="tag in credential.tags track by $index">{{tag.text}}</span></div></div></div></div>')}]),angular.module("views/partials/forms/edit_credential/basics.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/edit_credential/basics.html",'<div class="row"><div class="col-xs-12 col-md-6"><label>{{ \'label\' | translate}}</label><div class="icon-label"><div class="icon-picker" icon-picker="storedCredential"></div><input type="text" class="form-control" ng-model="storedCredential.label"></div><label>{{ \'username\' | translate}}</label><div><input type="text" ng-model="storedCredential.username"></div><label>{{ \'email\' | translate}}</label><div><input type="text" ng-model="storedCredential.email"></div><label>{{ \'password\' | translate}}</label><div><password-gen ng-model="storedCredential.password" settings="pwSettings" callback="pwGenerated"></password-gen><ng-password-meter password="storedCredential.password"></ng-password-meter></div><div><label>{{ \'password.r\' | translate}}</label><input type="password" ng-model="storedCredential.password_repeat"></div><label>{{ \'url\' | translate}}</label><div><input type="text" ng-model="storedCredential.url"></div></div><div class="col-xs-12 col-md-6"><label>{{ \'notes\' | translate}}</label><div><textarea class="credential_textarea" ng-model="storedCredential.description"></textarea></div><label>{{ \'add.tag\' | translate}}</label><div class="tags_input"><tags-input ng-model="storedCredential.tags" replace-spaces-with-dashes="false"><auto-complete source="getTags($query)" min-length="0"></auto-complete></tags-input></div></div><div class="col-xs-12 col-md-6"><button class="compromised-button" ng-click="compromise()">{{ \'compromised.label\' | translate}}</button><div class="compromised-details" ng-show="storedCredential.compromised"><div class="icon-error-color icon"></div><div class="text">{{ \'compromised.warning\' | translate }}</div></div></div></div>');
}]),angular.module("views/partials/forms/edit_credential/custom_fields.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/edit_credential/custom_fields.html",'<div class="row"><div class="col-xs-12 col-md-4"><label>{{ \'field.label\' | translate}}</label><input type="text" ng-model="new_custom_field.label"></div><div class="col-xs-10 col-md-6 field-value"><div class="row"><div class="col-xs-12"><label>{{ \'field.value\' | translate}}</label></div></div><div class="row"><div class="col-xs-8 valueInput"><input type="text" ng-model="new_custom_field.value" ng-show="new_custom_field.field_type === \'text\'"><password-gen ng-model="new_custom_field.value" ng-show="new_custom_field.field_type ===\'password\'" settings="{generateOnCreate: false }"></password-gen><span ng-show="new_custom_field.field_type ===\'file\'"><input id="custom_field_file" class="inputfile" type="file" file-select success="addFileToCustomField" error="fileLoadError" progress="fileSelectProgress"><label for="custom_field_file"><i class="fa fa-upload" aria-hidden="true"></i> {{ new_custom_field.value.filename || \'select.file\' | translate}}</label></span></div><div class="col-xs-4 selectType"><select class="form-control" ng-model="new_custom_field.field_type"><option value="text">{{ \'text\' | translate}}</option><option value="password">{{ \'password\' | translate}}</option><option value="file">{{ \'file\' | translate}}</option></select></div></div><div class="row"><div class="col-xs-12"><ng-password-meter ng-if="new_custom_field.field_type ===\'password\'" password="new_custom_field.value"></ng-password-meter></div></div></div><div class="col-xs-2 col-md-2"><label class="invisible">{{\'add\' | translate}}</label><button ng-click="addCustomField()">+</button></div></div><div class="row custom_fields" ng-if="storedCredential.custom_fields.length > 0"><div class="col-xs-12 table"><table><thead><tr use-theme><td class="dragger"></td><th class="field_label">{{ \'label\' | translate}}</th><th class="field_value">{{ \'value\' | translate}}</th><th class="field_secret">{{ \'type\' | translate}}</th><th class="field_actions">{{ \'actions\' | translate}}</th></tr></thead><tbody ui-sortable ng-model="storedCredential.custom_fields"><tr ng-repeat="field in storedCredential.custom_fields"><td class="dragger"><i class="fa fa-arrows-v"></i></td><td><a href="#" editable-text="field.label">{{ field.label || "empty" }}</a></td><td><span ng-if="field.field_type === \'text\'"><a href="#" editable-text="field.value">{{ field.value || \'empty\' | translate }}</a></span> <span ng-if="field.field_type === \'password\'"><a href="#" editable-password="field.value"><span ng-repeat="n in [] | range:field.value.length">*</span></a></span> <span ng-if="field.field_type === \'file\'">{{field.value.filename}} ({{field.value.size | bytes}})</span></td><td>{{ field.field_type }}</td><td class="field_actions"><i class="fa fa-trash" ng-click="deleteCustomField(field)"></i></td></tr></tbody></table></div></div>')}]),angular.module("views/partials/forms/edit_credential/files.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/edit_credential/files.html",'<div class="row file_tab"><div class="col-xs-12 col-md-6"><input class="inputfile" id="file" type="file" file-select success="fileLoaded" error="fileLoadError" progress="fileSelectProgress"><label for="file"><i class="fa fa-upload" aria-hidden="true"></i> {{\'select.file\' | translate}}</label><span ng-if="fileprogress.file_percent > 0"><div progress-bar="fileprogress.file_percent"></div></span></div></div><div class="row files" ng-if="storedCredential.files.length > 0"><div class="col-xs-12 table"><table><thead use-theme><tr><th class="field_label">{{ \'file.name\' | translate }}</th><th class="field_value">{{ \'upload.date\' | translate}}</th><th class="field_secret">{{ \'size\' | translate}}</th><th class="field_actions">{{ \'actions\' | translate}}</th></tr></thead><tr ng-repeat="file in storedCredential.files"><td><a href="#" editable-text="file.filename">{{ file.filename || "empty" }}</a></td><td>{{file.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</td><td>{{file.size | bytes}}</td><td class="field_actions"><i class="fa fa-trash" ng-click="deleteFile(file)"></i></td></tr></table></div></div>')}]),angular.module("views/partials/forms/edit_credential/otp.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/edit_credential/otp.html",'<div class="row"><div class="col-xs-12"><div class="col-xs-4 nopadding"><span class="otpText">{{ \'upload.qr\' | translate}}</span><select ng-model="otpType"><option value="qrcode">Upload QR code</option><option value="secret">Enter secret</option></select></div><div class="col-xs-6 nopadding"><input type="file" qrread on-read="parseQR(qrdata)" class="input_secret" on-read="parseQR(qrdata)" ng-show="otpType === \'qrcode\'"> <input type="text" ng-model="storedCredential.otp.secret" ng-show="otpType === \'secret\'"></div></div></div><div class="row"><div class="col-xs-12" ng-if="storedCredential.otp"><b>{{ \'current.qr\' | translate}}</b></div></div><div class="row"><div class="col-xs-5 col-sm-4 col-md-2" ng-if="storedCredential.otp.qr_uri"><img ng-src="{{storedCredential.otp.qr_uri.image}}"></div><div class="col-sm-4 col-sm-5 col-md-5"><table ng-show="storedCredential.otp"><tr ng-show="storedCredential.otp.type"><td>{{ \'type\' | translate}}:</td><td>{{storedCredential.otp.type}}</td></tr><tr ng-show="storedCredential.otp.label"><td>{{ \'label\' | translate}}:</td><td>{{storedCredential.otp.label}}</td></tr><tr ng-show="storedCredential.otp.issuer"><td>{{ \'issuer\' | translate}}:</td><td>{{storedCredential.otp.issuer}}</td></tr><tr ng-show="storedCredential.otp.secret"><td>{{ \'secret\' | translate}}:</td><td>{{storedCredential.otp.secret}}</td></tr><tr ng-show="storedCredential.otp.secret"><td>{{ \'otp\' | translate}}:</td><td><span otp-generator secret="storedCredential.otp.secret"></span></td></tr></table></div></div>')}]),angular.module("views/partials/forms/edit_credential/password.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/edit_credential/password.html",'<div class="row"><div class="col-xs-12 col-md-5 col-lg-5"><label>{{ \'password\' | translate}}</label><div><password-gen ng-model="storedCredential.password" settings="pwSettings" callback="pwGenerated"></password-gen><ng-password-meter password="storedCredential.password"></ng-password-meter></div><label>{{ \'password.r\' | translate}}</label><div><input type="password" ng-model="storedCredential.password_repeat"></div><label>{{ \'expire.date\' | translate}}</label><div><span datetime-picker ng-model="storedCredential.expire_time" class="link" future-only ng-show="storedCredential.expire_time == 0" close-on-select="false">{{\'no.expire.date\' | translate}}</span> <span datetime-picker ng-model="storedCredential.expire_time" class="link" future-only ng-show="storedCredential.expire_time != 0" close-on-select="false">{{ storedCredential.expire_time | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</span></div><label>{{ \'renew.interval\' | translate}}</label><div><input type="number" ng-model="renewIntervalValue" min="0" ng-change="updateInterval(renewIntervalValue, renewIntervalModifier)"><select ng-model="renewIntervalModifier" ng-change="updateInterval(renewIntervalValue, renewIntervalModifier)"><option value="0">{{ \'disabled\' | translate}}</option><option value="86400">{{ \'days\' | translate }}</option><option value="604800">{{ \'weeks\' | translate}}</option><option value="2592000">{{ \'months\' | translate}}</option><option value="31622400">{{ \'years\' | translate}}</option></select></div></div><div class="col-xs-12 col-md-7 col-lg-7"><b>{{ \'generation.settings\' | translate}}</b><div class="row"><div class="password_settings"><div class="col-xs-12 col-sm-5 col-lg-4"><label><span class="label">{{ \'password.generation.length\' | translate}}</span><br><input type="number" ng-model="pwSettings.length" min="1"></label><label><span class="label">{{\'password.generation.min_digits\' | translate}}</span><br><input type="number" ng-model="pwSettings.minimumDigitCount" min="0"></label></div><div class="col-xs-12 col-sm-6 col-lg-6"><label><input type="checkbox" ng-model="pwSettings.useUppercase"> <span class="label sm">{{ \'password.generation.uppercase\' | translate}}</span></label><label><input ng-model="pwSettings.useLowercase" type="checkbox" id="lower"> <span class="label sm">{{ \'password.generation.lowercase\' | translate}}</span></label><label><input ng-model="pwSettings.useDigits" type="checkbox" id="digits"> <span class="label sm">{{ \'password.generation.digits\' | translate}}</span></label><label><input type="checkbox" id="special" ng-model="pwSettings.useSpecialChars"> <span class="label sm">{{ \'password.generation.special\' | translate}}</span></label><label><input type="checkbox" id="ambig" ng-model="pwSettings.avoidAmbiguousCharacters"> <span class="label sm">{{ \'password.generation.ambiguous\' | translate}}</span></label><label><input type="checkbox" ng-model="pwSettings.requireEveryCharType" id="reqevery"> <span class="label sm">{{ \'password.generation.require_same\' | translate}}</span></label></div></div></div></div></div>')}]),angular.module("views/partials/forms/settings/export.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/export.html",'<div ng-controller="ExportCtrl"><div class="row"><div class="col-xs-6"><label>{{ \'export.type\' | translate}}<select ng-init="raw" ng-model="raw" ng-change="setExporter(raw)"><option ng-repeat="exporter in available_exporters" value="{{exporter}}">{{exporter.name}}</option></select></label><div><b>{{selectedExporter.description}}</b></div><div ng-show="selectedExporter" class="nopadding"><label>{{ \'export.confirm.text\' | translate }}</label><input type="password" ng-model="confirm_key"><br><div class="alert alert-warning" ng-show="error">{{error}}</div></div><div class="clearfix"><button class="button" ng-click="startExport()" ng-if="selectedExporter">{{ \'export\' | translate}}</button></div></div><div class="col-xs-6"><div ng-if="log" class="import_log"><textarea id="import_log" auto-scroll="log">{{log.join(\'\\n\')}}</textarea></div></div></div></div>')}]),angular.module("views/partials/forms/settings/general_settings.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/general_settings.html",'<div class="row"><div class="col-xs-12 col-md-6"><h3>{{ \'rename.vault\' | translate}}</h3><label>{{ \'rename.vault.name\' | translate}}</label><input type="text" ng-model="$parent.new_vault_name"> <button ng-click="saveVaultSettings()">{{ \'change\' | translate}}</button><h3>{{ \'change.vault.key\' | translate}}</h3><label>{{ \'old.vault.password\' | translate}}</label><input type="password" ng-model="oldVaultPass"><label>{{ \'new.vault.password\' | translate}}</label><input type="password" ng-model="newVaultPass"><ng-password-meter password="newVaultPass" score="vault_key_score"></ng-password-meter><label>{{ \'new.vault.pw.r\' | translate}}</label><input type="password" ng-model="newVaultPass2"><div ng-show="error || vault_key_score.score < minimal_value_key_strength" class="error"><ul><li>{{error}}</li><li ng-show="vault_key_score.score < minimal_value_key_strength">{{\'min.vault.key.strength\' | translate:required_score}}</li></ul></div><button ng-click="changeVaultPassword(oldVaultPass,newVaultPass,newVaultPass2)" ng-disabled="vault_key_score.score < minimal_value_key_strength">{{ \'change\' | translate}}</button><div ng-show="change_pw.total > 0">{{\'warning.leave\' | translate}}<br>{{ \'processing\' | translate}} {{cur_state.process}}<div progress-bar="cur_state.calculated" index="cur_state.current" total="cur_state.total"></div>{{ \'total.progress\' | translate}}<div progress-bar="change_pw.percent" index="change_pw.done" total="change_pw.total"></div></div><h3>{{\'delete.vault\' | translate}}</h3><b>{{ \'vault.remove.notice\' | translate }}</b><label>{{\'vault.password\' | translate}}</label><input type="password" ng-model="$parent.delete_vault_password"> <input type="checkbox" ng-model="$parent.confirm_vault_delete"> {{\'delete.vault.checkbox\' | translate}}<br><button class="btn btn-danger" ng-click="delete_vault()">{{\'delete.vault.confirm\' | translate}}</button><div ng-show="remove_pw">{{\'deleting.pw\' | translate:translationData}}<div progress-bar="remove_pw.percent" index="remove_pw.done" total="remove_pw.total"></div></div></div><div class="col-xs-12 col-md-6"><h3>{{ \'about.passman\' | translate}}</h3><p>{{ \'version\' | translate}}: <b>{{passman_version}}</b><br><br><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=6YS8F97PETVU2" target="_blank" class="link">{{ \'donate.support\' | translate}}</a><br></p><h3>{{ \'bookmarklet\' | translate}}</h3><div><p>{{ \'bookmarklet.info1\' | translate}}<br>{{ \'bookmarklet.info2\' | translate}}<br></p></div><div><p ng-bind-html="bookmarklet" style="margin-top: 5px"></p></div></div></div>')}]),angular.module("views/partials/forms/settings/generic_csv_import.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/generic_csv_import.html",'<div ng-controller="GenericCsvImportCtrl"><div class="row"><div class="col-xs-12 col-md-3"><div>{{ \'select.csv\' | translate}} <input type="file" file-select accept=".csv" success="csvLoaded"></div><div ng-show="parsed_csv"><span translate="parsed.csv.rows" translate-value-rows="{{ parsed_csv.length }}"></span></div><div ng-show="parsed_csv"><input type="checkbox" ng-model="skipFirstRow" ng-checked="matched"> {{ \'skip.first.row\' | translate}}</div><div ng-show="import_fields.indexOf(\'label\') === -1 && parsed_csv"><b>{{ \'import.csv.label.req\' | translate}}</b></div><div ng-show="import_fields.indexOf(\'label\') !== -1 && parsed_csv"><button class="btn btn-success" ng-disabled="importing" ng-click="startCSVImport()"><i class="fa fa-spinner fa-spin" ng-show="importing"></i> {{ (importing) ? (\'import.importing\' | translate) : (\'import.start\' | translate) }}</button></div><div><div ng-if="import_progress.progress > 0">{{ \'upload.progress\' | translate}}<div progress-bar="import_progress.progress" index="import_progress.loaded" total="import_progress.total"></div></div></div><div><div ng-if="log" class="import_log"><textarea id="import_log" auto-scroll="log">{{log.join(\'\\n\')}}</textarea></div></div></div><div class="col-xs-12 col-md-9" ng-show="parsed_csv"><b>{{ \'first.five.lines\' | translate }}</b><br>{{ \'assign.column\' | translate }}<div class="import-table-outter"><table class="import-table"><tr ng-repeat="line in parsed_csv | limitTo:5"><td class="inspect"><i class="fa fa-search" ng-click="inspectCredential(line)" ng-if="($index > 0 && matched && import_fields.length > 0) || ($index >= 0 && !matched && import_fields.length > 0)"></i></td><td ng-repeat="prop in line track by $index">{{line[$index]}}</td></tr><tr ng-repeat="line in parsed_csv | limitTo:1"><td></td><td ng-repeat="prop in line track by $index"><select ng-model="import_fields[$index]" ng-change="updateExample()" ng-options="property.prop as property.label for property in credentialProperties"></select></td></tr></table></div><div ng-show="inspected_credential && import_fields.length > 0"><b>{{ \'example.credential\' | translate}}</b><div credential-template="inspected_credential" show-label></div></div></div></div></div>')}]),angular.module("views/partials/forms/settings/import.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/import.html",'<div><div ng-click="showGenericImport = !showGenericImport;" class="link"><span ng-show="!showGenericImport">{{\'missing.importer\' | translate}}</span> <span ng-show="showGenericImport">{{\'missing.importer.back\' | translate}}</span></div></div><div ng-controller="ImportCtrl" ng-show="!showGenericImport"><div class="row"><div class="col-xs-6"><div class="import-selection"><label>{{ \'import.type\' | translate}}<select ng-init="importerType" ng-model="importerType" ng-change="setImporter(importerType)"><option ng-repeat="importer in available_importers" value="{{importer}}">{{importer.name}}</option></select></label></div><div ng-show="selectedImporter"><b>{{ \'import.steps\' | translate }}</b><ul class="import-steps"><li ng-repeat="step in selectedImporter.exportSteps">{{step}}</li></ul></div><input ng-if="selectedImporter" type="file" file-select success="fileLoaded" error="fileLoadError" progress="fileSelectProgress"><br><button class="button" ng-click="startImport()" ng-if="selectedImporter">{{ \'import\' | translate}}</button><div ng-if="file_read_progress.percent > 0">{{ \'read.progress\' | translate}}<div progress-bar="file_read_progress.percent" index="file_read_progress.loaded" total="file_read_progress.total"></div></div><div ng-if="import_progress.progress > 0">{{ \'upload.progress\' | translate}}<div progress-bar="import_progress.progress" index="import_progress.loaded" total="import_progress.total"></div></div></div><div class="col-xs-6"><div ng-if="log" class="import_log"><textarea id="import_log" auto-scroll="log">{{log.join(\'\\n\')}}</textarea></div></div></div></div><div ng-include="\'views/partials/forms/settings/generic_csv_import.html\'" ng-show="showGenericImport"></div>')}]),angular.module("views/partials/forms/settings/password_settings.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/password_settings.html",'<div class="password_settings"><div class="col-xs-12 col-sm-5 col-lg-4 password-settings-padding-left-fix"><label><span class="label">{{ \'password.generation.length\' | translate}}</span><br><input type="number" ng-model="vault_settings.pwSettings.length" min="1"></label><label><span class="label">{{ \'password.generation.min_digits\' | translate}}</span><br><input type="number" ng-model="vault_settings.pwSettings.minimumDigitCount" min="0"></label><label><span class="label">Generate password on creation</span><br><input type="checkbox" ng-model="vault_settings.pwSettings.generateOnCreate" min="0"></label></div><div class="col-xs-12 col-sm-6 col-lg-6"><label><input type="checkbox" ng-model="vault_settings.pwSettings.useUppercase"> <span class="label sm">{{ \'password.generation.uppercase\' | translate}}</span></label><label><input ng-model="vault_settings.pwSettings.useLowercase" type="checkbox" id="lower"> <span class="label sm">{{ \'password.generation.lowercase\' | translate}}</span></label><label><input ng-model="vault_settings.pwSettings.useDigits" type="checkbox" id="digits"> <span class="label sm">{{ \'password.generation.digits\' | translate}}</span></label><label><input type="checkbox" id="special" ng-model="vault_settings.pwSettings.useSpecialChars"> <span class="label sm">{{ \'password.generation.special\' | translate}}</span></label><label><input type="checkbox" id="ambig" ng-model="vault_settings.pwSettings.avoidAmbiguousCharacters"> <span class="label sm">{{ \'password.generation.ambiguous\' | translate}}</span></label><label><input type="checkbox" ng-model="vault_settings.pwSettings.requireEveryCharType" id="reqevery"> <span class="label sm">{{ \'password.generation.require_same\' | translate}}</span></label></div></div><div class="row"><div class="col-xs-12"><button class="button" ng-click="saveVaultSettings()">{{ \'save\' | translate}}</button></div></div>')}]),angular.module("views/partials/forms/settings/sharing.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/sharing.html",'<div ng-controller="SharingSettingsCtrl"><div class="row"><div class="col-md-6"><label>{{ \'priv.key\' | translate}}</label><textarea class="col-md-12">{{sharing_keys.private_sharing_key}}</textarea></div><div class="col-md-6"><label>{{ \'pub.key\' | translate}}</label><textarea class="col-md-12">{{sharing_keys.public_sharing_key}}</textarea></div></div><div class="row"><div class="col-md-12"><label>{{ \'key.size\' | translate}}<select ng-model="key_size" ng-options="size.name for size in available_sizes"></select><button ng-click="updateSharingKeys()"><i class="fa fa-fa-floppy-o"></i> {{ \'save.keys\' | translate}}</button> <button ng-if="!generating" ng-click="generateKeys(key_size.size)">{{ \'gen.keys\' | translate}}</button> <button ng-if="generating"><i class="fa fa-spinner fa-spin"></i> {{ \'generating.keys\' | translate}} ({{progress}}/2)</button></label></div></div></div>')}]),angular.module("views/partials/forms/settings/tool.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/tool.html",'<div class="row"><div class="col-xs-12"><p>{{ \'tool.intro\' | translate}}</p></div><div class="col-xs-12" ng-init="minStrength = 3;">{{ \'min.strength\' | translate}} <input type="number" min="1" max="4" value="3" ng-model="minStrength"> <button ng-click="startScan(minStrength)">{{ \'scan.start\' | translate}}</button></div></div><div class="row" ng-show="scan_result"><div class="col-xs-12"><p class="spacer-top-30"><b>{{ \'scan.result.msg\' | translate}}</b><br><span translate="scan.result" translate-values="{ scan_result: scan_result.length}"></span><br></p><table class="table scan-result-table spacer-top-30"><thead><tr><td><b>{{ \'label\' | translate}}</b></td><td><b>{{ \'score\' | translate}}</b></td><td><b>{{ \'password\' | translate}}</b></td><td><b>{{ \'action\' | translate}}</b></td></tr></thead><tbody><tr ng-repeat="result in scan_result | orderBy:\'password_zxcvbn_result.score\'"><td class="label-audit">{{result.label}}</td><td class="score"><ng-password-meter password="result.password"></ng-password-meter></td><td><span credential-field value="result.password" secret="\'true\'"></span></td><td><div><a href="#/vault/{{ active_vault.guid }}/edit/{{result.guid}}" class="link"><i class="fa fa-edit"></i></a></div></td></tr></tbody></table></div></div>')}]),angular.module("views/partials/forms/share_credential/basics.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/share_credential/basics.html",'<div class="row"><div class="col-xs-12 col-md-6"><div><table class="table sharing_table"><thead><tr><td><tags-input ng-model="inputSharedWith" replace-spaces-with-dashes="false" add-from-autocomplete-only="true" placeholder="{{ \'search.u.g\' | translate}}"><auto-complete source="searchUsers($query)" min-length="0" template="autocomplete-template"></auto-complete></tags-input></td><td><button class="button" ng-click="shareWith(inputSharedWith)">+</button></td></tr><tr><td colspan="2"><small>{{ \'search.result.missing\' | translate}}</small></td></tr></thead></table><div ng-if="share_settings.cypher_progress.done > 0">{{\'cyphering\' | translate}}...<div progress-bar="share_settings.cypher_progress.percent" index="share_settings.cypher_progress.done" total="share_settings.cypher_progress.total"></div></div><div ng-if="share_settings.upload_progress.done > 0">{{ \'uploading\' | translate}}...<div progress-bar="share_settings.upload_progress.percent" index="share_settings.upload_progress.done" total="share_settings.upload_progress.total"></div></div></div></div><div class="col-xs-12 col-md-6" ng-show="share_settings.cypher_progress.times.length > 0"><table class="table"><thead><tr><td>{{ \'user\' | translate}}</td><td>{{ \'crypto.time\' | translate}}</td></tr></thead><tr ng-repeat="user in share_settings.cypher_progress.times"><td><i class="fa fa-cogs"></i> {{user.user}}</td><td>{{user.time}} s</td></tr></table>{{ \'crypto.total.time\' | translate}}: {{ calculate_total_time() }}</div></div><div class="row"><div class="col-xs-12 col-md-6"><table class="table shared_table" ng-show="share_settings.credentialSharedWithUserAndGroup.length > 0"><thead><tr><td>{{\'user\' | translate}}</td><td>{{ \'perm.read\' | translate}}</td><td>{{ \'perm.write\' | translate}}</td><td>{{ \'perm.files\' | translate}}</td><td>{{ \'perm.revisions\' | translate}}</td><td></td></tr></thead><tr ng-repeat="user in share_settings.credentialSharedWithUserAndGroup"><td><i class="fa fa-user" ng-if="user.pending === false"></i> <i class="fa fa-user-times" ng-if="user.pending === true"></i> {{user.userId}} <small ng-if="user.pending === true" class="pull-right pending">{{ \'pending\' | translate}}</small></td><td><input type="checkbox" ng-click="setPermission(user.acl, default_permissions.permissions.READ)" ng-checked="hasPermission(user.acl, default_permissions.permissions.READ)"></td><td><input type="checkbox" ng-click="setPermission(user.acl, default_permissions.permissions.WRITE)" ng-checked="hasPermission(user.acl, default_permissions.permissions.WRITE)"></td><td><input type="checkbox" ng-click="setPermission(user.acl, default_permissions.permissions.FILES)" ng-checked="hasPermission(user.acl, default_permissions.permissions.FILES)"></td><td><input type="checkbox" ng-click="setPermission(user.acl, default_permissions.permissions.HISTORY)" ng-checked="hasPermission(user.acl, default_permissions.permissions.HISTORY)"></td><td><i class="fa fa-trash" ng-click="unshareUser(user)"></i></td></tr></table></div></div><script type="text/ng-template" id="autocomplete-template"><i class="fa fa-user" ng-if="data.type === \'user\'"></i>\n\t<i class="fa fa-group" ng-if="data.type === \'group\'"></i>\n\t{{data.text}}</script>')}]),angular.module("views/partials/forms/share_credential/link_sharing.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/share_credential/link_sharing.html",'<div class="row"><div class="col-xs-12 col-md-6"><label><input type="checkbox" ng-model="share_settings.linkSharing.enabled"> {{ \'enable.link.sharing\' | translate}}.</label><br><div class="pull-left col-xs-6 nopadding"><span credential-field value="share_link" secret="false" use-input="true" input-placeholder="\'click.share\' | translate"></span></div><div ng-show="share_settings.linkSharing.enabled" class="clearfix">{{ \'share.until.date\' | translate}} <span datetime-picker ng-model="share_settings.linkSharing.settings.expire_time" class="link" future-only close-on-select="false" timestamp="true">{{ share_settings.linkSharing.settings.expire_time | date:\'dd-MM-yyyy @ HH:mm:ss\' }}</span></div><div ng-show="share_settings.linkSharing.enabled">{{ \'expire.views\' | translate}}<br><input type="number" ng-model="share_settings.linkSharing.settings.expire_views"></div><div ng-if="share_settings.linkSharing.enabled"><table><tr><td><input type="checkbox" ng-click="setPermission(share_settings.linkSharing.settings.acl, default_permissions.permissions.FILES)" ng-checked="hasPermission(share_settings.linkSharing.settings.acl, default_permissions.permissions.FILES)"></td><td>{{ \'show.files\' | translate}}</td></tr></table></div></div></div>')}]),angular.module("views/partials/icon-picker.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/icon-picker.html",'<div class="cell icon-category-auth" ng-if="!credential.url && !credential.icon"></div><div class="cell" ng-if="credential.url || credential.icon"><span class="icon"><credential-icon credential="credential"></credential-icon></span></div><div style="display: none" id="iconPicker" title="{{ \'pick.icon\' | translate }}"><div class="iconList"><div ng-repeat="(groupName, icons) in iconGroups"><div ng-click="expanded = !expanded" ng-init="expanded=true"><div class="icon-triangle-s arrow" ng-class="{ \'icon-triangle-e\': !expanded , \'icon-triangle-s\': expanded }"></div><div class="collapsible" id="{{groupName}}">{{groupName}}</div></div><div ng-class="{ \'content_show\': expanded , \'content\': !expanded }"><div class="icon" ng-repeat="icon in icons" ng-click="selectIcon(icon)"><img ng-src="{{icon.url}}" height="32"></div></div></div></div><div class="iconModifier"><input id="iconPicker-Search" class="iconSearch" type="text" placeholder="{{ \'pick.icon.search\' | translate }}"><label for="iconPicker-CustomIcon">{{ \'pick.icon.custom.label\' | translate }}</label><input id="iconPicker-CustomIcon" class="iconSearch" type="file"><div ng-if="selectedIcon || customIcon">{{ \'selected.icon\' | translate}}:<br><img ng-src="{{selectedIcon.url}}" height="32" ng-if="!customIcon"> <img src="{{customIcon.data}}" height="32" ng-if="customIcon"><br><button ng-click="useIcon()">{{ \'use.icon\' | translate}}</button></div><div><button ng-click="deleteIcon()" ng-if="credential.icon">{{ \'use.icon.delete\' | translate}}</button> <button ng-click="refreshUrlIcon()">{{ \'use.icon.refresh\' | translate}}</button></div></div></div>')}]),angular.module("views/partials/password-meter.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/password-meter.html",'<div class="pass-meter {{masterClass}}" off-click="matchBreakdown = false;"><div class="{{colClass}} pass-meter-col {{first}}"><div class="indicator"></div></div><div class="{{colClass}} pass-meter-col {{second}}"><div class="indicator"></div></div><div class="{{colClass}} pass-meter-col {{third}}"><div class="indicator"></div></div><div class="{{colClass}} pass-meter-col {{fourth}}"><div class="indicator"></div></div><div class="details" ng-click="toggleScore()"><span ng-show="!scoreShown">{{ \'details\' | translate }}</span> <span ng-show="scoreShown">{{ \'hide.details\' | translate}}</span></div><div class="pass-meter-message">{{message}}</div><div class="detail_box" ng-show="scoreShown"><div class="row"><div class="col-xs-6">{{ \'password.score\' | translate}}:</div><div class="col-xs-6">{{score.score}}</div></div><div><b>{{ \'cracking.times\' | translate}}</b></div><div class="row"><div class="col-xs-6">{{ \'cracking.time.100h\' | translate}}<br><small>{{ \'cracking.time.100h.desc\' | translate}}</small></div><div class="col-xs-6">{{score.crack_times_display.online_throttling_100_per_hour}}</div></div><div class="row"><div class="col-xs-6">{{ \'cracking.time.10s\' | translate}}<br><small>{{ \'cracking.time.10s.desc\' | translate}}</small></div><div class="col-xs-6">{{score.crack_times_display.online_no_throttling_10_per_second}}</div></div><div class="row"><div class="col-xs-6">{{ \'cracking.time.10ks\' | translate}}<br><small>{{ \'cracking.time.10ks.desc\' | translate}}</small></div><div class="col-xs-6">{{score.crack_times_display.offline_slow_hashing_1e4_per_second}}</div></div><div class="row"><div class="col-xs-6">{{ \'cracking.time.10Bs\' | translate}}<br><small>{{ \'cracking.time.10Bs.desc\' | translate}}</small></div><div class="col-xs-6">{{score.crack_times_display.offline_fast_hashing_1e10_per_second}}</div></div><div class="row"><div class="col-xs-6">{{ \'match.sequence\' | translate}}:</div><div class="col-xs-6"><span class="link" ng-click="toggleMatchBreakdown()">{{ \'match.sequence.link\' | translate}}</span></div></div></div></div><div class="match-sequence"><div class="sequence_container" ng-style="{\'width\': score.sequence.length * 210 }"><div class="sequence" ng-repeat="sequence in score.sequence"><table><tr><td colspan="2" class="token"><code>{{sequence.token}}</code></td></tr><tr ng-if="sequence.pattern"><td>{{ \'pattern\' | translate}}</td><td>{{sequence.pattern}}</td></tr><tr ng-if="sequence.matched_word"><td>{{ \'matched.word\' | translate}}</td><td>{{sequence.matched_word}}</td></tr><tr ng-if="sequence.dictionary_name"><td>{{ \'dictionary.name\' | translate}}</td><td>{{sequence.dictionary_name}}</td></tr><tr ng-if="sequence.rank"><td>{{ \'rank\' | translate}}</td><td>{{sequence.rank}}</td></tr><tr ng-if="sequence.reversed"><td>{{ \'reversed\' | translate}}</td><td>{{sequence.reversed}}</td></tr><tr ng-if="sequence.guesses"><td>{{ \'guesses\' | translate}}</td><td>{{sequence.guesses}}</td></tr><tr ng-if="sequence.base_guesses"><td>{{ \'base.guesses\' | translate}}</td><td>{{sequence.base_guesses}}</td></tr><tr ng-if="sequence.uppercase_variations"><td>{{ \'uppercase.variations\' | translate}}</td><td>{{sequence.uppercase_variations}}</td></tr><tr ng-if="sequence.l33t_variations"><td>{{ \'leet.variations\' | translate}}</td><td>{{sequence.l33t_variations}}</td></tr></table></div></div></div>');
-}]),angular.module("views/settings.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/settings.html",'<div id="passman-controls"><div class="breadcrumb"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg"><a ng-click="cancel()">{{active_vault.name}}</a></div><div class="crumb svg last"><a>{{ \'settings\' | translate}}</a></div></div></div></div><div><ul class="tab_header"><li ng-repeat="tab in tabs track by $index" class="tab" ng-class="isActiveTab(tab)? \'active\' : \'inactive\'" ng-click="onClickTab(tab)" use-theme color="\'true\'">{{tab.title | translate}}<div class="indicator" use-theme negative="\'true\'"></div></li></ul><div class="tab_container settings edit_credential" use-theme type="\'border-top-color\'"><div ng-include="currentTab.url"></div></div></div>')}]),angular.module("views/share_credential.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/share_credential.html",'<div class="main_list.share"><div id="passman-controls"><div class="actions creatable"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg" data-dir="/Test"><a ng-click="cancel()">{{active_vault.name}}</a></div><div class="crumb svg last" data-dir="/Test"><a ng-if="storedCredential.credential_id">{{ \'share.credential\' | translate}} {{storedCredential.label}}</a></div></div></div></div><ul class="tab_header"><li ng-repeat="tab in tabs track by $index" class="tab" ng-class="{active:isActiveTab(tab)}" ng-click="onClickTab(tab)" use-theme color="\'true\'">{{tab.title | translate}}<div class="indicator" use-theme negative="\'true\'"></div></li></ul><div class="tab_container share_credential" ng-show="currentTab"><div ng-include="currentTab.url"></div><button ng-click="applyShare()" ng-disabled="share_settings.linkSharing.enabled === false && share_settings.credentialSharedWithUserAndGroup.length === 0">{{ \'share\' | translate}}</button> <button ng-click="cancel()">{{ \'cancel\' | translate}}</button> <button class="btn btn-danger" ng-disabled="!storedCredential.shared_key" ng-click="unshareCredential(storedCredential)">{{ \'unshare\' | translate}}</button></div></div>')}]),angular.module("views/show_vault.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/show_vault.html",'<div class="main_list" off-click-filter="\'.download-js-link, .sidebar-shown, #app-sidebar\'"><div id="passman-controls" ng-class="{ \'sidebar-shown\': selectedCredential }"><div class="breadcrumb"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg" ng-click="clearState()"><a>{{active_vault.name}}</a></div></div><div class="addCredential" ng-hide="delete_time>0"><button ng-click="addCredential()">+</button></div></div><div class="title" credential-counter="filtered_credentials" vault="active_vault" delete-time="delete_time" filters="filterOptions"></div><div class="searchboxContainer" ng-init="filterOptionShown = false;" off-click="filterOptionShown = false;"><input type="text" ng-model="filterOptions.filterText" class="searchbox" id="searchBox" placeholder="{{\'search.credential\' | translate}}" select-on-click clear-btn ng-click="filterOptionShown = true;"><div class="searchOptions" ng-show="filterOptionShown"><input type="checkbox" ng-model="filterOptions.useRegex"> {{ \'use.regex\' | translate }}</div></div><div class="viewModes"><div class="view-mode" ng-class="{\'active\': view_mode === \'list\' }" ng-click="switchViewMode(\'list\')"><i class="fa fa-list"></i></div><div class="view-mode" ng-class="{\'active\': view_mode === \'grid\' }" ng-click="switchViewMode(\'grid\')"><i class="fa fa-th-large"></i></div></div></div><div class="loaderContainer" ng-if="show_spinner"><div class="loader" use-theme type="\'border-bottom-color\'"></div></div><div ng-init="menuOpen = false;"><table class="credential-table" ng-if="view_mode === \'list\'"><tr ng-repeat="credential in filtered_credentials | orderBy:\'label\'" ng-if="showCredentialRow(credential)" ng-click="selectCredential(credential)" ng-dblclick="editCredential(credential)" ng-class="{\'selected\': selectedCredential.credential_id == credential.credential_id}"><td ng-class="{\'compromised\': credential.compromised }"><span class="tags"><span class="tag" ng-repeat="tag in credential.tags_raw">{{ ::tag.text}}</span></span> <span class="icon" ng-if="credential.url || credential.icon"><credential-icon credential="credential"></credential-icon></span> <span class="icon" ng-if="!credential.url && !credential.icon"><i class="fa fa-lock" ng-if="!credential.acl && !credential.shared_key"></i> <i class="fa fa-share-alt" ng-if="credential.acl"></i> <i class="fa fa-share-alt-square" ng-if="credential.shared_key"></i></span> <a class="label">{{ ::credential.label}}</a> <span ng-if="credential.compromised" class="compromised-list"><i class="icon-error icon"></i> <span class="text">{{ \'compromised.warning.list\' | translate}}</span></span></td></tr></table><ul class="grid-view" ng-if="view_mode === \'grid\'"><li class="credential" ng-repeat="credential in filtered_credentials | orderBy:\'label\'" ng-if="credential.hidden == 0 && showCredentialRow(credential)" ng-click="selectCredential(credential)" use-theme type="\'border-color\'"><div class="credential_content"><div><span class="icon" ng-if="credential.url"><credential-icon credential="credential"></credential-icon></span> <span class="icon" ng-if="!credential.url"><i class="fa fa-lock" ng-if="!credential.acl && !credential.shared_key"></i> <i class="fa fa-share-alt" ng-if="credential.acl"></i> <i class="fa fa-share-alt-square" ng-if="credential.shared_key"></i></span><div class="label">{{ ::credential.label}}</div></div><div class="tags"><div class="tag" ng-repeat="tag in credential.tags_raw">{{ ::tag.text}}</div></div></div></li></ul><div ng-if="getListSizes().listsize_wout_deleted==0 && no_credentials_label.all && !show_spinner && selectedtags.length==0 && filterOptions.filterText==\'\'" class="nopasswords" ng-hide="delete_time>0"><b>{{\'vault.hint.hello\' | translate}}</b><br><div>{{\'vault.hint.hello.add\' | translate}}</div><div class=""><button ng-click="addCredential()">+</button></div></div><div ng-if="getListSizes().listsize_wout_deleted==0 && no_credentials_label.all && !show_spinner && selectedtags.length>0" class="nopasswords" ng-hide="delete_time>0"><div>{{ \'vault.hint.list.notags\' | translate}}</div></div><div ng-if="getListSizes().listsize_wout_deleted==0 && no_credentials_label.all && !show_spinner && selectedtags.length==0 && filterOptions.filterText!=\'\'" class="nopasswords" ng-hide="delete_time>0"><div>{{ \'vault.hint.list.nosearch\' | translate}} <b>\'{{filterOptions.filterText}}\'</b></div></div><div class="nopasswords" ng-if="no_credentials_label.s_good" ng-hide="getListSizes().listsize_wout_deleted>0"><div>{{ \'vault.hint.list.nogood\' | translate}}</div></div><div class="nopasswords" ng-if="no_credentials_label.s_medium" ng-hide="getListSizes().listsize_wout_deleted>0"><div>{{ \'vault.hint.list.nomedium\' | translate}}</div></div><div class="nopasswords" ng-if="no_credentials_label.s_low" ng-hide="getListSizes().listsize_wout_deleted>0"><div>{{ \'vault.hint.list.nobad\' | translate}}</div></div><div class="nopasswords" ng-if="no_credentials_label.expired" ng-hide="getListSizes().listsize_wout_deleted>0"><div>{{ \'vault.hint.list.noexpired\' | translate}}</div></div><div class="nopasswords" ng-if="getListSizes().listsize_deleted==0" ng-hide="delete_time==0"><div>{{ \'vault.hint.list.nodeleted\' | translate}}</div></div></div></div><div id="app-sidebar" class="app_sidebar" ng-show="selectedCredential" off-click="closeSelected()"><span class="close icon-close" ng-click="closeSelected()" alt="Close"></span><div class="sidebar"><span class="icon sidebar-icon" ng-if="selectedCredential.url || credential.icon"><credential-icon credential="selectedCredential"></credential-icon></span> <span class="icon sidebar-icon" ng-if="!selectedCredential.url && !credential.icon"><credential-icon credential="selectedCredential"></credential-icon></span><h2 class="sidebar-label">{{selectedCredential.label}}</h2></div><div credential-template="selectedCredential"></div><div ng-show="selectedCredential"><div><button class="button" ng-click="editCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-edit"></span> {{ \'edit\' | translate}}</button> <button class="button" ng-click="deleteCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-trash"></span> {{ \'delete\' | translate}}</button> <button class="button" ng-click="shareCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && selectedCredential.acl === undefined &&\n\t\t\t\t\t\t(settings.user_sharing_enabled === 1 || settings.user_sharing_enabled === \'1\' || settings.link_sharing_enabled === 1 || settings.link_sharing_enabled === \'1\')"><span class="fa fa-share"></span> {{ \'share\' | translate}}</button> <button class="button" ng-click="getRevisions(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.HISTORY)"><span class="fa fa-undo"></span> {{ \'revisions\' | translate}}</button> <button class="button" ng-if="selectedCredential.delete_time > 0" ng-click="recoverCredential(selectedCredential) && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-recycle"></span> {{\'recover\' | translate}}</button> <button class="button" ng-if="selectedCredential.delete_time > 0" ng-click="destroyCredential(selectedCredential)"><span class="fa fa-bomb"></span> {{\'destroy\' | translate}}</button></div></div></div><div class="share_popup" style="display: none" title="{{ \'sharereq.title\' | translate }}"><p>{{ \'sharereq.line1\' | translate}} {{ \'sharereq.line2\' | translate}}</p><br><table class="table"><thead><tr><td><b>{{ \'label\' | translate}}</b></td><td><b>{{ \'permissions\' | translate}}</b></td><td><b>{{ \'received.from\' | translate}}</b></td><td><b>{{ \'date\' | translate}}</b></td></tr></thead><tr ng-repeat="share_request in incoming_share_requests" ng-if="share_request.target_vault_id == active_vault.vault_id"><td>{{share_request.credential_label}}</td><td>{{share_request.permissions}}</td><td>{{share_request.from_user_id}}</td><td>{{share_request.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</td><td><span class="link" ng-click="acceptShareRequest(share_request)"><b>{{ \'accept\' | translate}}</b></span> | <span class="link" ng-click="declineShareRequest(share_request)">{{ \'decline\' | translate}}</span></td></tr></table></div>')}]),angular.module("views/vault_req_deletion.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/vault_req_deletion.html",'<div class="vault_wrapper"><div class="reset_form" ng-show="!pending_deletion">{{ \'req.intro1\' | translate }}<br>{{ \'req.intro2\' | translate }}<br>{{ \'req.intro3\' | translate }}<br><br><b>{{ \'request.deletion.warning\' | translate}}</b><label>{{ \'request.deletion.reason\' | translate }}</label><input type="text" ng-model="reason" class="form-control"> <button class="button button-red" ng-click="requestDeletion()">{{ \'request.deletion.accept\' | translate }}</button> <a class="pull-right button button-geen" ng-href="#/">{{ \'cancel\' | translate}}</a></div><div class="reset_form" ng-show="pending_deletion"><button class="button button-red" ng-click="removeRequestDeletion()">Cancel destruction request</button> <a class="pull-right button button-geen" ng-href="#/">Cancel</a></div></div>')}]),angular.module("views/vaults.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/vaults.html",'<div class="vault_wrapper"><div class="vaults" ng-if="!list_selected_vault && !creating_vault"><div class="ui-select-container ui-select-bootstrap vaultlist"><ul><li ng-click="newVault()">+ Create a new vault</li><li ng-repeat="vault in vaults" ng-class="{\'selected\': vault == list_selected_vault }" ng-click="selectVault(vault)"><div><span class="ui-select-choices-row-inner"><div class="ng-binding ng-scope">{{vault.name}} <span class="pull-right" style="color: #ce3702" ng-show="vault.delete_request_pending">{{ \'delete.request.pending\' | translate}}</span></div><small class="ng-binding ng-scope">{{ \'created\' | translate}}: {{vault.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}} | {{ \'last.access\' | translate}}: <span ng-if="vault.last_access > 0">{{vault.last_access * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</span> <span ng-if="vault.last_access === 0">{{\'never\' | translate}}</span></small></span></div></li><li ng-if="vaults.length === 0">{{ \'no.vaults\' | translate}}</li></ul></div></div><div ng-if="creating_vault"><div class="login_form" ng-init="vault_name = \'\'; vault_key=\'\'; ">{{\'new.vault.name\' | translate}}<div><input type="text" ng-model="vault_name" required></div><div>{{ \'new.vault.pass\' | translate}} <input type="password" ng-model="vault_key" required><ng-password-meter password="vault_key" score="vault_key_score"></ng-password-meter></div><div>{{ \'new.vault.passr\' | translate}} <input type="password" ng-model="vault_key2" required></div><div ng-show="error || vault_key_score.score < minimal_value_key_strength" class="error"><ul><li ng-show="error">{{error}}</li><li ng-show="vault_key_score.score < minimal_value_key_strength">{{\'min.vault.key.strength\' | translate:required_score}}</li></ul></div><div><small>{{\'new.vault.sharing_key_notice\' | translate}}</small></div><div class="button_wrapper"><button class="button button-geen" ng-if="!creating_keys" click-disable ng-click="createVault(vault_name, vault_key, vault_key2)" ng-disabled="vault_key_score.score < minimal_value_key_strength || vault_key !== vault_key2 || vault_key === \'\'">{{ \'new.vault.create\' | translate }}</button><div class="button" ng-if="creating_keys"><span><i class="fa fa-spinner fa-spin"></i> {{creating_keys}}</span></div><div class="button button-red" ng-click="clearState()">{{ \'cancel\' | translate}}</div><div class="template-hidden">{{sharing_keys}}</div></div></div></div><div ng-if="list_selected_vault != false"><div class="vaultlist"><ul><li ng-click="clearState()">{{ \'go.back.vaults\' | translate }}</li></ul></div><div class="login_form"><div ng-show="error" class="error"><ul><li>{{error}}</li></ul></div>{{ \'input.vault.password\' | translate}} {{list_selected_vault.name}}<div class="pw-input"><input type="password" ng-model="vault_key" ng-enter="loginToVault(list_selected_vault, vault_key)"> <small class="last_access">{{\'last.access\' | translate}}: <span ng-if="list_selected_vault.last_access > 0">{{list_selected_vault.last_access * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</span> <span ng-if="list_selected_vault.last_access === 0">Never</span></small></div><div class="login_opts"><div><label><input type="checkbox" ng-checked="default_vault" ng-click="toggleDefaultVault()"> {{ \'vault.default\' | translate}}</label></div><div><label><input type="checkbox" ng-checked="remember_vault_password" ng-click="toggleRememberPassword()"> {{ \'vault.auto.login\' | translate}}</label></div><div><label><input type="checkbox" ng-checked="auto_logout_timer" ng-click="toggleAutoLogout()"> {{ \'auto.logout\' | translate}}</label><select ng-model="logout_timer" ng-change="selectLogoutTimer(logout_timer)"><option value="0">Never</option><option value="30">30 minutes</option><option value="60">60 minutes</option><option value="90">90 minutes</option><option value="180">3 hour</option><option value="480">8 hour</option></select></div></div><div class="alert alert-danger" ng-show="vault_tries[list_selected_vault.guid].timeout !== 0" translate="vault.locked" translate-value-tries="{{ vault_tries[list_selected_vault.guid].tries }}" translate-value-time="{{ vault_tries[list_selected_vault.guid].timeout | toHHMMSS }}"></div><button class="button button-geen" ng-click="loginToVault(list_selected_vault, vault_key)" ng-disabled="vault_tries[list_selected_vault.guid].timeout !== 0">{{ \'vault.decrypt\' | translate}}</button> <span ng-click="forgottenPassword = true;" style="margin-top: 10px; padding: 6px 12px" class="link pull-right" ng-show="!forgottenPassword">Forgot password?</span> <button ng-show="forgottenPassword" class="pull-right button button-red" ng-click="requestDeletion(list_selected_vault)"><span ng-show="list_selected_vault.delete_request_pending">{{ \'cancel.request.deletion\' | translate }}</span> <span ng-show="!list_selected_vault.delete_request_pending">{{ \'request.deletion\' | translate }}</span></button></div></div></div>')}]),$(document).ready(function(){function format_date(date){date=new Date(date);var month=date.getMonth(),year=date.getFullYear(),day=date.getDate(),hour=date.getHours(),minutes=date.getMinutes(),seconds=date.getSeconds();return month+=1,month<10&&(month="0"+month),hour<10&&(hour="0"+hour),minutes<10&&(minutes="0"+minutes),seconds<10&&(seconds="0"+seconds),day+"-"+month+"-"+year+" "+hour+":"+minutes+":"+seconds}function acceptDeleteRequest(el,req){confirm(OC.L10N.translate("passman","Are you really sure?\nThis will delete the vault and all credentials in it!"))&&$.post(OC.generateUrl("apps/passman/admin/accept-delete-request"),req,function(){$(el).parent().parent().remove()})}function ignoreDeleteRequest(el,req){$.ajax({url:OC.generateUrl("apps/passman/admin/request-deletion/"+req.vault_guid),type:"DELETE",success:function(){$(el).parent().parent().remove()}})}var Settings=function(baseUrl){this._baseUrl=baseUrl,this._settings=[]};Settings.prototype={load:function(){var deferred=$.Deferred(),self=this;return $.ajax({url:this._baseUrl,method:"GET",async:!1}).done(function(settings){self._settings=settings}).fail(function(){deferred.reject()}),deferred.promise()},setUserKey:function(key,value){var request=$.ajax({url:this._baseUrl+"/"+key+"/"+value,method:"POST"});request.done(function(){$(".msg-passwords").removeClass("msg_error"),$(".msg-passwords").text("")}),request.fail(function(){$(".msg-passwords").addClass("msg_error"),$(".msg-passwords").text(t("passwords","Error while saving field")+" "+key+"!")})},setAdminKey:function(key,value){var request=$.ajax({url:this._baseUrl+"/"+key+"/"+value+"/admin1/admin2",method:"POST"});request.done(function(){$(".msg-passwords").removeClass("msg_error"),$(".msg-passwords").text("")}),request.fail(function(){$(".msg-passwords").addClass("msg_error"),$(".msg-passwords").text(t("passwords","Error while saving field")+" "+key+"!")})},getKey:function(key){return!!this._settings.hasOwnProperty(key)&&this._settings[key]},getAll:function(){return this._settings}};var settings=new Settings(OC.generateUrl("apps/passman/api/v2/settings"));settings.load(),$("#passman_link_sharing_enabled").prop("checked","1"===settings.getKey("link_sharing_enabled").toString().toLowerCase()),$("#passman_sharing_enabled").prop("checked","1"===settings.getKey("user_sharing_enabled").toString().toLowerCase()),$("#passman_check_version").prop("checked","1"===settings.getKey("check_version").toString().toLowerCase()),$("#passman_https_check").prop("checked","1"===settings.getKey("https_check").toString().toLowerCase()),$("#passman_disable_contextmenu").prop("checked","1"===settings.getKey("disable_contextmenu").toString().toLowerCase()),$("#passman_disable_debugger").prop("checked","1"===settings.getKey("disable_debugger").toString().toLowerCase()),$("#vault_key_strength").val(settings.getKey("vault_key_strength")),$("#passman_check_version").change(function(){settings.setAdminKey("check_version",$(this).is(":checked")?1:0)}),$("#passman_https_check").change(function(){settings.setAdminKey("https_check",$(this).is(":checked")?1:0)}),$("#passman_disable_contextmenu").change(function(){settings.setAdminKey("disable_contextmenu",$(this).is(":checked")?1:0)}),$("#passman_disable_debugger").change(function(){settings.setAdminKey("disable_debugger",$(this).is(":checked")?1:0)}),$("#passman_sharing_enabled").change(function(){settings.setAdminKey("user_sharing_enabled",$(this).is(":checked")?1:0)}),$("#passman_link_sharing_enabled").change(function(){settings.setAdminKey("link_sharing_enabled",$(this).is(":checked")?1:0)}),$("#vault_key_strength").change(function(){settings.setAdminKey("vault_key_strength",$(this).val())}),2===$('form[name="passman_settings"]').length&&$('form[name="passman_settings"]')[1].remove();var accountMover={source_account:"",destination_account:""};$(".username-autocomplete").autocomplete({source:OC.generateUrl("apps/passman/admin/search"),minLength:1,select:function(event,ui){accountMover[$(this).attr("id")]=ui.item.value}}),$("#move_credentials").click(function(){var self=this;$("#moveStatus").hide(),$(self).attr("disabled","disabled"),$(self).html('<i class="fa fa-spinner fa-spin"></i> '+OC.L10N.translate("passman","Moving")+"..."),accountMover.source_account&&accountMover.destination_account&&$.post(OC.generateUrl("apps/passman/admin/move"),accountMover,function(data){data.success&&($(self).removeAttr("disabled"),$(self).html("Move"),$("#moveStatus").fadeIn(),setTimeout(function(){$("#moveStatus").fadeOut()},3500))})}),$.get(OC.generateUrl("apps/passman/admin/delete-requests"),function(requests){var table=$("#requests-table tbody");$.each(requests,function(k,request){var accept=$('<span class="link">[Accept]&nbsp;</span>');accept.click(function(){var _self=this;acceptDeleteRequest(_self,request)});var ignore=$('<span class="link">[Ignore]</span>');ignore.click(function(){var _self=this;ignoreDeleteRequest(_self,request)});var cols=$("<td>"+request.id+"</td><td>"+request.displayName+"</td><td>"+request.reason+"</td><td>"+format_date(1e3*request.created)+"</td>"),actions=$("<td></td>").append(accept).append(ignore);table.append($("<tr></tr>").append(cols).append(actions))})}),$("#passman-tabs").tabs()}); \ No newline at end of file
+}]),angular.module("views/settings.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/settings.html",'<div id="passman-controls"><div class="breadcrumb"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg"><a ng-click="cancel()">{{active_vault.name}}</a></div><div class="crumb svg last"><a>{{ \'settings\' | translate}}</a></div></div></div></div><div><ul class="tab_header"><li ng-repeat="tab in tabs track by $index" class="tab" ng-class="isActiveTab(tab)? \'active\' : \'inactive\'" ng-click="onClickTab(tab)" use-theme color="\'true\'">{{tab.title | translate}}<div class="indicator" use-theme negative="\'true\'"></div></li></ul><div class="tab_container settings edit_credential" use-theme type="\'border-top-color\'"><div ng-include="currentTab.url"></div></div></div>')}]),angular.module("views/share_credential.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/share_credential.html",'<div class="main_list.share"><div id="passman-controls"><div class="actions creatable"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg" data-dir="/Test"><a ng-click="cancel()">{{active_vault.name}}</a></div><div class="crumb svg last" data-dir="/Test"><a ng-if="storedCredential.credential_id">{{ \'share.credential\' | translate}} {{storedCredential.label}}</a></div></div></div></div><ul class="tab_header"><li ng-repeat="tab in tabs track by $index" class="tab" ng-class="{active:isActiveTab(tab)}" ng-click="onClickTab(tab)" use-theme color="\'true\'">{{tab.title | translate}}<div class="indicator" use-theme negative="\'true\'"></div></li></ul><div class="tab_container share_credential" ng-show="currentTab"><div ng-include="currentTab.url"></div><button ng-click="applyShare()" ng-disabled="share_settings.linkSharing.enabled === false && share_settings.credentialSharedWithUserAndGroup.length === 0">{{ \'share\' | translate}}</button> <button ng-click="cancel()">{{ \'cancel\' | translate}}</button> <button class="btn btn-danger" ng-disabled="!storedCredential.shared_key" ng-click="unshareCredential(storedCredential)">{{ \'unshare\' | translate}}</button></div></div>')}]),angular.module("views/show_vault.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/show_vault.html",'<div class="main_list" off-click-filter="\'.download-js-link, .sidebar-shown, #app-sidebar\'"><div id="passman-controls" ng-class="{ \'sidebar-shown\': selectedCredential }"><div class="breadcrumb"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg" ng-click="clearState()"><a>{{active_vault.name}}</a></div></div><div class="addCredential" ng-hide="delete_time>0"><button ng-click="addCredential()">+</button></div></div><div class="title" credential-counter="filtered_credentials" vault="active_vault" delete-time="delete_time" filters="filterOptions"></div><div class="searchboxContainer" ng-init="filterOptionShown = false;" off-click="filterOptionShown = false;"><input type="text" ng-model="filterOptions.filterText" class="searchbox" id="searchBox" placeholder="{{\'search.credential\' | translate}}" select-on-click clear-btn ng-click="filterOptionShown = true;"><div class="searchOptions" ng-show="filterOptionShown"><input type="checkbox" ng-model="filterOptions.useRegex"> {{ \'use.regex\' | translate }}</div></div><div class="viewModes"><div class="view-mode" ng-class="{\'active\': view_mode === \'list\' }" ng-click="switchViewMode(\'list\')"><i class="fa fa-list"></i></div><div class="view-mode" ng-class="{\'active\': view_mode === \'grid\' }" ng-click="switchViewMode(\'grid\')"><i class="fa fa-th-large"></i></div></div></div><div class="loaderContainer" ng-if="show_spinner"><div class="loader" use-theme type="\'border-bottom-color\'"></div></div><div ng-init="menuOpen = false;"><table class="credential-table" ng-if="view_mode === \'list\'"><tr ng-repeat="credential in filtered_credentials | orderBy:\'label\'" ng-if="showCredentialRow(credential)" ng-click="selectCredential(credential)" ng-dblclick="editCredential(credential)" ng-class="{\'selected\': selectedCredential.credential_id == credential.credential_id}"><td ng-class="{\'compromised\': credential.compromised }"><span class="tags"><span class="tag" ng-repeat="tag in credential.tags_raw">{{ ::tag.text}}</span></span> <span class="icon" ng-if="credential.url || credential.icon"><credential-icon credential="credential"></credential-icon></span> <span class="icon" ng-if="!credential.url && !credential.icon"><i class="fa fa-lock" ng-if="!credential.acl && !credential.shared_key"></i> <i class="fa fa-share-alt" ng-if="credential.acl"></i> <i class="fa fa-share-alt-square" ng-if="credential.shared_key"></i></span> <a class="label">{{ ::credential.label}}</a> <span ng-if="credential.compromised" class="compromised-list"><i class="icon-error icon"></i> <span class="text">{{ \'compromised.warning.list\' | translate}}</span></span></td></tr></table><ul class="grid-view" ng-if="view_mode === \'grid\'"><li class="credential" ng-repeat="credential in filtered_credentials | orderBy:\'label\'" ng-if="credential.hidden == 0 && showCredentialRow(credential)" ng-click="selectCredential(credential)" use-theme type="\'border-color\'"><div class="credential_content"><div><span class="icon" ng-if="credential.url"><credential-icon credential="credential"></credential-icon></span> <span class="icon" ng-if="!credential.url"><i class="fa fa-lock" ng-if="!credential.acl && !credential.shared_key"></i> <i class="fa fa-share-alt" ng-if="credential.acl"></i> <i class="fa fa-share-alt-square" ng-if="credential.shared_key"></i></span><div class="label">{{ ::credential.label}}</div></div><div class="tags"><div class="tag" ng-repeat="tag in credential.tags_raw">{{ ::tag.text}}</div></div></div></li></ul><div ng-if="getListSizes().listsize_wout_deleted==0 && no_credentials_label.all && !show_spinner && selectedtags.length==0 && filterOptions.filterText==\'\'" class="nopasswords" ng-hide="delete_time>0"><b>{{\'vault.hint.hello\' | translate}}</b><br><div>{{\'vault.hint.hello.add\' | translate}}</div><div class=""><button ng-click="addCredential()">+</button></div></div><div ng-if="getListSizes().listsize_wout_deleted==0 && no_credentials_label.all && !show_spinner && selectedtags.length>0" class="nopasswords" ng-hide="delete_time>0"><div>{{ \'vault.hint.list.notags\' | translate}}</div></div><div ng-if="getListSizes().listsize_wout_deleted==0 && no_credentials_label.all && !show_spinner && selectedtags.length==0 && filterOptions.filterText!=\'\'" class="nopasswords" ng-hide="delete_time>0"><div>{{ \'vault.hint.list.nosearch\' | translate}} <b>\'{{filterOptions.filterText}}\'</b></div></div><div class="nopasswords" ng-if="no_credentials_label.s_good" ng-hide="getListSizes().listsize_wout_deleted>0"><div>{{ \'vault.hint.list.nogood\' | translate}}</div></div><div class="nopasswords" ng-if="no_credentials_label.s_medium" ng-hide="getListSizes().listsize_wout_deleted>0"><div>{{ \'vault.hint.list.nomedium\' | translate}}</div></div><div class="nopasswords" ng-if="no_credentials_label.s_low" ng-hide="getListSizes().listsize_wout_deleted>0"><div>{{ \'vault.hint.list.nobad\' | translate}}</div></div><div class="nopasswords" ng-if="no_credentials_label.expired" ng-hide="getListSizes().listsize_wout_deleted>0"><div>{{ \'vault.hint.list.noexpired\' | translate}}</div></div><div class="nopasswords" ng-if="getListSizes().listsize_deleted==0" ng-hide="delete_time==0"><div>{{ \'vault.hint.list.nodeleted\' | translate}}</div></div></div></div><div id="app-sidebar" class="app_sidebar" ng-show="selectedCredential" off-click="closeSelected()"><span class="close icon-close" ng-click="closeSelected()" alt="Close"></span><div class="sidebar"><span class="icon sidebar-icon" ng-if="selectedCredential.url || credential.icon"><credential-icon credential="selectedCredential"></credential-icon></span> <span class="icon sidebar-icon" ng-if="!selectedCredential.url && !credential.icon"><credential-icon credential="selectedCredential"></credential-icon></span><h2 class="sidebar-label">{{selectedCredential.label}}</h2></div><div credential-template="selectedCredential"></div><div ng-show="selectedCredential"><div><button class="button" ng-click="editCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-edit"></span> {{ \'edit\' | translate}}</button> <button class="button" ng-click="deleteCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-trash"></span> {{ \'delete\' | translate}}</button> <button class="button" ng-click="shareCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && selectedCredential.acl === undefined &&\n\t\t\t\t\t\t(settings.user_sharing_enabled === 1 || settings.user_sharing_enabled === \'1\' || settings.link_sharing_enabled === 1 || settings.link_sharing_enabled === \'1\')"><span class="fa fa-share"></span> {{ \'share\' | translate}}</button> <button class="button" ng-click="getRevisions(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.HISTORY)"><span class="fa fa-undo"></span> {{ \'revisions\' | translate}}</button> <button class="button" ng-if="selectedCredential.delete_time > 0" ng-click="recoverCredential(selectedCredential) && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-recycle"></span> {{\'recover\' | translate}}</button> <button class="button" ng-if="selectedCredential.delete_time > 0" ng-click="destroyCredential(selectedCredential)"><span class="fa fa-bomb"></span> {{\'destroy\' | translate}}</button></div></div></div><div class="share_popup" style="display: none" title="{{ \'sharereq.title\' | translate }}"><p>{{ \'sharereq.line1\' | translate}} {{ \'sharereq.line2\' | translate}}</p><br><table class="table"><thead><tr><td><b>{{ \'label\' | translate}}</b></td><td><b>{{ \'permissions\' | translate}}</b></td><td><b>{{ \'received.from\' | translate}}</b></td><td><b>{{ \'date\' | translate}}</b></td></tr></thead><tr ng-repeat="share_request in incoming_share_requests" ng-if="share_request.target_vault_id == active_vault.vault_id"><td>{{share_request.credential_label}}</td><td>{{share_request.permissions}}</td><td>{{share_request.from_user_id}}</td><td>{{share_request.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</td><td><span class="link" ng-click="acceptShareRequest(share_request)"><b>{{ \'accept\' | translate}}</b></span> | <span class="link" ng-click="declineShareRequest(share_request)">{{ \'decline\' | translate}}</span></td></tr></table></div>')}]),angular.module("views/vault_req_deletion.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/vault_req_deletion.html",'<div class="vault_wrapper"><div class="reset_form" ng-show="!pending_deletion">{{ \'req.intro1\' | translate }}<br>{{ \'req.intro2\' | translate }}<br>{{ \'req.intro3\' | translate }}<br><br><b>{{ \'request.deletion.warning\' | translate}}</b><label>{{ \'request.deletion.reason\' | translate }}</label><input type="text" ng-model="reason" class="form-control"> <button class="button button-red" ng-click="requestDeletion()">{{ \'request.deletion.accept\' | translate }}</button> <a class="pull-right button button-geen" ng-href="#/">{{ \'cancel\' | translate}}</a></div><div class="reset_form" ng-show="pending_deletion"><button class="button button-red" ng-click="removeRequestDeletion()">Cancel destruction request</button> <a class="pull-right button button-geen" ng-href="#/">Cancel</a></div></div>')}]),angular.module("views/vaults.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/vaults.html",'<div class="vault_wrapper"><div class="vaults" ng-if="!list_selected_vault && !creating_vault"><div class="ui-select-container ui-select-bootstrap vaultlist"><ul><li ng-click="newVault()">+ Create a new vault</li><li ng-repeat="vault in vaults" ng-class="{\'selected\': vault == list_selected_vault }" ng-click="selectVault(vault)"><div><span class="ui-select-choices-row-inner"><div class="ng-binding ng-scope">{{vault.name}} <span class="pull-right" style="color: #ce3702" ng-show="vault.delete_request_pending">{{ \'delete.request.pending\' | translate}}</span></div><small class="ng-binding ng-scope">{{ \'created\' | translate}}: {{vault.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}} | {{ \'last.access\' | translate}}: <span ng-if="vault.last_access > 0">{{vault.last_access * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</span> <span ng-if="vault.last_access === 0">{{\'never\' | translate}}</span></small></span></div></li><li ng-if="vaults.length === 0">{{ \'no.vaults\' | translate}}</li></ul></div></div><div ng-if="creating_vault"><div class="login_form" ng-init="vault_name = \'\'; vault_key=\'\'; ">{{\'new.vault.name\' | translate}}<div><input type="text" ng-model="vault_name" required></div><div>{{ \'new.vault.pass\' | translate}} <input type="password" ng-model="vault_key" required><ng-password-meter password="vault_key" score="vault_key_score"></ng-password-meter></div><div>{{ \'new.vault.passr\' | translate}} <input type="password" ng-model="vault_key2" required></div><div ng-show="error || vault_key_score.score < minimal_value_key_strength" class="error"><ul><li ng-show="error">{{error}}</li><li ng-show="vault_key_score.score < minimal_value_key_strength">{{\'min.vault.key.strength\' | translate:required_score}}</li></ul></div><div><small>{{\'new.vault.sharing_key_notice\' | translate}}</small></div><div class="button_wrapper"><button class="button button-geen" ng-if="!creating_keys" click-disable ng-click="createVault(vault_name, vault_key, vault_key2)" ng-disabled="vault_key_score.score < minimal_value_key_strength || vault_key !== vault_key2 || vault_key === \'\'">{{ \'new.vault.create\' | translate }}</button><div class="button" ng-if="creating_keys"><span><i class="fa fa-spinner fa-spin"></i> {{creating_keys}}</span></div><div class="button button-red" ng-click="clearState()">{{ \'cancel\' | translate}}</div><div class="template-hidden">{{sharing_keys}}</div></div></div></div><div ng-if="list_selected_vault != false"><div class="vaultlist"><ul><li ng-click="clearState()">{{ \'go.back.vaults\' | translate }}</li></ul></div><div class="login_form"><div ng-show="error" class="error"><ul><li>{{error}}</li></ul></div>{{ \'input.vault.password\' | translate}} {{list_selected_vault.name}}<div class="pw-input"><input type="password" ng-model="vault_key" ng-enter="loginToVault(list_selected_vault, vault_key)"> <small class="last_access">{{\'last.access\' | translate}}: <span ng-if="list_selected_vault.last_access > 0">{{list_selected_vault.last_access * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</span> <span ng-if="list_selected_vault.last_access === 0">Never</span></small></div><div class="login_opts"><div><label><input type="checkbox" ng-checked="default_vault" ng-click="toggleDefaultVault()"> {{ \'vault.default\' | translate}}</label></div><div><label><input type="checkbox" ng-checked="remember_vault_password" ng-click="toggleRememberPassword()"> {{ \'vault.auto.login\' | translate}}</label></div><div><label><input type="checkbox" ng-checked="auto_logout_timer" ng-click="toggleAutoLogout()"> {{ \'auto.logout\' | translate}}</label><select ng-model="logout_timer" ng-change="selectLogoutTimer(logout_timer)"><option value="0">Never</option><option value="30">30 minutes</option><option value="60">60 minutes</option><option value="90">90 minutes</option><option value="180">3 hour</option><option value="480">8 hour</option></select></div></div><div class="alert alert-danger" ng-show="vault_tries[list_selected_vault.guid].timeout !== 0" translate="vault.locked" translate-value-tries="{{ vault_tries[list_selected_vault.guid].tries }}" translate-value-time="{{ vault_tries[list_selected_vault.guid].timeout | toHHMMSS }}"></div><button class="button button-geen" ng-click="loginToVault(list_selected_vault, vault_key)" ng-disabled="vault_tries[list_selected_vault.guid].timeout !== 0">{{ \'vault.decrypt\' | translate}}</button> <span ng-click="forgottenPassword = true;" style="margin-top: 10px; padding: 6px 12px" class="link pull-right" ng-show="!forgottenPassword">Forgot password?</span> <button ng-show="forgottenPassword" class="pull-right button button-red" ng-click="requestDeletion(list_selected_vault)"><span ng-show="list_selected_vault.delete_request_pending">{{ \'cancel.request.deletion\' | translate }}</span> <span ng-show="!list_selected_vault.delete_request_pending">{{ \'request.deletion\' | translate }}</span></button></div></div></div>')}]),$(document).ready(function(){function format_date(date){date=new Date(date);var month=date.getMonth(),year=date.getFullYear(),day=date.getDate(),hour=date.getHours(),minutes=date.getMinutes(),seconds=date.getSeconds();return month+=1,month<10&&(month="0"+month),hour<10&&(hour="0"+hour),minutes<10&&(minutes="0"+minutes),seconds<10&&(seconds="0"+seconds),day+"-"+month+"-"+year+" "+hour+":"+minutes+":"+seconds}function acceptDeleteRequest(el,req){confirm(OC.L10N.translate("passman","Are you really sure?\nThis will delete the vault and all credentials in it!"))&&$.post(OC.generateUrl("apps/passman/admin/accept-delete-request"),req,function(){$(el).parent().parent().remove()})}function ignoreDeleteRequest(el,req){$.ajax({url:OC.generateUrl("apps/passman/admin/request-deletion/"+req.vault_guid),type:"DELETE",success:function(){$(el).parent().parent().remove()}})}var Settings=function(baseUrl){this._baseUrl=baseUrl,this._settings=[]};Settings.prototype={load:function(){var deferred=$.Deferred(),self=this;return $.ajax({url:this._baseUrl,method:"GET",async:!1}).done(function(settings){self._settings=settings}).fail(function(){deferred.reject()}),deferred.promise()},setUserKey:function(key,value){var request=$.ajax({url:this._baseUrl+"/"+key+"/"+value,method:"POST"});request.done(function(){$(".msg-passwords").removeClass("msg_error"),$(".msg-passwords").text("")}),request.fail(function(){$(".msg-passwords").addClass("msg_error"),$(".msg-passwords").text(t("passwords","Error while saving field")+" "+key+"!")})},setAdminKey:function(key,value){var request=$.ajax({url:this._baseUrl+"/"+key+"/"+value+"/admin1/admin2",method:"POST"});request.done(function(){$(".msg-passwords").removeClass("msg_error"),$(".msg-passwords").text("")}),request.fail(function(){$(".msg-passwords").addClass("msg_error"),$(".msg-passwords").text(t("passwords","Error while saving field")+" "+key+"!")})},getKey:function(key){return!!this._settings.hasOwnProperty(key)&&this._settings[key]},getAll:function(){return this._settings}};var settings=new Settings(OC.generateUrl("apps/passman/api/v2/settings"));settings.load(),$("#passman_link_sharing_enabled").prop("checked","1"===settings.getKey("link_sharing_enabled").toString().toLowerCase()),$("#passman_sharing_enabled").prop("checked","1"===settings.getKey("user_sharing_enabled").toString().toLowerCase()),$("#passman_check_version").prop("checked","1"===settings.getKey("check_version").toString().toLowerCase()),$("#passman_https_check").prop("checked","1"===settings.getKey("https_check").toString().toLowerCase()),$("#passman_disable_contextmenu").prop("checked","1"===settings.getKey("disable_contextmenu").toString().toLowerCase()),$("#passman_disable_debugger").prop("checked","1"===settings.getKey("disable_debugger").toString().toLowerCase()),$("#passman_enable_global_search").prop("checked","1"===settings.getKey("enable_global_search").toString().toLowerCase()),$("#vault_key_strength").val(settings.getKey("vault_key_strength")),$("#passman_check_version").change(function(){settings.setAdminKey("check_version",$(this).is(":checked")?1:0)}),$("#passman_https_check").change(function(){settings.setAdminKey("https_check",$(this).is(":checked")?1:0)}),$("#passman_disable_contextmenu").change(function(){settings.setAdminKey("disable_contextmenu",$(this).is(":checked")?1:0)}),$("#passman_disable_debugger").change(function(){settings.setAdminKey("disable_debugger",$(this).is(":checked")?1:0)}),$("#passman_enable_global_search").change(function(){settings.setAdminKey("enable_global_search",$(this).is(":checked")?1:0)}),$("#passman_sharing_enabled").change(function(){settings.setAdminKey("user_sharing_enabled",$(this).is(":checked")?1:0)}),$("#passman_link_sharing_enabled").change(function(){settings.setAdminKey("link_sharing_enabled",$(this).is(":checked")?1:0)}),$("#vault_key_strength").change(function(){settings.setAdminKey("vault_key_strength",$(this).val())}),2===$('form[name="passman_settings"]').length&&$('form[name="passman_settings"]')[1].remove();var accountMover={source_account:"",destination_account:""};$(".username-autocomplete").autocomplete({source:OC.generateUrl("apps/passman/admin/search"),minLength:1,select:function(event,ui){accountMover[$(this).attr("id")]=ui.item.value}}),$("#move_credentials").click(function(){var self=this;$("#moveStatus").hide(),$(self).attr("disabled","disabled"),$(self).html('<i class="fa fa-spinner fa-spin"></i> '+OC.L10N.translate("passman","Moving")+"..."),accountMover.source_account&&accountMover.destination_account&&$.post(OC.generateUrl("apps/passman/admin/move"),accountMover,function(data){data.success&&($(self).removeAttr("disabled"),$(self).html("Move"),$("#moveStatus").fadeIn(),setTimeout(function(){$("#moveStatus").fadeOut()},3500))})}),$.get(OC.generateUrl("apps/passman/admin/delete-requests"),function(requests){var table=$("#requests-table tbody");$.each(requests,function(k,request){var accept=$('<span class="link">[Accept]&nbsp;</span>');accept.click(function(){var _self=this;acceptDeleteRequest(_self,request)});var ignore=$('<span class="link">[Ignore]</span>');ignore.click(function(){var _self=this;ignoreDeleteRequest(_self,request)});var cols=$("<td>"+request.id+"</td><td>"+request.displayName+"</td><td>"+request.reason+"</td><td>"+format_date(1e3*request.created)+"</td>"),actions=$("<td></td>").append(accept).append(ignore);table.append($("<tr></tr>").append(cols).append(actions))})}),$("#passman-tabs").tabs()}); \ No newline at end of file
diff --git a/js/settings-admin.js b/js/settings-admin.js
index a9f6c666..b607e161 100644
--- a/js/settings-admin.js
+++ b/js/settings-admin.js
@@ -94,6 +94,7 @@ $(document).ready(function () {
$('#passman_https_check').prop('checked', (settings.getKey('https_check').toString().toLowerCase() === '1'));
$('#passman_disable_contextmenu').prop('checked', (settings.getKey('disable_contextmenu').toString().toLowerCase() === '1'));
$('#passman_disable_debugger').prop('checked', (settings.getKey('disable_debugger').toString().toLowerCase() === '1'));
+ $('#passman_enable_global_search').prop('checked', (settings.getKey('enable_global_search').toString().toLowerCase() === '1'));
$('#vault_key_strength').val(settings.getKey('vault_key_strength'));
@@ -113,6 +114,10 @@ $(document).ready(function () {
settings.setAdminKey('disable_debugger', ($(this).is(":checked")) ? 1 : 0);
});
+ $('#passman_enable_global_search').change(function () {
+ settings.setAdminKey('enable_global_search', ($(this).is(":checked")) ? 1 : 0);
+ });
+
$('#passman_sharing_enabled').change(function () {
settings.setAdminKey('user_sharing_enabled', ($(this).is(":checked")) ? 1 : 0);
});
diff --git a/l10n/af.js b/l10n/af.js
index 44adbb01..686f27c6 100644
--- a/l10n/af.js
+++ b/l10n/af.js
@@ -60,7 +60,7 @@ OC.L10N.register(
"Description" : "Beskrywing",
"Passman" : "Passman",
"Connection to server lost" : "Verbinding met bediener verloor",
- "Saving..." : "Stoor tans…",
+ "Saving …" : "Word gestoor …",
"Dismiss" : "Ontslaan",
"seconds ago" : "sekondes gelede"
},
diff --git a/l10n/af.json b/l10n/af.json
index 5318f539..e82d3b36 100644
--- a/l10n/af.json
+++ b/l10n/af.json
@@ -58,7 +58,7 @@
"Description" : "Beskrywing",
"Passman" : "Passman",
"Connection to server lost" : "Verbinding met bediener verloor",
- "Saving..." : "Stoor tans…",
+ "Saving …" : "Word gestoor …",
"Dismiss" : "Ontslaan",
"seconds ago" : "sekondes gelede"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/ar.js b/l10n/ar.js
index b769d4c7..6a39f31b 100644
--- a/l10n/ar.js
+++ b/l10n/ar.js
@@ -37,6 +37,7 @@ OC.L10N.register(
"Disabled" : "معطّل",
"Password length" : "طول كلمة السر",
"Export" : "تصدير",
+ "Change" : "تعديل",
"Version" : "الإصدار",
"Import" : "استيراد",
"Public key" : "المفتاح العمومي",
@@ -80,7 +81,6 @@ OC.L10N.register(
"You deleted %1$s" : "حذفت %1$s",
"Passwords" : "الكلمات السرية",
"Connection to server lost" : "تم فقد الاتصال بالخادم",
- "Saving..." : "جاري الحفظ...",
"Dismiss" : "تراجع",
"seconds ago" : "ثوان مضت"
},
diff --git a/l10n/ar.json b/l10n/ar.json
index 68db76df..3fe7c655 100644
--- a/l10n/ar.json
+++ b/l10n/ar.json
@@ -35,6 +35,7 @@
"Disabled" : "معطّل",
"Password length" : "طول كلمة السر",
"Export" : "تصدير",
+ "Change" : "تعديل",
"Version" : "الإصدار",
"Import" : "استيراد",
"Public key" : "المفتاح العمومي",
@@ -78,7 +79,6 @@
"You deleted %1$s" : "حذفت %1$s",
"Passwords" : "الكلمات السرية",
"Connection to server lost" : "تم فقد الاتصال بالخادم",
- "Saving..." : "جاري الحفظ...",
"Dismiss" : "تراجع",
"seconds ago" : "ثوان مضت"
},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"
diff --git a/l10n/ast.js b/l10n/ast.js
index 52483a7d..be58cd59 100644
--- a/l10n/ast.js
+++ b/l10n/ast.js
@@ -150,7 +150,7 @@ OC.L10N.register(
"Reason" : "Razón",
"Connection to server lost" : "Perdióse la conexón col sirvidor",
"Problem loading page, reloading in 5 seconds" : "Problema cargando la páxina, recargando en 5 segundos",
- "Saving..." : "Guardando...",
+ "Saving …" : "Guardando...",
"Dismiss" : "Escartar",
"seconds ago" : "hai segundos"
},
diff --git a/l10n/ast.json b/l10n/ast.json
index 37cf342d..158f192d 100644
--- a/l10n/ast.json
+++ b/l10n/ast.json
@@ -148,7 +148,7 @@
"Reason" : "Razón",
"Connection to server lost" : "Perdióse la conexón col sirvidor",
"Problem loading page, reloading in 5 seconds" : "Problema cargando la páxina, recargando en 5 segundos",
- "Saving..." : "Guardando...",
+ "Saving …" : "Guardando...",
"Dismiss" : "Escartar",
"seconds ago" : "hai segundos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/az.js b/l10n/az.js
index e714d79a..d4e01e73 100644
--- a/l10n/az.js
+++ b/l10n/az.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"Description" : "Açıqlanma",
"You created %1$s" : "Siz yaratdınız %1$s",
"You deleted %1$s" : "Siz silindiniz %1$s",
- "Saving..." : "Saxlama...",
"seconds ago" : "saniyələr öncə"
},
"nplurals=2; plural=(n != 1);");
diff --git a/l10n/az.json b/l10n/az.json
index d0c4e62e..9e840edc 100644
--- a/l10n/az.json
+++ b/l10n/az.json
@@ -37,7 +37,6 @@
"Description" : "Açıqlanma",
"You created %1$s" : "Siz yaratdınız %1$s",
"You deleted %1$s" : "Siz silindiniz %1$s",
- "Saving..." : "Saxlama...",
"seconds ago" : "saniyələr öncə"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/l10n/bg.js b/l10n/bg.js
index 610d531e..c1538a52 100644
--- a/l10n/bg.js
+++ b/l10n/bg.js
@@ -239,7 +239,7 @@ OC.L10N.register(
"Reason" : "Причина",
"Connection to server lost" : "Връзката със сървъра пропадна",
"Problem loading page, reloading in 5 seconds" : "Проблем при зареждане на страницата, презареждане след 5 секунди",
- "Saving..." : "Записване...",
+ "Saving …" : "Записване …",
"Dismiss" : "Отхвърли",
"seconds ago" : "преди секунди"
},
diff --git a/l10n/bg.json b/l10n/bg.json
index a6f67fee..59844dc3 100644
--- a/l10n/bg.json
+++ b/l10n/bg.json
@@ -237,7 +237,7 @@
"Reason" : "Причина",
"Connection to server lost" : "Връзката със сървъра пропадна",
"Problem loading page, reloading in 5 seconds" : "Проблем при зареждане на страницата, презареждане след 5 секунди",
- "Saving..." : "Записване...",
+ "Saving …" : "Записване …",
"Dismiss" : "Отхвърли",
"seconds ago" : "преди секунди"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/bn_BD.js b/l10n/bn_BD.js
index 3326616c..fcf69787 100644
--- a/l10n/bn_BD.js
+++ b/l10n/bn_BD.js
@@ -38,7 +38,6 @@ OC.L10N.register(
"Description" : "বিবরণ",
"You created %1$s" : "আপনি তৈরি করেছেন %1$s",
"You deleted %1$s" : "আপনি ডিলিট করেছেন %1$s",
- "Saving..." : "সংরক্ষণ করা হচ্ছে..",
"seconds ago" : "সেকেন্ড পূর্বে"
},
"nplurals=2; plural=(n != 1);");
diff --git a/l10n/bn_BD.json b/l10n/bn_BD.json
index aba145ba..a0b57b49 100644
--- a/l10n/bn_BD.json
+++ b/l10n/bn_BD.json
@@ -36,7 +36,6 @@
"Description" : "বিবরণ",
"You created %1$s" : "আপনি তৈরি করেছেন %1$s",
"You deleted %1$s" : "আপনি ডিলিট করেছেন %1$s",
- "Saving..." : "সংরক্ষণ করা হচ্ছে..",
"seconds ago" : "সেকেন্ড পূর্বে"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/l10n/br.js b/l10n/br.js
index 3c585a01..fe43c946 100644
--- a/l10n/br.js
+++ b/l10n/br.js
@@ -54,7 +54,7 @@ OC.L10N.register(
"Description" : "Diskrivadur",
"Expires:" : "Termenn :",
"Connection to server lost" : "Kelet eo bet ar c'henstagañ gant ar servijour",
- "Saving..." : "Oc'h enrolién",
+ "Saving …" : "Orc'h enrolliñ",
"Dismiss" : "Arrest",
"seconds ago" : "eilenn zo"
},
diff --git a/l10n/br.json b/l10n/br.json
index 97dc0b24..294cc2b6 100644
--- a/l10n/br.json
+++ b/l10n/br.json
@@ -52,7 +52,7 @@
"Description" : "Diskrivadur",
"Expires:" : "Termenn :",
"Connection to server lost" : "Kelet eo bet ar c'henstagañ gant ar servijour",
- "Saving..." : "Oc'h enrolién",
+ "Saving …" : "Orc'h enrolliñ",
"Dismiss" : "Arrest",
"seconds ago" : "eilenn zo"
},"pluralForm" :"nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);"
diff --git a/l10n/bs.js b/l10n/bs.js
index 9090891e..25cc3e27 100644
--- a/l10n/bs.js
+++ b/l10n/bs.js
@@ -34,7 +34,6 @@ OC.L10N.register(
"Date" : "Date",
"Accept" : "Prihvati",
"Decline" : "Odbij",
- "Description" : "Opis",
- "Saving..." : "Spremanje..."
+ "Description" : "Opis"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/l10n/bs.json b/l10n/bs.json
index ffdc7e12..29ad0e55 100644
--- a/l10n/bs.json
+++ b/l10n/bs.json
@@ -32,7 +32,6 @@
"Date" : "Date",
"Accept" : "Prihvati",
"Decline" : "Odbij",
- "Description" : "Opis",
- "Saving..." : "Spremanje..."
+ "Description" : "Opis"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/l10n/ca.js b/l10n/ca.js
index 39ee3c8c..28d163cb 100644
--- a/l10n/ca.js
+++ b/l10n/ca.js
@@ -287,18 +287,17 @@ OC.L10N.register(
"Medium Strength" : "Fortalesa Mitjana",
"Bad Strength" : "Fortalesa Dolenta",
"Expired" : "Caducat",
- "Filter Tags" : "Filtre Etiquetes",
+ "Filter Tags" : "Filtra les etiquetes",
"Simple Navigation" : "Navegació Simple",
"Someone has shared a credential with you." : "Algú us ha compartit una credencial.",
"Click here to request it" : "Feu clic aquí per sol·licitar-lo",
"Loading…" : "S'està carregant...",
"Awwhh… credential not found. Maybe it expired" : "Oohh... no s'ha trobat cap credencial ... Potser ha caducat",
- "Compromise!" : "Compromís!",
+ "Mark as Compromised" : "Marca com a compromès",
"Compromised!" : "Compromès!",
"This password is compromised. You can only remove this warning by changing the password." : "Aquesta contrasenya està compromesa. Només podeu suprimir aquest avís canviant la contrasenya.",
"email" : "correu electrònic",
"Description" : "Descripció",
- "Url" : "Url",
"Custom Search:" : "Cerca Personalitzada:",
"Revert to defaults" : "Torna als valors per defecte",
"Error while saving field" : "S'ha produït un error mentre es desava el camp",
@@ -361,7 +360,7 @@ OC.L10N.register(
"Expires:" : "Caduca:",
"Connection to server lost" : "S'ha perdut la connexió amb el servidor",
"Problem loading page, reloading in 5 seconds" : "Problemes carregant la pagina, es recarregarà d'aquí 5 segons",
- "Saving..." : "S'està desant...",
+ "Saving …" : "S'està desant …",
"Dismiss" : "Rebutja",
"seconds ago" : "fa uns segons"
},
diff --git a/l10n/ca.json b/l10n/ca.json
index 0e7bdcd7..d85d3ad4 100644
--- a/l10n/ca.json
+++ b/l10n/ca.json
@@ -285,18 +285,17 @@
"Medium Strength" : "Fortalesa Mitjana",
"Bad Strength" : "Fortalesa Dolenta",
"Expired" : "Caducat",
- "Filter Tags" : "Filtre Etiquetes",
+ "Filter Tags" : "Filtra les etiquetes",
"Simple Navigation" : "Navegació Simple",
"Someone has shared a credential with you." : "Algú us ha compartit una credencial.",
"Click here to request it" : "Feu clic aquí per sol·licitar-lo",
"Loading…" : "S'està carregant...",
"Awwhh… credential not found. Maybe it expired" : "Oohh... no s'ha trobat cap credencial ... Potser ha caducat",
- "Compromise!" : "Compromís!",
+ "Mark as Compromised" : "Marca com a compromès",
"Compromised!" : "Compromès!",
"This password is compromised. You can only remove this warning by changing the password." : "Aquesta contrasenya està compromesa. Només podeu suprimir aquest avís canviant la contrasenya.",
"email" : "correu electrònic",
"Description" : "Descripció",
- "Url" : "Url",
"Custom Search:" : "Cerca Personalitzada:",
"Revert to defaults" : "Torna als valors per defecte",
"Error while saving field" : "S'ha produït un error mentre es desava el camp",
@@ -359,7 +358,7 @@
"Expires:" : "Caduca:",
"Connection to server lost" : "S'ha perdut la connexió amb el servidor",
"Problem loading page, reloading in 5 seconds" : "Problemes carregant la pagina, es recarregarà d'aquí 5 segons",
- "Saving..." : "S'està desant...",
+ "Saving …" : "S'està desant …",
"Dismiss" : "Rebutja",
"seconds ago" : "fa uns segons"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/cs.js b/l10n/cs.js
index 1923c772..b7106672 100644
--- a/l10n/cs.js
+++ b/l10n/cs.js
@@ -8,11 +8,11 @@ OC.L10N.register(
"Custom Fields" : "Uživatelsky určené kolonky",
"Please fill in a label." : "Vyplňte štítek.",
"Please fill in a value." : "Vyplňte hodnotu.",
- "Error loading file" : "Chyba načítání souboru",
+ "Error loading file" : "Chyba při načítání souboru",
"An error occurred during decryption" : "Při rozšifrovávání došlo k chybě",
"Credential created!" : "Přihlašovací údaje vytvořeny!",
"Credential deleted" : "Přihlašovací údaj smazán",
- "Credential updated" : "Přihlašovací údaje zaktualizovány",
+ "Credential updated" : "Přihlašovací údaj zaktualizován",
"Credential recovered" : "Přihlašovací údaje obnoveny",
"Credential destroyed" : "Přihlašovací údaje zlikvidovány",
"Error downloading file, you probably have insufficient permissions" : "Chyba při stahování souboru, nejspíš nemáte potřebná oprávnění",
@@ -46,7 +46,7 @@ OC.L10N.register(
"Password audit" : "Audit hesel",
"Password settings" : "Nastavení hesla",
"Import credentials" : "Importovat přihlašovací údaje",
- "Export credentials" : "Exportovat pověření",
+ "Export credentials" : "Exportovat přihlašovací údaje",
"Sharing" : "Sdílení",
"Are you sure you want to leave? This will destroy all your credentials" : "Opravdu chcete odejít? Všechna vaše pověření budou ztracena",
"Old password field incorrect!" : "Kolonka původní heslo není vyplněná správně!",
@@ -82,7 +82,7 @@ OC.L10N.register(
"There was an error fetching the icon!" : "Při získávání ikony došlo k chybě!",
"Selected icon" : "Vybraná ikona",
"Field label" : "Štítek kolonky",
- "Field value" : "Hodnota kolonky",
+ "Field value" : "Hodnota v kolonce",
"Choose a file" : "Vyberte soubor",
"Text" : "Text",
"File" : "Soubor",
@@ -104,7 +104,7 @@ OC.L10N.register(
"Disabled" : "Zakázáno",
"Day(s)" : "Dnů",
"Week(s)" : "Týdny",
- "Month(s)" : "Měsíc(e)",
+ "Month(s)" : "Měsíc(e/ů)",
"Year(s)" : "rok(y)",
"Password generation settings" : "Nastavení vytváření hesel",
"Password length" : "Délka hesla",
@@ -113,7 +113,7 @@ OC.L10N.register(
"Use lowercase letters" : "Použít malá písmena",
"Use numbers" : "Použít čísla",
"Use special characters" : "Použít speciální znaky",
- "Avoid ambiguous characters" : "Vynechat nejednoznačné znaky",
+ "Avoid ambiguous characters" : "Vynechat nesnadno od sebe rozlišitelné znaky",
"Require every character type" : "Vyžadovat každý typ znaku",
"Export type" : "Typ exportu",
"Export" : "Export",
@@ -125,10 +125,10 @@ OC.L10N.register(
"Old vault password" : "Původní heslo trezoru",
"New vault password" : "Nové heslo k trezoru",
"Repeat new vault password" : "Zopakujte nové heslo trezoru",
- "Please wait your vault is being updated, do not leave this page." : "Čekejte, váš trezor se aktualizuje, neopouštějte tuto stránku.",
+ "Please wait your vault is being updated, do not leave this page." : "Čekejte, váš trezor se aktualizuje – neopouštějte tuto stránku.",
"Processing" : "Zpracování",
"Total progress" : "Celkový průběh",
- "About Passman" : "O Passman",
+ "About Passman" : "O aplikaci Passman",
"Version" : "Verze",
"Donate to support development" : "Přispějte na podporu vývoje",
"Bookmarklet" : "Záložky",
@@ -268,7 +268,7 @@ OC.L10N.register(
"An admin then accepts or declines the request" : "Správce pak požadavek buď přijme nebo odmítne",
"After an admin destroys this vault, all credentials in it will be lost" : "Poté, co správce potvrdí likvidaci tohoto trezoru, všechna pověření budou ztracena",
"Reason for requesting deletion (optional):" : "Důvod žádosti o smazání (volitelné):",
- "Request vault destruction" : "Požádat o zničení trezoru",
+ "Request vault destruction" : "Požádat o zlikvidování trezoru",
"Yes, request an admin to destroy this vault" : "Ano, požádat správce o zlikvidování tohoto trezoru",
"Cancel destruction request" : "Zrušit požadavek na likvidaci",
"Vault destruction requested" : "Vyžádáno zlikvidování trezoru",
@@ -293,12 +293,11 @@ OC.L10N.register(
"Click here to request it" : "Pro vyžádání klikněte sem",
"Loading…" : "Načítání…",
"Awwhh… credential not found. Maybe it expired" : "Hmmmm… přihlašovací údaje nenalezeny. Možná jejich platnost skončila",
- "Compromise!" : "Kompromitovat!",
+ "Mark as Compromised" : "Označit jako kompromitované",
"Compromised!" : "Kompromitováno!",
- "This password is compromised. You can only remove this warning by changing the password." : "Toto heslo je kompromitováno. Toto varování je možné zrušit pouze změnou hesla.",
+ "This password is compromised. You can only remove this warning by changing the password." : "Toto heslo je kompromitováno. Tohoto varování je možné se zbavit pouze změnou hesla.",
"email" : "e-mail",
"Description" : "Popis",
- "Url" : "URL adresa",
"Custom Search:" : "Uživatelsky určené hledání:",
"Revert to defaults" : "Vrátit zpět na výchozí hodnoty",
"Error while saving field" : "Chyba při ukládání obsahu kolonky",
@@ -328,7 +327,7 @@ OC.L10N.register(
"Your credential \"%s\" expired, click here to update the credential." : "Platnost vašeho pověření „%s“ skončila, pro obnovení klikněte sem",
"Remind me later" : "Připomenout později",
"Ignore" : "Ignorovat",
- "%s shared \"%s\" with you. Click here to accept" : "%s s vámi sdílí „%s“. Přijmete kliknutím",
+ "%s shared \"%s\" with you. Click here to accept" : "%s vám nasdílel(a) „%s“. Přijmete kliknutím sem",
"%s has declined your share request for \"%s\"." : "%s zamítl(a) váš požadavek na sdílení „%s“.",
"%s has accepted your share request for \"%s\"." : "%s přijal(a) váš požadavek na sdílení „%s“.",
"Passman" : "Passman",
@@ -358,10 +357,10 @@ OC.L10N.register(
"Click here to request\n\t\t\t\t\tit" : "Klikněte sem pro\n\t\t\t\t\tžádost",
"Loading&hellip;" : "Načítání&hellip;",
"Awwhh… could not find the credential. Maybe it expired?" : "Hmmmm… pověření nenalezeno. Možná jeho platnost skončila?",
- "Expires:" : "Platnost končí:",
+ "Expires:" : "Platnost skončí:",
"Connection to server lost" : "Připojení k serveru ztraceno",
"Problem loading page, reloading in 5 seconds" : "Problém s načítáním stránky, obnovení za 5 sekund",
- "Saving..." : "Ukládání…",
+ "Saving …" : "Ukládání…",
"Dismiss" : "Zavřít",
"seconds ago" : "před pár sekundami"
},
diff --git a/l10n/cs.json b/l10n/cs.json
index 81597511..564c870c 100644
--- a/l10n/cs.json
+++ b/l10n/cs.json
@@ -6,11 +6,11 @@
"Custom Fields" : "Uživatelsky určené kolonky",
"Please fill in a label." : "Vyplňte štítek.",
"Please fill in a value." : "Vyplňte hodnotu.",
- "Error loading file" : "Chyba načítání souboru",
+ "Error loading file" : "Chyba při načítání souboru",
"An error occurred during decryption" : "Při rozšifrovávání došlo k chybě",
"Credential created!" : "Přihlašovací údaje vytvořeny!",
"Credential deleted" : "Přihlašovací údaj smazán",
- "Credential updated" : "Přihlašovací údaje zaktualizovány",
+ "Credential updated" : "Přihlašovací údaj zaktualizován",
"Credential recovered" : "Přihlašovací údaje obnoveny",
"Credential destroyed" : "Přihlašovací údaje zlikvidovány",
"Error downloading file, you probably have insufficient permissions" : "Chyba při stahování souboru, nejspíš nemáte potřebná oprávnění",
@@ -44,7 +44,7 @@
"Password audit" : "Audit hesel",
"Password settings" : "Nastavení hesla",
"Import credentials" : "Importovat přihlašovací údaje",
- "Export credentials" : "Exportovat pověření",
+ "Export credentials" : "Exportovat přihlašovací údaje",
"Sharing" : "Sdílení",
"Are you sure you want to leave? This will destroy all your credentials" : "Opravdu chcete odejít? Všechna vaše pověření budou ztracena",
"Old password field incorrect!" : "Kolonka původní heslo není vyplněná správně!",
@@ -80,7 +80,7 @@
"There was an error fetching the icon!" : "Při získávání ikony došlo k chybě!",
"Selected icon" : "Vybraná ikona",
"Field label" : "Štítek kolonky",
- "Field value" : "Hodnota kolonky",
+ "Field value" : "Hodnota v kolonce",
"Choose a file" : "Vyberte soubor",
"Text" : "Text",
"File" : "Soubor",
@@ -102,7 +102,7 @@
"Disabled" : "Zakázáno",
"Day(s)" : "Dnů",
"Week(s)" : "Týdny",
- "Month(s)" : "Měsíc(e)",
+ "Month(s)" : "Měsíc(e/ů)",
"Year(s)" : "rok(y)",
"Password generation settings" : "Nastavení vytváření hesel",
"Password length" : "Délka hesla",
@@ -111,7 +111,7 @@
"Use lowercase letters" : "Použít malá písmena",
"Use numbers" : "Použít čísla",
"Use special characters" : "Použít speciální znaky",
- "Avoid ambiguous characters" : "Vynechat nejednoznačné znaky",
+ "Avoid ambiguous characters" : "Vynechat nesnadno od sebe rozlišitelné znaky",
"Require every character type" : "Vyžadovat každý typ znaku",
"Export type" : "Typ exportu",
"Export" : "Export",
@@ -123,10 +123,10 @@
"Old vault password" : "Původní heslo trezoru",
"New vault password" : "Nové heslo k trezoru",
"Repeat new vault password" : "Zopakujte nové heslo trezoru",
- "Please wait your vault is being updated, do not leave this page." : "Čekejte, váš trezor se aktualizuje, neopouštějte tuto stránku.",
+ "Please wait your vault is being updated, do not leave this page." : "Čekejte, váš trezor se aktualizuje – neopouštějte tuto stránku.",
"Processing" : "Zpracování",
"Total progress" : "Celkový průběh",
- "About Passman" : "O Passman",
+ "About Passman" : "O aplikaci Passman",
"Version" : "Verze",
"Donate to support development" : "Přispějte na podporu vývoje",
"Bookmarklet" : "Záložky",
@@ -266,7 +266,7 @@
"An admin then accepts or declines the request" : "Správce pak požadavek buď přijme nebo odmítne",
"After an admin destroys this vault, all credentials in it will be lost" : "Poté, co správce potvrdí likvidaci tohoto trezoru, všechna pověření budou ztracena",
"Reason for requesting deletion (optional):" : "Důvod žádosti o smazání (volitelné):",
- "Request vault destruction" : "Požádat o zničení trezoru",
+ "Request vault destruction" : "Požádat o zlikvidování trezoru",
"Yes, request an admin to destroy this vault" : "Ano, požádat správce o zlikvidování tohoto trezoru",
"Cancel destruction request" : "Zrušit požadavek na likvidaci",
"Vault destruction requested" : "Vyžádáno zlikvidování trezoru",
@@ -291,12 +291,11 @@
"Click here to request it" : "Pro vyžádání klikněte sem",
"Loading…" : "Načítání…",
"Awwhh… credential not found. Maybe it expired" : "Hmmmm… přihlašovací údaje nenalezeny. Možná jejich platnost skončila",
- "Compromise!" : "Kompromitovat!",
+ "Mark as Compromised" : "Označit jako kompromitované",
"Compromised!" : "Kompromitováno!",
- "This password is compromised. You can only remove this warning by changing the password." : "Toto heslo je kompromitováno. Toto varování je možné zrušit pouze změnou hesla.",
+ "This password is compromised. You can only remove this warning by changing the password." : "Toto heslo je kompromitováno. Tohoto varování je možné se zbavit pouze změnou hesla.",
"email" : "e-mail",
"Description" : "Popis",
- "Url" : "URL adresa",
"Custom Search:" : "Uživatelsky určené hledání:",
"Revert to defaults" : "Vrátit zpět na výchozí hodnoty",
"Error while saving field" : "Chyba při ukládání obsahu kolonky",
@@ -326,7 +325,7 @@
"Your credential \"%s\" expired, click here to update the credential." : "Platnost vašeho pověření „%s“ skončila, pro obnovení klikněte sem",
"Remind me later" : "Připomenout později",
"Ignore" : "Ignorovat",
- "%s shared \"%s\" with you. Click here to accept" : "%s s vámi sdílí „%s“. Přijmete kliknutím",
+ "%s shared \"%s\" with you. Click here to accept" : "%s vám nasdílel(a) „%s“. Přijmete kliknutím sem",
"%s has declined your share request for \"%s\"." : "%s zamítl(a) váš požadavek na sdílení „%s“.",
"%s has accepted your share request for \"%s\"." : "%s přijal(a) váš požadavek na sdílení „%s“.",
"Passman" : "Passman",
@@ -356,10 +355,10 @@
"Click here to request\n\t\t\t\t\tit" : "Klikněte sem pro\n\t\t\t\t\tžádost",
"Loading&hellip;" : "Načítání&hellip;",
"Awwhh… could not find the credential. Maybe it expired?" : "Hmmmm… pověření nenalezeno. Možná jeho platnost skončila?",
- "Expires:" : "Platnost končí:",
+ "Expires:" : "Platnost skončí:",
"Connection to server lost" : "Připojení k serveru ztraceno",
"Problem loading page, reloading in 5 seconds" : "Problém s načítáním stránky, obnovení za 5 sekund",
- "Saving..." : "Ukládání…",
+ "Saving …" : "Ukládání…",
"Dismiss" : "Zavřít",
"seconds ago" : "před pár sekundami"
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
diff --git a/l10n/cy_GB.js b/l10n/cy_GB.js
index c033abac..6c1d4db8 100644
--- a/l10n/cy_GB.js
+++ b/l10n/cy_GB.js
@@ -36,7 +36,6 @@ OC.L10N.register(
"Tags" : "Tagiau",
"Loading…" : "Yn llwytho…",
"Description" : "Disgrifiad",
- "Saving..." : "Yn cadw...",
"seconds ago" : "eiliad yn ôl"
},
"nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;");
diff --git a/l10n/cy_GB.json b/l10n/cy_GB.json
index 16e7a1a5..daa8555c 100644
--- a/l10n/cy_GB.json
+++ b/l10n/cy_GB.json
@@ -34,7 +34,6 @@
"Tags" : "Tagiau",
"Loading…" : "Yn llwytho…",
"Description" : "Disgrifiad",
- "Saving..." : "Yn cadw...",
"seconds ago" : "eiliad yn ôl"
},"pluralForm" :"nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;"
} \ No newline at end of file
diff --git a/l10n/da.js b/l10n/da.js
index 7c540f54..bc06a201 100644
--- a/l10n/da.js
+++ b/l10n/da.js
@@ -229,7 +229,6 @@ OC.L10N.register(
"Simple Navigation" : "Simpel Navigation",
"Click here to request it" : "Klik her for at bede om det",
"Loading…" : "Indlæser…",
- "Compromise!" : "Marker kompromis!",
"Compromised!" : "Markeret kompromis!",
"email" : "e-mail",
"Description" : "Beskrivelse",
@@ -260,7 +259,7 @@ OC.L10N.register(
"Expires:" : "Udløber:",
"Connection to server lost" : "Mistede forbindelsen til serveren",
"Problem loading page, reloading in 5 seconds" : "Problem med indlæsning af side, genindlæser om 5 sekunder",
- "Saving..." : "Gemmer...",
+ "Saving …" : "Gemmer…",
"Dismiss" : "Afvis",
"seconds ago" : "sekunder siden"
},
diff --git a/l10n/da.json b/l10n/da.json
index 4325cbb4..52f4c08d 100644
--- a/l10n/da.json
+++ b/l10n/da.json
@@ -227,7 +227,6 @@
"Simple Navigation" : "Simpel Navigation",
"Click here to request it" : "Klik her for at bede om det",
"Loading…" : "Indlæser…",
- "Compromise!" : "Marker kompromis!",
"Compromised!" : "Markeret kompromis!",
"email" : "e-mail",
"Description" : "Beskrivelse",
@@ -258,7 +257,7 @@
"Expires:" : "Udløber:",
"Connection to server lost" : "Mistede forbindelsen til serveren",
"Problem loading page, reloading in 5 seconds" : "Problem med indlæsning af side, genindlæser om 5 sekunder",
- "Saving..." : "Gemmer...",
+ "Saving …" : "Gemmer…",
"Dismiss" : "Afvis",
"seconds ago" : "sekunder siden"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/de.js b/l10n/de.js
index 3e84d767..92169787 100644
--- a/l10n/de.js
+++ b/l10n/de.js
@@ -28,7 +28,7 @@ OC.L10N.register(
"Skipping credential, missing label on line {{line}}" : "Überspringe Anmeldeinformation, fehlende Bezeichnung in Zeile {{line}}",
"Parsed {{num}} credentials, starting to import" : "{{num}} Anmeldeinformationen eingelesen, Import wird gestartet",
"Importing" : "Importieren",
- "Start import" : "Import starten",
+ "Start import" : "Beginne Import",
"Select CSV file" : "CSV-Datei auswählen",
"Parsed {{rows}} lines from CSV file" : "{{rows}} Zeilen der CSV-Datei gelesen",
"Skip first row" : "Erste Zeile überspringen",
@@ -38,8 +38,8 @@ OC.L10N.register(
"Example of imported credential" : " Beispiel einer importierten Anmeldeinformation ",
"Missing an importer? Try it with the generic CSV importer." : "Fehlt ein Importer? Versuche es mit dem generischen CSV-Importer.",
"Go back to importers." : "Zurück zur Importfunktion.",
- "Revision deleted" : "Überarbeitung gelöscht",
- "Revision restored" : "Überarbeitung wiederhergestellt",
+ "Revision deleted" : "Revision gelöscht",
+ "Revision restored" : "Revision wiederhergestellt",
"Save in Passman" : "In Passman speichern ",
"Settings saved" : "Einstellungen gespeichert",
"General settings" : "Allgemeine Einstellungen",
@@ -78,7 +78,7 @@ OC.L10N.register(
"Use this icon" : "Dieses Icon verwenden",
"Delete current icon" : "Das aktuelle Symbol löschen",
"Get icon from page" : "Symbol von der Seite nutzen",
- "This may take a few seconds…" : "Das kann einige Sekunden daueren...",
+ "This may take a few seconds…" : "Das kann einige Sekunden dauern …",
"There was an error fetching the icon!" : "Fehler beim Laden des Symbols!",
"Selected icon" : "Icon auswählen",
"Field label" : "Feldbeschriftung",
@@ -293,12 +293,11 @@ OC.L10N.register(
"Click here to request it" : "Hier klicken um es anzufordern",
"Loading…" : "Lade…",
"Awwhh… credential not found. Maybe it expired" : "Oh… Zugangsdaten nicht gefunden. Vielleicht sind sie abgelaufen ",
- "Compromise!" : "Kompromittieren!",
+ "Mark as Compromised" : "Als kompromittiert markieren",
"Compromised!" : "Kompromittiert!",
"This password is compromised. You can only remove this warning by changing the password." : "Dieses Passwort wurde kompromittiert. Die Warnung kann nur durch eine Änderung des Passwortes entfernt werden.",
"email" : "E-Mail",
"Description" : "Beschreibung",
- "Url" : "URL",
"Custom Search:" : "Benutzerdefinierte Suche:",
"Revert to defaults" : "Zurücksetzen auf Standardwerte",
"Error while saving field" : "Fehler beim Speichern des Feldes",
@@ -361,8 +360,8 @@ OC.L10N.register(
"Expires:" : "Ablaufdatum:",
"Connection to server lost" : "Verbindung zum Server verloren",
"Problem loading page, reloading in 5 seconds" : "Problem beim Laden der Seite, Seite wird in 5 Sekunden nochmals geladen",
- "Saving..." : "Speichere…",
- "Dismiss" : "Ausblenden",
+ "Saving …" : "Speichern …",
+ "Dismiss" : "Verwerfen",
"seconds ago" : "Gerade eben"
},
"nplurals=2; plural=(n != 1);");
diff --git a/l10n/de.json b/l10n/de.json
index 86dd3861..b68f976c 100644
--- a/l10n/de.json
+++ b/l10n/de.json
@@ -26,7 +26,7 @@
"Skipping credential, missing label on line {{line}}" : "Überspringe Anmeldeinformation, fehlende Bezeichnung in Zeile {{line}}",
"Parsed {{num}} credentials, starting to import" : "{{num}} Anmeldeinformationen eingelesen, Import wird gestartet",
"Importing" : "Importieren",
- "Start import" : "Import starten",
+ "Start import" : "Beginne Import",
"Select CSV file" : "CSV-Datei auswählen",
"Parsed {{rows}} lines from CSV file" : "{{rows}} Zeilen der CSV-Datei gelesen",
"Skip first row" : "Erste Zeile überspringen",
@@ -36,8 +36,8 @@
"Example of imported credential" : " Beispiel einer importierten Anmeldeinformation ",
"Missing an importer? Try it with the generic CSV importer." : "Fehlt ein Importer? Versuche es mit dem generischen CSV-Importer.",
"Go back to importers." : "Zurück zur Importfunktion.",
- "Revision deleted" : "Überarbeitung gelöscht",
- "Revision restored" : "Überarbeitung wiederhergestellt",
+ "Revision deleted" : "Revision gelöscht",
+ "Revision restored" : "Revision wiederhergestellt",
"Save in Passman" : "In Passman speichern ",
"Settings saved" : "Einstellungen gespeichert",
"General settings" : "Allgemeine Einstellungen",
@@ -76,7 +76,7 @@
"Use this icon" : "Dieses Icon verwenden",
"Delete current icon" : "Das aktuelle Symbol löschen",
"Get icon from page" : "Symbol von der Seite nutzen",
- "This may take a few seconds…" : "Das kann einige Sekunden daueren...",
+ "This may take a few seconds…" : "Das kann einige Sekunden dauern …",
"There was an error fetching the icon!" : "Fehler beim Laden des Symbols!",
"Selected icon" : "Icon auswählen",
"Field label" : "Feldbeschriftung",
@@ -291,12 +291,11 @@
"Click here to request it" : "Hier klicken um es anzufordern",
"Loading…" : "Lade…",
"Awwhh… credential not found. Maybe it expired" : "Oh… Zugangsdaten nicht gefunden. Vielleicht sind sie abgelaufen ",
- "Compromise!" : "Kompromittieren!",
+ "Mark as Compromised" : "Als kompromittiert markieren",
"Compromised!" : "Kompromittiert!",
"This password is compromised. You can only remove this warning by changing the password." : "Dieses Passwort wurde kompromittiert. Die Warnung kann nur durch eine Änderung des Passwortes entfernt werden.",
"email" : "E-Mail",
"Description" : "Beschreibung",
- "Url" : "URL",
"Custom Search:" : "Benutzerdefinierte Suche:",
"Revert to defaults" : "Zurücksetzen auf Standardwerte",
"Error while saving field" : "Fehler beim Speichern des Feldes",
@@ -359,8 +358,8 @@
"Expires:" : "Ablaufdatum:",
"Connection to server lost" : "Verbindung zum Server verloren",
"Problem loading page, reloading in 5 seconds" : "Problem beim Laden der Seite, Seite wird in 5 Sekunden nochmals geladen",
- "Saving..." : "Speichere…",
- "Dismiss" : "Ausblenden",
+ "Saving …" : "Speichern …",
+ "Dismiss" : "Verwerfen",
"seconds ago" : "Gerade eben"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/l10n/de_DE.js b/l10n/de_DE.js
index 0548cf44..3612f1da 100644
--- a/l10n/de_DE.js
+++ b/l10n/de_DE.js
@@ -78,7 +78,7 @@ OC.L10N.register(
"Use this icon" : "Dieses Icon verwenden",
"Delete current icon" : "Das aktuelle Symbol löschen",
"Get icon from page" : "Symbol von der Seite nutzen",
- "This may take a few seconds…" : "Das kann einige Sekunden daueren...",
+ "This may take a few seconds…" : "Das kann einige Sekunden dauern …",
"There was an error fetching the icon!" : "Fehler beim Laden des Symbols!",
"Selected icon" : "Icon auswählen",
"Field label" : "Beschriftung des Feldes",
@@ -100,7 +100,7 @@ OC.L10N.register(
"Secret" : "Geheimnis",
"Expiration date" : "Ablaufdatum",
"No expiration date set" : "Kein Ablaufdatum gesetzt ",
- "Renew interval" : "Intervall erneuern",
+ "Renew interval" : "Erneuerungsintervall",
"Disabled" : "Deaktiviert",
"Day(s)" : "Tag(e)",
"Week(s)" : "Woche(n)",
@@ -172,7 +172,7 @@ OC.L10N.register(
"Enable link sharing" : "Freigaben über Links aktivieren",
"Share until date" : "Freigabe gültig bis Datum",
"Expire after views" : "Läuft nach dem Anschauen ab",
- "Click \\\"Share\\\" first" : "Erst auf \\\"Teilen\\\" klicken",
+ "Click \\\"Share\\\" first" : "Erst auf \"Teilen\" klicken",
"Show files" : "Dateien anzeigen",
"Details" : "Details",
"Hide details" : "Details ausblenden",
@@ -211,7 +211,7 @@ OC.L10N.register(
"Settings" : "Einstellungen",
"Share credential {{credential}}" : "Anmeldeinformation {{credential}} teilen",
"Unshare" : "Freigabe aufheben",
- "Showing deleted since" : "Anzeigen gelöscht seit",
+ "Showing deleted since" : "Zeige gelöschte seit",
"Beginning" : "Beginn",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "{{number_filtered}} von {{credential_number}} Anmeldeinformationen anzeigen",
"Search for credential…" : "Suche Anmeldeinformationen…",
@@ -251,7 +251,7 @@ OC.L10N.register(
"There are no credentials matching" : "Keine passenden Anmeldedaten",
"Last accessed" : "Letzter Zugriff",
"Never" : "Nie",
- "No vaults found, why not create one?" : "Kein Tresor gefunden, warum kein neues erstellen?",
+ "No vaults found, why not create one?" : "Kein Tresor gefunden, möchten Sie einen erstellen?",
"Password strength must be at least: {{strength}}" : "Mindest erforderliche Passwortstärke: {{strength}}",
"Please give your new vault a name." : "Bitte einen Namen für den neuen Tresor eingeben.",
"Repeat vault password" : "Tresor-Passwort wiederholen",
@@ -293,12 +293,11 @@ OC.L10N.register(
"Click here to request it" : "Hier klicken um es anzufordern",
"Loading…" : "Lade…",
"Awwhh… credential not found. Maybe it expired" : "Oh… Zugangsdaten nicht gefunden. Vielleicht sind sie abgelaufen ",
- "Compromise!" : "Kompromittieren!",
+ "Mark as Compromised" : "Als kompromittiert markieren",
"Compromised!" : "Kompromittiert!",
"This password is compromised. You can only remove this warning by changing the password." : "Dieses Passwort wurde kompromittiert. Die Warnung kann nur durch eine Änderung des Passwortes entfernt werden.",
"email" : "E-Mail",
"Description" : "Beschreibung",
- "Url" : "URL",
"Custom Search:" : "Benutzerdefinierte Suche:",
"Revert to defaults" : "Zurücksetzen auf Standardwerte",
"Error while saving field" : "Fehler beim Speichern des Feldes",
@@ -310,7 +309,7 @@ OC.L10N.register(
"You created %1$s" : "Sie haben %1$s erstellt",
"%1$s has been updated by %2$s" : "%1$s wurde durch %2$s aktualisiert",
"You updated %1$s" : "Sie haben %1$s aktualisiert",
- "%2$s has revised %1$s to the revision of %3$s" : "%2$s hat %1$s auf die Revision %3$s revidiert",
+ "%2$s has revised %1$s to the revision of %3$s" : "%2$s hat %1$s auf die Revision %3$s zurückgesetzt",
"You reverted %1$s back to the revision of %3$s" : "Sie haben %1$s auf die Revision %3$s rückgängig gemacht",
"%3$s has renamed %1$s to %2$s" : "%3$s hat %1$s zu %2$s umbenannt",
"You renamed %1$s to %2$s" : "Sie haben %1$s zu %2$s umbenannt",
@@ -326,7 +325,7 @@ OC.L10N.register(
"%s has been shared with a link" : "%s wurde über einen Link geteilt",
"Passwords" : "Passwörter",
"Your credential \"%s\" expired, click here to update the credential." : "Ihre Anmeldedaten \"%s\" sind abgelaufen, klicken Sie zur Aktualisierung ihrer Anmeldedaten hier.",
- "Remind me later" : "Erinnern Sie mich später",
+ "Remind me later" : "Erinnere mich später",
"Ignore" : "Ignorieren",
"%s shared \"%s\" with you. Click here to accept" : "%s teilt \"%s\" mit Ihnen. Um dies zu akzeptieren, klicken Sie bitte hier",
"%s has declined your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit Ihnen abgelehnt.",
@@ -361,7 +360,7 @@ OC.L10N.register(
"Expires:" : "Ablaufdatum:",
"Connection to server lost" : "Verbindung zum Server verloren",
"Problem loading page, reloading in 5 seconds" : "Problem beim Laden der Seite, Seite wird in 5 Sekunden erneut geladen",
- "Saving..." : "Speichere…",
+ "Saving …" : "Speichere…",
"Dismiss" : "Ausblenden",
"seconds ago" : "Gerade eben"
},
diff --git a/l10n/de_DE.json b/l10n/de_DE.json
index abaf11e9..0e38699d 100644
--- a/l10n/de_DE.json
+++ b/l10n/de_DE.json
@@ -76,7 +76,7 @@
"Use this icon" : "Dieses Icon verwenden",
"Delete current icon" : "Das aktuelle Symbol löschen",
"Get icon from page" : "Symbol von der Seite nutzen",
- "This may take a few seconds…" : "Das kann einige Sekunden daueren...",
+ "This may take a few seconds…" : "Das kann einige Sekunden dauern …",
"There was an error fetching the icon!" : "Fehler beim Laden des Symbols!",
"Selected icon" : "Icon auswählen",
"Field label" : "Beschriftung des Feldes",
@@ -98,7 +98,7 @@
"Secret" : "Geheimnis",
"Expiration date" : "Ablaufdatum",
"No expiration date set" : "Kein Ablaufdatum gesetzt ",
- "Renew interval" : "Intervall erneuern",
+ "Renew interval" : "Erneuerungsintervall",
"Disabled" : "Deaktiviert",
"Day(s)" : "Tag(e)",
"Week(s)" : "Woche(n)",
@@ -170,7 +170,7 @@
"Enable link sharing" : "Freigaben über Links aktivieren",
"Share until date" : "Freigabe gültig bis Datum",
"Expire after views" : "Läuft nach dem Anschauen ab",
- "Click \\\"Share\\\" first" : "Erst auf \\\"Teilen\\\" klicken",
+ "Click \\\"Share\\\" first" : "Erst auf \"Teilen\" klicken",
"Show files" : "Dateien anzeigen",
"Details" : "Details",
"Hide details" : "Details ausblenden",
@@ -209,7 +209,7 @@
"Settings" : "Einstellungen",
"Share credential {{credential}}" : "Anmeldeinformation {{credential}} teilen",
"Unshare" : "Freigabe aufheben",
- "Showing deleted since" : "Anzeigen gelöscht seit",
+ "Showing deleted since" : "Zeige gelöschte seit",
"Beginning" : "Beginn",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "{{number_filtered}} von {{credential_number}} Anmeldeinformationen anzeigen",
"Search for credential…" : "Suche Anmeldeinformationen…",
@@ -249,7 +249,7 @@
"There are no credentials matching" : "Keine passenden Anmeldedaten",
"Last accessed" : "Letzter Zugriff",
"Never" : "Nie",
- "No vaults found, why not create one?" : "Kein Tresor gefunden, warum kein neues erstellen?",
+ "No vaults found, why not create one?" : "Kein Tresor gefunden, möchten Sie einen erstellen?",
"Password strength must be at least: {{strength}}" : "Mindest erforderliche Passwortstärke: {{strength}}",
"Please give your new vault a name." : "Bitte einen Namen für den neuen Tresor eingeben.",
"Repeat vault password" : "Tresor-Passwort wiederholen",
@@ -291,12 +291,11 @@
"Click here to request it" : "Hier klicken um es anzufordern",
"Loading…" : "Lade…",
"Awwhh… credential not found. Maybe it expired" : "Oh… Zugangsdaten nicht gefunden. Vielleicht sind sie abgelaufen ",
- "Compromise!" : "Kompromittieren!",
+ "Mark as Compromised" : "Als kompromittiert markieren",
"Compromised!" : "Kompromittiert!",
"This password is compromised. You can only remove this warning by changing the password." : "Dieses Passwort wurde kompromittiert. Die Warnung kann nur durch eine Änderung des Passwortes entfernt werden.",
"email" : "E-Mail",
"Description" : "Beschreibung",
- "Url" : "URL",
"Custom Search:" : "Benutzerdefinierte Suche:",
"Revert to defaults" : "Zurücksetzen auf Standardwerte",
"Error while saving field" : "Fehler beim Speichern des Feldes",
@@ -308,7 +307,7 @@
"You created %1$s" : "Sie haben %1$s erstellt",
"%1$s has been updated by %2$s" : "%1$s wurde durch %2$s aktualisiert",
"You updated %1$s" : "Sie haben %1$s aktualisiert",
- "%2$s has revised %1$s to the revision of %3$s" : "%2$s hat %1$s auf die Revision %3$s revidiert",
+ "%2$s has revised %1$s to the revision of %3$s" : "%2$s hat %1$s auf die Revision %3$s zurückgesetzt",
"You reverted %1$s back to the revision of %3$s" : "Sie haben %1$s auf die Revision %3$s rückgängig gemacht",
"%3$s has renamed %1$s to %2$s" : "%3$s hat %1$s zu %2$s umbenannt",
"You renamed %1$s to %2$s" : "Sie haben %1$s zu %2$s umbenannt",
@@ -324,7 +323,7 @@
"%s has been shared with a link" : "%s wurde über einen Link geteilt",
"Passwords" : "Passwörter",
"Your credential \"%s\" expired, click here to update the credential." : "Ihre Anmeldedaten \"%s\" sind abgelaufen, klicken Sie zur Aktualisierung ihrer Anmeldedaten hier.",
- "Remind me later" : "Erinnern Sie mich später",
+ "Remind me later" : "Erinnere mich später",
"Ignore" : "Ignorieren",
"%s shared \"%s\" with you. Click here to accept" : "%s teilt \"%s\" mit Ihnen. Um dies zu akzeptieren, klicken Sie bitte hier",
"%s has declined your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit Ihnen abgelehnt.",
@@ -359,7 +358,7 @@
"Expires:" : "Ablaufdatum:",
"Connection to server lost" : "Verbindung zum Server verloren",
"Problem loading page, reloading in 5 seconds" : "Problem beim Laden der Seite, Seite wird in 5 Sekunden erneut geladen",
- "Saving..." : "Speichere…",
+ "Saving …" : "Speichere…",
"Dismiss" : "Ausblenden",
"seconds ago" : "Gerade eben"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/el.js b/l10n/el.js
index 8c8d3a79..40313dd0 100644
--- a/l10n/el.js
+++ b/l10n/el.js
@@ -293,12 +293,11 @@ OC.L10N.register(
"Click here to request it" : "Κάντε κλικ εδώ για να το αιτηθείτε",
"Loading…" : "Γίνεται φόρτωση...",
"Awwhh… credential not found. Maybe it expired" : "Awwhh… τα διαπιστευτήρια δεν βρέθηκαν. Ίσως έληξαν",
- "Compromise!" : "Διακινδυνευμένο!",
+ "Mark as Compromised" : "Επισήμανση ως συμβιβασμένου",
"Compromised!" : "Με κίνδυνο!",
"This password is compromised. You can only remove this warning by changing the password." : "Ο κωδικός είναι διακινδυνεμένος. Μπορείτε να αφαιρέσετε αυτή την προειδοποίηση αλλάζοντας τον κωδικό.",
"email" : "ηλεκτρονικό ταχυδρομείο",
"Description" : "Περιγραφή",
- "Url" : "Url",
"Custom Search:" : "Προσαρμοσμένη Αναζήτηση:",
"Revert to defaults" : "Επαναφορά στις προεπιλογές",
"Error while saving field" : "Σφάλμα κατά την αποθήκευση πεδίου",
@@ -361,7 +360,7 @@ OC.L10N.register(
"Expires:" : "Ληγμένα:",
"Connection to server lost" : "Η σύνδεση στον διακομιστή διακόπηκε",
"Problem loading page, reloading in 5 seconds" : "Πρόβλημα φόρτωσης σελίδας, φόρτωση ξανά σε 5 δευτερόλεπτα",
- "Saving..." : "Γίνεται αποθήκευση...",
+ "Saving …" : "Αποθηκεύεται ...",
"Dismiss" : "Αποδέσμευση",
"seconds ago" : "δευτερόλεπτα πριν"
},
diff --git a/l10n/el.json b/l10n/el.json
index 5c50e97a..6b8a0655 100644
--- a/l10n/el.json
+++ b/l10n/el.json
@@ -291,12 +291,11 @@
"Click here to request it" : "Κάντε κλικ εδώ για να το αιτηθείτε",
"Loading…" : "Γίνεται φόρτωση...",
"Awwhh… credential not found. Maybe it expired" : "Awwhh… τα διαπιστευτήρια δεν βρέθηκαν. Ίσως έληξαν",
- "Compromise!" : "Διακινδυνευμένο!",
+ "Mark as Compromised" : "Επισήμανση ως συμβιβασμένου",
"Compromised!" : "Με κίνδυνο!",
"This password is compromised. You can only remove this warning by changing the password." : "Ο κωδικός είναι διακινδυνεμένος. Μπορείτε να αφαιρέσετε αυτή την προειδοποίηση αλλάζοντας τον κωδικό.",
"email" : "ηλεκτρονικό ταχυδρομείο",
"Description" : "Περιγραφή",
- "Url" : "Url",
"Custom Search:" : "Προσαρμοσμένη Αναζήτηση:",
"Revert to defaults" : "Επαναφορά στις προεπιλογές",
"Error while saving field" : "Σφάλμα κατά την αποθήκευση πεδίου",
@@ -359,7 +358,7 @@
"Expires:" : "Ληγμένα:",
"Connection to server lost" : "Η σύνδεση στον διακομιστή διακόπηκε",
"Problem loading page, reloading in 5 seconds" : "Πρόβλημα φόρτωσης σελίδας, φόρτωση ξανά σε 5 δευτερόλεπτα",
- "Saving..." : "Γίνεται αποθήκευση...",
+ "Saving …" : "Αποθηκεύεται ...",
"Dismiss" : "Αποδέσμευση",
"seconds ago" : "δευτερόλεπτα πριν"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/en_GB.js b/l10n/en_GB.js
index cd81e3d9..e173e134 100644
--- a/l10n/en_GB.js
+++ b/l10n/en_GB.js
@@ -295,7 +295,6 @@ OC.L10N.register(
"This password is compromised. You can only remove this warning by changing the password." : "This password is compromised. You can only remove this warning by changing the password.",
"email" : "email",
"Description" : "Description",
- "Url" : "Url",
"Custom Search:" : "Custom Search:",
"Revert to defaults" : "Revert to defaults",
"Error while saving field" : "Error while saving field",
@@ -357,7 +356,6 @@ OC.L10N.register(
"Expires:" : "Expires:",
"Connection to server lost" : "Connection to server lost",
"Problem loading page, reloading in 5 seconds" : "Problem loading page, reloading in 5 seconds",
- "Saving..." : "Saving...",
"Dismiss" : "Dismiss",
"seconds ago" : "seconds ago"
},
diff --git a/l10n/en_GB.json b/l10n/en_GB.json
index 8c12ada4..04f10517 100644
--- a/l10n/en_GB.json
+++ b/l10n/en_GB.json
@@ -293,7 +293,6 @@
"This password is compromised. You can only remove this warning by changing the password." : "This password is compromised. You can only remove this warning by changing the password.",
"email" : "email",
"Description" : "Description",
- "Url" : "Url",
"Custom Search:" : "Custom Search:",
"Revert to defaults" : "Revert to defaults",
"Error while saving field" : "Error while saving field",
@@ -355,7 +354,6 @@
"Expires:" : "Expires:",
"Connection to server lost" : "Connection to server lost",
"Problem loading page, reloading in 5 seconds" : "Problem loading page, reloading in 5 seconds",
- "Saving..." : "Saving...",
"Dismiss" : "Dismiss",
"seconds ago" : "seconds ago"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/eo.js b/l10n/eo.js
index 8538b518..0f01a168 100644
--- a/l10n/eo.js
+++ b/l10n/eo.js
@@ -79,7 +79,7 @@ OC.L10N.register(
"You deleted %1$s" : "Vi forigis %1$s",
"Passwords" : "Pasvortoj",
"Connection to server lost" : "Konekto al servilo perdita",
- "Saving..." : "Konservado...",
+ "Saving …" : "Konservado...",
"Dismiss" : "Preterpasi",
"seconds ago" : "antaŭ kelkaj sekundoj"
},
diff --git a/l10n/eo.json b/l10n/eo.json
index 4fc75964..ccd58f3c 100644
--- a/l10n/eo.json
+++ b/l10n/eo.json
@@ -77,7 +77,7 @@
"You deleted %1$s" : "Vi forigis %1$s",
"Passwords" : "Pasvortoj",
"Connection to server lost" : "Konekto al servilo perdita",
- "Saving..." : "Konservado...",
+ "Saving …" : "Konservado...",
"Dismiss" : "Preterpasi",
"seconds ago" : "antaŭ kelkaj sekundoj"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/es.js b/l10n/es.js
index 34b7692f..25524db9 100644
--- a/l10n/es.js
+++ b/l10n/es.js
@@ -293,12 +293,11 @@ OC.L10N.register(
"Click here to request it" : "Haz clic aquí para solicitarlo",
"Loading…" : "Cargando...",
"Awwhh… credential not found. Maybe it expired" : "Ooooh... No se ha encontrado la contraseña. Quizás haya caducado",
- "Compromise!" : "¡Peligro!",
+ "Mark as Compromised" : "Marcar como Comprometida",
"Compromised!" : "¡Publicada!",
"This password is compromised. You can only remove this warning by changing the password." : "Esta contraseña ha sido publicada. Solo puedes eliminar esta advertencia cambiando la contraseña actual.",
"email" : "correo",
"Description" : "Descripción",
- "Url" : "URL",
"Custom Search:" : "Búsqueda personalizada:",
"Revert to defaults" : "Volver a los valores por defecto",
"Error while saving field" : "Error mientras se guardaba el campo",
@@ -361,7 +360,7 @@ OC.L10N.register(
"Expires:" : "Caduca:",
"Connection to server lost" : "Se ha perdido la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando...",
+ "Saving …" : "Guardando…",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},
diff --git a/l10n/es.json b/l10n/es.json
index ec00d21b..cb2e4c4a 100644
--- a/l10n/es.json
+++ b/l10n/es.json
@@ -291,12 +291,11 @@
"Click here to request it" : "Haz clic aquí para solicitarlo",
"Loading…" : "Cargando...",
"Awwhh… credential not found. Maybe it expired" : "Ooooh... No se ha encontrado la contraseña. Quizás haya caducado",
- "Compromise!" : "¡Peligro!",
+ "Mark as Compromised" : "Marcar como Comprometida",
"Compromised!" : "¡Publicada!",
"This password is compromised. You can only remove this warning by changing the password." : "Esta contraseña ha sido publicada. Solo puedes eliminar esta advertencia cambiando la contraseña actual.",
"email" : "correo",
"Description" : "Descripción",
- "Url" : "URL",
"Custom Search:" : "Búsqueda personalizada:",
"Revert to defaults" : "Volver a los valores por defecto",
"Error while saving field" : "Error mientras se guardaba el campo",
@@ -359,7 +358,7 @@
"Expires:" : "Caduca:",
"Connection to server lost" : "Se ha perdido la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando...",
+ "Saving …" : "Guardando…",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/es_419.js b/l10n/es_419.js
index 2b4803bf..6172cde8 100644
--- a/l10n/es_419.js
+++ b/l10n/es_419.js
@@ -316,7 +316,6 @@ OC.L10N.register(
"Click here to request\n\t\t\t\t\tit" : "Haz click aquí para solicitarlo ",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},
diff --git a/l10n/es_419.json b/l10n/es_419.json
index 0539074e..ba7652f3 100644
--- a/l10n/es_419.json
+++ b/l10n/es_419.json
@@ -314,7 +314,6 @@
"Click here to request\n\t\t\t\t\tit" : "Haz click aquí para solicitarlo ",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/es_AR.js b/l10n/es_AR.js
index 9d8d58d2..81f5c533 100644
--- a/l10n/es_AR.js
+++ b/l10n/es_AR.js
@@ -283,7 +283,6 @@ OC.L10N.register(
"Reason" : "Razón",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "segundos"
},
diff --git a/l10n/es_AR.json b/l10n/es_AR.json
index 8e4a128a..f2d69354 100644
--- a/l10n/es_AR.json
+++ b/l10n/es_AR.json
@@ -281,7 +281,6 @@
"Reason" : "Razón",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "segundos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/es_CL.js b/l10n/es_CL.js
index 2f4d10f5..71142956 100644
--- a/l10n/es_CL.js
+++ b/l10n/es_CL.js
@@ -318,7 +318,6 @@ OC.L10N.register(
"Loading&hellip;" : "Cargando&hellip;",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},
diff --git a/l10n/es_CL.json b/l10n/es_CL.json
index e4bbb9c8..39390670 100644
--- a/l10n/es_CL.json
+++ b/l10n/es_CL.json
@@ -316,7 +316,6 @@
"Loading&hellip;" : "Cargando&hellip;",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/es_CO.js b/l10n/es_CO.js
index 2f4d10f5..71142956 100644
--- a/l10n/es_CO.js
+++ b/l10n/es_CO.js
@@ -318,7 +318,6 @@ OC.L10N.register(
"Loading&hellip;" : "Cargando&hellip;",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},
diff --git a/l10n/es_CO.json b/l10n/es_CO.json
index e4bbb9c8..39390670 100644
--- a/l10n/es_CO.json
+++ b/l10n/es_CO.json
@@ -316,7 +316,6 @@
"Loading&hellip;" : "Cargando&hellip;",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/es_CR.js b/l10n/es_CR.js
index 2f4d10f5..71142956 100644
--- a/l10n/es_CR.js
+++ b/l10n/es_CR.js
@@ -318,7 +318,6 @@ OC.L10N.register(
"Loading&hellip;" : "Cargando&hellip;",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},
diff --git a/l10n/es_CR.json b/l10n/es_CR.json
index e4bbb9c8..39390670 100644
--- a/l10n/es_CR.json
+++ b/l10n/es_CR.json
@@ -316,7 +316,6 @@
"Loading&hellip;" : "Cargando&hellip;",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/es_DO.js b/l10n/es_DO.js
index 2f4d10f5..71142956 100644
--- a/l10n/es_DO.js
+++ b/l10n/es_DO.js
@@ -318,7 +318,6 @@ OC.L10N.register(
"Loading&hellip;" : "Cargando&hellip;",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},
diff --git a/l10n/es_DO.json b/l10n/es_DO.json
index e4bbb9c8..39390670 100644
--- a/l10n/es_DO.json
+++ b/l10n/es_DO.json
@@ -316,7 +316,6 @@
"Loading&hellip;" : "Cargando&hellip;",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/es_EC.js b/l10n/es_EC.js
index 2f4d10f5..71142956 100644
--- a/l10n/es_EC.js
+++ b/l10n/es_EC.js
@@ -318,7 +318,6 @@ OC.L10N.register(
"Loading&hellip;" : "Cargando&hellip;",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},
diff --git a/l10n/es_EC.json b/l10n/es_EC.json
index e4bbb9c8..39390670 100644
--- a/l10n/es_EC.json
+++ b/l10n/es_EC.json
@@ -316,7 +316,6 @@
"Loading&hellip;" : "Cargando&hellip;",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/es_GT.js b/l10n/es_GT.js
index 2f4d10f5..71142956 100644
--- a/l10n/es_GT.js
+++ b/l10n/es_GT.js
@@ -318,7 +318,6 @@ OC.L10N.register(
"Loading&hellip;" : "Cargando&hellip;",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},
diff --git a/l10n/es_GT.json b/l10n/es_GT.json
index e4bbb9c8..39390670 100644
--- a/l10n/es_GT.json
+++ b/l10n/es_GT.json
@@ -316,7 +316,6 @@
"Loading&hellip;" : "Cargando&hellip;",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/es_HN.js b/l10n/es_HN.js
index 2b4803bf..6172cde8 100644
--- a/l10n/es_HN.js
+++ b/l10n/es_HN.js
@@ -316,7 +316,6 @@ OC.L10N.register(
"Click here to request\n\t\t\t\t\tit" : "Haz click aquí para solicitarlo ",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},
diff --git a/l10n/es_HN.json b/l10n/es_HN.json
index 0539074e..ba7652f3 100644
--- a/l10n/es_HN.json
+++ b/l10n/es_HN.json
@@ -314,7 +314,6 @@
"Click here to request\n\t\t\t\t\tit" : "Haz click aquí para solicitarlo ",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/es_MX.js b/l10n/es_MX.js
index e8381d36..498d7140 100644
--- a/l10n/es_MX.js
+++ b/l10n/es_MX.js
@@ -320,7 +320,6 @@ OC.L10N.register(
"Loading&hellip;" : "Cargando&hellip;",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},
diff --git a/l10n/es_MX.json b/l10n/es_MX.json
index afadb95a..00a08c34 100644
--- a/l10n/es_MX.json
+++ b/l10n/es_MX.json
@@ -318,7 +318,6 @@
"Loading&hellip;" : "Cargando&hellip;",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/es_NI.js b/l10n/es_NI.js
index 2b4803bf..6172cde8 100644
--- a/l10n/es_NI.js
+++ b/l10n/es_NI.js
@@ -316,7 +316,6 @@ OC.L10N.register(
"Click here to request\n\t\t\t\t\tit" : "Haz click aquí para solicitarlo ",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},
diff --git a/l10n/es_NI.json b/l10n/es_NI.json
index 0539074e..ba7652f3 100644
--- a/l10n/es_NI.json
+++ b/l10n/es_NI.json
@@ -314,7 +314,6 @@
"Click here to request\n\t\t\t\t\tit" : "Haz click aquí para solicitarlo ",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/es_PA.js b/l10n/es_PA.js
index 2b4803bf..6172cde8 100644
--- a/l10n/es_PA.js
+++ b/l10n/es_PA.js
@@ -316,7 +316,6 @@ OC.L10N.register(
"Click here to request\n\t\t\t\t\tit" : "Haz click aquí para solicitarlo ",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},
diff --git a/l10n/es_PA.json b/l10n/es_PA.json
index 0539074e..ba7652f3 100644
--- a/l10n/es_PA.json
+++ b/l10n/es_PA.json
@@ -314,7 +314,6 @@
"Click here to request\n\t\t\t\t\tit" : "Haz click aquí para solicitarlo ",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/es_PE.js b/l10n/es_PE.js
index 2b4803bf..6172cde8 100644
--- a/l10n/es_PE.js
+++ b/l10n/es_PE.js
@@ -316,7 +316,6 @@ OC.L10N.register(
"Click here to request\n\t\t\t\t\tit" : "Haz click aquí para solicitarlo ",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},
diff --git a/l10n/es_PE.json b/l10n/es_PE.json
index 0539074e..ba7652f3 100644
--- a/l10n/es_PE.json
+++ b/l10n/es_PE.json
@@ -314,7 +314,6 @@
"Click here to request\n\t\t\t\t\tit" : "Haz click aquí para solicitarlo ",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/es_PR.js b/l10n/es_PR.js
index 2b4803bf..6172cde8 100644
--- a/l10n/es_PR.js
+++ b/l10n/es_PR.js
@@ -316,7 +316,6 @@ OC.L10N.register(
"Click here to request\n\t\t\t\t\tit" : "Haz click aquí para solicitarlo ",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},
diff --git a/l10n/es_PR.json b/l10n/es_PR.json
index 0539074e..ba7652f3 100644
--- a/l10n/es_PR.json
+++ b/l10n/es_PR.json
@@ -314,7 +314,6 @@
"Click here to request\n\t\t\t\t\tit" : "Haz click aquí para solicitarlo ",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/es_PY.js b/l10n/es_PY.js
index 2b4803bf..6172cde8 100644
--- a/l10n/es_PY.js
+++ b/l10n/es_PY.js
@@ -316,7 +316,6 @@ OC.L10N.register(
"Click here to request\n\t\t\t\t\tit" : "Haz click aquí para solicitarlo ",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},
diff --git a/l10n/es_PY.json b/l10n/es_PY.json
index 0539074e..ba7652f3 100644
--- a/l10n/es_PY.json
+++ b/l10n/es_PY.json
@@ -314,7 +314,6 @@
"Click here to request\n\t\t\t\t\tit" : "Haz click aquí para solicitarlo ",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/es_SV.js b/l10n/es_SV.js
index 2f4d10f5..71142956 100644
--- a/l10n/es_SV.js
+++ b/l10n/es_SV.js
@@ -318,7 +318,6 @@ OC.L10N.register(
"Loading&hellip;" : "Cargando&hellip;",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},
diff --git a/l10n/es_SV.json b/l10n/es_SV.json
index e4bbb9c8..39390670 100644
--- a/l10n/es_SV.json
+++ b/l10n/es_SV.json
@@ -316,7 +316,6 @@
"Loading&hellip;" : "Cargando&hellip;",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/es_UY.js b/l10n/es_UY.js
index 2b4803bf..6172cde8 100644
--- a/l10n/es_UY.js
+++ b/l10n/es_UY.js
@@ -316,7 +316,6 @@ OC.L10N.register(
"Click here to request\n\t\t\t\t\tit" : "Haz click aquí para solicitarlo ",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},
diff --git a/l10n/es_UY.json b/l10n/es_UY.json
index 0539074e..ba7652f3 100644
--- a/l10n/es_UY.json
+++ b/l10n/es_UY.json
@@ -314,7 +314,6 @@
"Click here to request\n\t\t\t\t\tit" : "Haz click aquí para solicitarlo ",
"Connection to server lost" : "Se perdió la conexión al servidor",
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
- "Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
"seconds ago" : "hace segundos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/et_EE.js b/l10n/et_EE.js
index 1959406b..afcc1c29 100644
--- a/l10n/et_EE.js
+++ b/l10n/et_EE.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"Please fill in a value." : "Palun sisesta väärtus.",
"Done" : "Valmis",
"Settings saved" : "Seaded salvestatud",
+ "Password settings" : "Parooli seaded",
"Sharing" : "Jagamine",
"Share with users and groups" : "Jaga kasutajate ja gruppidega",
"Share link" : "Jaga link",
@@ -14,27 +15,40 @@ OC.L10N.register(
"Good" : "Hea",
"Copy to clipboard" : "Kopeeri lõikepuhvrisse",
"Username" : "Kasutajanimi",
+ "Delete current icon" : "Kustuta praegune ikoon",
"File" : "Fail",
"Add" : "Lisa",
"Type" : "Tüüp",
"Actions" : "Tegevused",
+ "Empty" : "Tühi",
"Filename" : "Faili nimi",
+ "Upload date" : "Üleslaadimise kuupäev",
"Size" : "Suurus",
+ "Issuer" : "Väljastaja",
"Secret" : "Salajane",
"Expiration date" : "Aegumise kuupäev",
"No expiration date set" : "Aegumise kuupäeva pole määratud",
"Disabled" : "Keelatud",
+ "Use numbers" : "Kasuta arve",
"Export" : "Ekspordi",
+ "Change" : "Muuda",
+ "Processing" : "Töötlemine",
"Version" : "Versioon",
"Import" : "Impordi",
"Public key" : "Avalik võti",
"Uploading" : "Üleslaadimine",
"User" : "Kasutaja",
"Read" : "Lugemine",
+ "Write" : "Kirjuta",
"Files" : "Failid",
"Pending" : "Ootel",
+ "Show files" : "Näita faile",
"Details" : "Üksikasjad",
+ "Hide details" : "Peida üksikasjad",
+ "Pattern" : "Muster",
"by" : "lisas",
+ "Label" : "Silt",
+ "Delete revision" : "Kustuta versioon",
"Save" : "Salvesta",
"Cancel" : "Loobu",
"Settings" : "Seaded",
@@ -62,9 +76,9 @@ OC.L10N.register(
"You created %1$s" : "Sa tekitasid %1$s",
"You deleted %1$s" : "Sa kustutasid %1$s",
"Passwords" : "Paroolid",
+ "Ignore" : "Ignoreeri",
"Connection to server lost" : "Ühendus serveriga katkes",
"Problem loading page, reloading in 5 seconds" : "Tõrge lehe laadimisel, ümberlaadimine 5 sekundi pärast",
- "Saving..." : "Salvestamine...",
"Dismiss" : "Jäta vahele",
"seconds ago" : "sekundit tagasi"
},
diff --git a/l10n/et_EE.json b/l10n/et_EE.json
index 4c7b83f4..85f4df3c 100644
--- a/l10n/et_EE.json
+++ b/l10n/et_EE.json
@@ -5,6 +5,7 @@
"Please fill in a value." : "Palun sisesta väärtus.",
"Done" : "Valmis",
"Settings saved" : "Seaded salvestatud",
+ "Password settings" : "Parooli seaded",
"Sharing" : "Jagamine",
"Share with users and groups" : "Jaga kasutajate ja gruppidega",
"Share link" : "Jaga link",
@@ -12,27 +13,40 @@
"Good" : "Hea",
"Copy to clipboard" : "Kopeeri lõikepuhvrisse",
"Username" : "Kasutajanimi",
+ "Delete current icon" : "Kustuta praegune ikoon",
"File" : "Fail",
"Add" : "Lisa",
"Type" : "Tüüp",
"Actions" : "Tegevused",
+ "Empty" : "Tühi",
"Filename" : "Faili nimi",
+ "Upload date" : "Üleslaadimise kuupäev",
"Size" : "Suurus",
+ "Issuer" : "Väljastaja",
"Secret" : "Salajane",
"Expiration date" : "Aegumise kuupäev",
"No expiration date set" : "Aegumise kuupäeva pole määratud",
"Disabled" : "Keelatud",
+ "Use numbers" : "Kasuta arve",
"Export" : "Ekspordi",
+ "Change" : "Muuda",
+ "Processing" : "Töötlemine",
"Version" : "Versioon",
"Import" : "Impordi",
"Public key" : "Avalik võti",
"Uploading" : "Üleslaadimine",
"User" : "Kasutaja",
"Read" : "Lugemine",
+ "Write" : "Kirjuta",
"Files" : "Failid",
"Pending" : "Ootel",
+ "Show files" : "Näita faile",
"Details" : "Üksikasjad",
+ "Hide details" : "Peida üksikasjad",
+ "Pattern" : "Muster",
"by" : "lisas",
+ "Label" : "Silt",
+ "Delete revision" : "Kustuta versioon",
"Save" : "Salvesta",
"Cancel" : "Loobu",
"Settings" : "Seaded",
@@ -60,9 +74,9 @@
"You created %1$s" : "Sa tekitasid %1$s",
"You deleted %1$s" : "Sa kustutasid %1$s",
"Passwords" : "Paroolid",
+ "Ignore" : "Ignoreeri",
"Connection to server lost" : "Ühendus serveriga katkes",
"Problem loading page, reloading in 5 seconds" : "Tõrge lehe laadimisel, ümberlaadimine 5 sekundi pärast",
- "Saving..." : "Salvestamine...",
"Dismiss" : "Jäta vahele",
"seconds ago" : "sekundit tagasi"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/eu.js b/l10n/eu.js
index 1281c7ec..9114af4f 100644
--- a/l10n/eu.js
+++ b/l10n/eu.js
@@ -261,7 +261,6 @@ OC.L10N.register(
"Awwhh… credential not found. Maybe it expired" : "Ooohh... ez da kredentziala aurkitu. Agian iraungitu da ",
"email" : "posta elektronikoa",
"Description" : "Deskribapena",
- "Url" : "Url",
"Custom Search:" : "Bilaketa pertsonalizatua:",
"Revert to defaults" : "Berezarri lehenetsitakoak",
"Error while saving field" : "Errorea eremua gordetzean",
@@ -302,6 +301,7 @@ OC.L10N.register(
"Disable JavaScript debugger" : "Desgaitu JavaScript araztailea",
"Allow users on this server to share passwords with a link" : "Baimendu zerbitzari honetako erabiltzaileek pasahitzak partekatu dezaten esteka batekin",
"Allow users on this server to share passwords with other users" : "Baimendu zerbitzari honetako erabiltzaileek beste erabiltzaileekin pasahitzak partekatzea",
+ "Move credentials from one account to another" : "Mugitu kontu baten kredentzialak beste batera",
"Source account" : "Iturburuko kontua",
"Destination account" : "Helburuko kontua",
"Credentials moved!" : "Kredentzialak mugituta!",
@@ -314,7 +314,7 @@ OC.L10N.register(
"Expires:" : "Iraungitzea:",
"Connection to server lost" : "Zerbitzariarekiko konexioa eten da",
"Problem loading page, reloading in 5 seconds" : "Arazoa orria kargatzerakoan, 5 segundotan birkargatzen",
- "Saving..." : "Gordetzen...",
+ "Saving …" : "Gordetzen …",
"Dismiss" : "Baztertu",
"seconds ago" : "duela segundo batzuk"
},
diff --git a/l10n/eu.json b/l10n/eu.json
index e6cefd72..84f56349 100644
--- a/l10n/eu.json
+++ b/l10n/eu.json
@@ -259,7 +259,6 @@
"Awwhh… credential not found. Maybe it expired" : "Ooohh... ez da kredentziala aurkitu. Agian iraungitu da ",
"email" : "posta elektronikoa",
"Description" : "Deskribapena",
- "Url" : "Url",
"Custom Search:" : "Bilaketa pertsonalizatua:",
"Revert to defaults" : "Berezarri lehenetsitakoak",
"Error while saving field" : "Errorea eremua gordetzean",
@@ -300,6 +299,7 @@
"Disable JavaScript debugger" : "Desgaitu JavaScript araztailea",
"Allow users on this server to share passwords with a link" : "Baimendu zerbitzari honetako erabiltzaileek pasahitzak partekatu dezaten esteka batekin",
"Allow users on this server to share passwords with other users" : "Baimendu zerbitzari honetako erabiltzaileek beste erabiltzaileekin pasahitzak partekatzea",
+ "Move credentials from one account to another" : "Mugitu kontu baten kredentzialak beste batera",
"Source account" : "Iturburuko kontua",
"Destination account" : "Helburuko kontua",
"Credentials moved!" : "Kredentzialak mugituta!",
@@ -312,7 +312,7 @@
"Expires:" : "Iraungitzea:",
"Connection to server lost" : "Zerbitzariarekiko konexioa eten da",
"Problem loading page, reloading in 5 seconds" : "Arazoa orria kargatzerakoan, 5 segundotan birkargatzen",
- "Saving..." : "Gordetzen...",
+ "Saving …" : "Gordetzen …",
"Dismiss" : "Baztertu",
"seconds ago" : "duela segundo batzuk"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/fa.js b/l10n/fa.js
index 25abeca8..3e59f6d8 100644
--- a/l10n/fa.js
+++ b/l10n/fa.js
@@ -293,12 +293,10 @@ OC.L10N.register(
"Click here to request it" : "به درخواست آن را در اینجا کلیک کنید",
"Loading…" : "بار کردن…",
"Awwhh… credential not found. Maybe it expired" : "Awwhh ... اعتبار یافت نشد. شاید منقضی شده باشد",
- "Compromise!" : "به خطر افتادن!",
"Compromised!" : "در معرض خطر!",
"This password is compromised. You can only remove this warning by changing the password." : "این رمز عبور به خطر افتاده است. فقط با تغییر رمز عبور می توانید این هشدار را حذف کنید.",
"email" : "ایمیل",
"Description" : "توضیحات",
- "Url" : "آدرس",
"Custom Search:" : "جستجوی سفارشی:",
"Revert to defaults" : "به پیش فرض برگردید",
"Error while saving field" : "هنگام ذخیره فیلد خطایی رخ داد",
@@ -361,7 +359,6 @@ OC.L10N.register(
"Expires:" : "منقضی می شود:",
"Connection to server lost" : "اتصال به سرور از دست رفته است",
"Problem loading page, reloading in 5 seconds" : "صفحه بارگیری مشکل ، بارگیری مجدد در 5 ثانیه",
- "Saving..." : "در حال ذخیره سازی...",
"Dismiss" : "پنهان کن",
"seconds ago" : "ثانیه‌هایی پیش"
},
diff --git a/l10n/fa.json b/l10n/fa.json
index 47a727a2..740a5aa0 100644
--- a/l10n/fa.json
+++ b/l10n/fa.json
@@ -291,12 +291,10 @@
"Click here to request it" : "به درخواست آن را در اینجا کلیک کنید",
"Loading…" : "بار کردن…",
"Awwhh… credential not found. Maybe it expired" : "Awwhh ... اعتبار یافت نشد. شاید منقضی شده باشد",
- "Compromise!" : "به خطر افتادن!",
"Compromised!" : "در معرض خطر!",
"This password is compromised. You can only remove this warning by changing the password." : "این رمز عبور به خطر افتاده است. فقط با تغییر رمز عبور می توانید این هشدار را حذف کنید.",
"email" : "ایمیل",
"Description" : "توضیحات",
- "Url" : "آدرس",
"Custom Search:" : "جستجوی سفارشی:",
"Revert to defaults" : "به پیش فرض برگردید",
"Error while saving field" : "هنگام ذخیره فیلد خطایی رخ داد",
@@ -359,7 +357,6 @@
"Expires:" : "منقضی می شود:",
"Connection to server lost" : "اتصال به سرور از دست رفته است",
"Problem loading page, reloading in 5 seconds" : "صفحه بارگیری مشکل ، بارگیری مجدد در 5 ثانیه",
- "Saving..." : "در حال ذخیره سازی...",
"Dismiss" : "پنهان کن",
"seconds ago" : "ثانیه‌هایی پیش"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
diff --git a/l10n/fi.js b/l10n/fi.js
index ffc520b9..a501dffa 100644
--- a/l10n/fi.js
+++ b/l10n/fi.js
@@ -14,18 +14,27 @@ OC.L10N.register(
"Credential updated" : "Tilitieto päivitetty",
"Credential recovered" : "Tilitieto palautettu",
"Credential destroyed" : "Tilitieto tuhottu",
+ "Error downloading file, you probably have insufficient permissions" : "Virhe tiedostoa ladatessa. Sinulla ei mitä luultavimmin ole riittäviä oikeuksia",
"Invalid QR code" : "Virheellinen QR-koodi",
"Starting export" : "Aloitetaan vienti",
+ "Decrypting credentials" : "Puretaan tunnisteiden salausta",
"Done" : "Valmis",
+ "File read." : "Tiedosto luettu.",
+ "Proceed with the following steps to import your file" : "Seuraa seuraavia ohjeita tuodaksesi tiedostosta.",
"Adding {{credential}}" : "Lisätään {{credential}}",
"Added {{credential}}" : "Lisätty {{credential}}",
+ "Parsed {{num}} credentials, starting to import" : "Käytiin läpi {{num}} tunnistetta, aloitetaan tuonti",
"Importing" : "Tuodaan",
"Start import" : "Aloita tuonti",
"Select CSV file" : "Valitse CSV-tiedosto",
+ "Parsed {{rows}} lines from CSV file" : "Käytiin läpi {{rows}} riviä CSV-tiedostosta",
"Skip first row" : "Ohita ensimmäinen rivi",
"You need to assign the label field before you can start the import." : "Sinun tulee määritellä nimikekenttä ennen tuonnin aloittamista.",
"The first 5 lines of the CSV are shown." : "CSV:n ensimmäiset viisi riviä näytetään.",
"Assign the proper fields to each column." : "Määrittele sopivat kentät kullekin sarakkeelle.",
+ "Example of imported credential" : "Esimerkki tuodusta tunnisteesta",
+ "Missing an importer? Try it with the generic CSV importer." : "Puuttuuko tuojaohjelma? Kokeile yleistä CSV-tuojaa.",
+ "Go back to importers." : "Takaisin tuojiin",
"Save in Passman" : "Tallenna Passmaniin",
"Settings saved" : "Asetukset tallennettu",
"General settings" : "Yleiset asetukset",
@@ -33,6 +42,7 @@ OC.L10N.register(
"Import credentials" : "Tuo tilitetioja",
"Export credentials" : "Vie tilitietoja",
"Sharing" : "Jakaminen",
+ "Old password field incorrect!" : "Vanha salasana on väärä!",
"New password does not match!" : "Uusi salasana ei täsmää!",
"Please log in with your new vault password" : "Kirjaudu sisään uudella holvin salasanalla",
"Share with users and groups" : "Jaa käyttäjien ja ryhmien kanssa",
@@ -49,6 +59,7 @@ OC.L10N.register(
"Generate password" : "Luo salasana",
"Copy password to clipboard" : "Kopioi salasana leikepöydälle",
"Password copied to clipboard!" : "Salasana kopioitu leikepöydälle!",
+ "Complete" : "Valmis",
"Username" : "Käyttäjätunnus",
"Repeat password" : "Toista salasana",
"Add tag" : "Lisää tunniste",
@@ -56,6 +67,7 @@ OC.L10N.register(
"Search icons" : "Etsi kuvakkeita",
"Upload a custom icon:" : "Lähetä mukautettu kuvake:",
"Use this icon" : "Käytä tätä kuvaketta",
+ "This may take a few seconds…" : "Tämä saattaa kestää muutaman sekunnin",
"Selected icon" : "Valittu kuvake",
"Field label" : "Kentän nimike",
"Field value" : "Kentän arvo",
@@ -192,6 +204,9 @@ OC.L10N.register(
"Show All" : "Näytä kaikki",
"Tags" : "Tunnisteet",
"Search Tags" : "Etsi tunneisteita",
+ "Good Strength" : "Hyvä vahvuus",
+ "Medium Strength" : "Keskinkertainen vahvuus",
+ "Bad Strength" : "Heikko vahvuus",
"Expired" : "Vanhentunut",
"Someone has shared a credential with you." : "Joku on jakanut tilitiedot kanssasi.",
"Loading…" : "Ladataan…",
@@ -225,7 +240,7 @@ OC.L10N.register(
"Expires:" : "Vanhenee:",
"Connection to server lost" : "Yhteys palvelimelle menetetty",
"Problem loading page, reloading in 5 seconds" : "Ongelma sivun lataamisessa, päivitetään 5 sekunnin kuluttua",
- "Saving..." : "Tallennetaan...",
+ "Saving …" : "Tallennetaan…",
"Dismiss" : "Hylkää",
"seconds ago" : "sekuntia sitten"
},
diff --git a/l10n/fi.json b/l10n/fi.json
index db259ef4..cc1ceb41 100644
--- a/l10n/fi.json
+++ b/l10n/fi.json
@@ -12,18 +12,27 @@
"Credential updated" : "Tilitieto päivitetty",
"Credential recovered" : "Tilitieto palautettu",
"Credential destroyed" : "Tilitieto tuhottu",
+ "Error downloading file, you probably have insufficient permissions" : "Virhe tiedostoa ladatessa. Sinulla ei mitä luultavimmin ole riittäviä oikeuksia",
"Invalid QR code" : "Virheellinen QR-koodi",
"Starting export" : "Aloitetaan vienti",
+ "Decrypting credentials" : "Puretaan tunnisteiden salausta",
"Done" : "Valmis",
+ "File read." : "Tiedosto luettu.",
+ "Proceed with the following steps to import your file" : "Seuraa seuraavia ohjeita tuodaksesi tiedostosta.",
"Adding {{credential}}" : "Lisätään {{credential}}",
"Added {{credential}}" : "Lisätty {{credential}}",
+ "Parsed {{num}} credentials, starting to import" : "Käytiin läpi {{num}} tunnistetta, aloitetaan tuonti",
"Importing" : "Tuodaan",
"Start import" : "Aloita tuonti",
"Select CSV file" : "Valitse CSV-tiedosto",
+ "Parsed {{rows}} lines from CSV file" : "Käytiin läpi {{rows}} riviä CSV-tiedostosta",
"Skip first row" : "Ohita ensimmäinen rivi",
"You need to assign the label field before you can start the import." : "Sinun tulee määritellä nimikekenttä ennen tuonnin aloittamista.",
"The first 5 lines of the CSV are shown." : "CSV:n ensimmäiset viisi riviä näytetään.",
"Assign the proper fields to each column." : "Määrittele sopivat kentät kullekin sarakkeelle.",
+ "Example of imported credential" : "Esimerkki tuodusta tunnisteesta",
+ "Missing an importer? Try it with the generic CSV importer." : "Puuttuuko tuojaohjelma? Kokeile yleistä CSV-tuojaa.",
+ "Go back to importers." : "Takaisin tuojiin",
"Save in Passman" : "Tallenna Passmaniin",
"Settings saved" : "Asetukset tallennettu",
"General settings" : "Yleiset asetukset",
@@ -31,6 +40,7 @@
"Import credentials" : "Tuo tilitetioja",
"Export credentials" : "Vie tilitietoja",
"Sharing" : "Jakaminen",
+ "Old password field incorrect!" : "Vanha salasana on väärä!",
"New password does not match!" : "Uusi salasana ei täsmää!",
"Please log in with your new vault password" : "Kirjaudu sisään uudella holvin salasanalla",
"Share with users and groups" : "Jaa käyttäjien ja ryhmien kanssa",
@@ -47,6 +57,7 @@
"Generate password" : "Luo salasana",
"Copy password to clipboard" : "Kopioi salasana leikepöydälle",
"Password copied to clipboard!" : "Salasana kopioitu leikepöydälle!",
+ "Complete" : "Valmis",
"Username" : "Käyttäjätunnus",
"Repeat password" : "Toista salasana",
"Add tag" : "Lisää tunniste",
@@ -54,6 +65,7 @@
"Search icons" : "Etsi kuvakkeita",
"Upload a custom icon:" : "Lähetä mukautettu kuvake:",
"Use this icon" : "Käytä tätä kuvaketta",
+ "This may take a few seconds…" : "Tämä saattaa kestää muutaman sekunnin",
"Selected icon" : "Valittu kuvake",
"Field label" : "Kentän nimike",
"Field value" : "Kentän arvo",
@@ -190,6 +202,9 @@
"Show All" : "Näytä kaikki",
"Tags" : "Tunnisteet",
"Search Tags" : "Etsi tunneisteita",
+ "Good Strength" : "Hyvä vahvuus",
+ "Medium Strength" : "Keskinkertainen vahvuus",
+ "Bad Strength" : "Heikko vahvuus",
"Expired" : "Vanhentunut",
"Someone has shared a credential with you." : "Joku on jakanut tilitiedot kanssasi.",
"Loading…" : "Ladataan…",
@@ -223,7 +238,7 @@
"Expires:" : "Vanhenee:",
"Connection to server lost" : "Yhteys palvelimelle menetetty",
"Problem loading page, reloading in 5 seconds" : "Ongelma sivun lataamisessa, päivitetään 5 sekunnin kuluttua",
- "Saving..." : "Tallennetaan...",
+ "Saving …" : "Tallennetaan…",
"Dismiss" : "Hylkää",
"seconds ago" : "sekuntia sitten"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/fr.js b/l10n/fr.js
index 583b3473..9871efb1 100644
--- a/l10n/fr.js
+++ b/l10n/fr.js
@@ -293,12 +293,11 @@ OC.L10N.register(
"Click here to request it" : "Cliquez ici pour le demander",
"Loading…" : "Chargement...",
"Awwhh… credential not found. Maybe it expired" : "Awwhh.... information d'identification non trouvée. Il est peut être expiré",
- "Compromise!" : "Compromis !",
+ "Mark as Compromised" : "Marquer comme compromis",
"Compromised!" : "Compromis !",
"This password is compromised. You can only remove this warning by changing the password." : "Ce mot de passe est compromis. Vous ne pouvez supprimer cet avertissement qu'en modifiant votre mot de passe.",
"email" : "email",
"Description" : "Description",
- "Url" : "URL",
"Custom Search:" : "Recherche personnalisée",
"Revert to defaults" : "Restaurer les valeurs par défaut",
"Error while saving field" : "Erreur lors de la sauvegarde du champ",
@@ -361,7 +360,7 @@ OC.L10N.register(
"Expires:" : "Expire le :",
"Connection to server lost" : "La connexion au serveur a été perdue",
"Problem loading page, reloading in 5 seconds" : "Problème de chargement de la page, actualisation dans 5 secondes",
- "Saving..." : "Enregistrement…",
+ "Saving …" : "Enregistrement ...",
"Dismiss" : "Ignorer",
"seconds ago" : "il y a quelques secondes"
},
diff --git a/l10n/fr.json b/l10n/fr.json
index 0d9b67d2..0d5279d7 100644
--- a/l10n/fr.json
+++ b/l10n/fr.json
@@ -291,12 +291,11 @@
"Click here to request it" : "Cliquez ici pour le demander",
"Loading…" : "Chargement...",
"Awwhh… credential not found. Maybe it expired" : "Awwhh.... information d'identification non trouvée. Il est peut être expiré",
- "Compromise!" : "Compromis !",
+ "Mark as Compromised" : "Marquer comme compromis",
"Compromised!" : "Compromis !",
"This password is compromised. You can only remove this warning by changing the password." : "Ce mot de passe est compromis. Vous ne pouvez supprimer cet avertissement qu'en modifiant votre mot de passe.",
"email" : "email",
"Description" : "Description",
- "Url" : "URL",
"Custom Search:" : "Recherche personnalisée",
"Revert to defaults" : "Restaurer les valeurs par défaut",
"Error while saving field" : "Erreur lors de la sauvegarde du champ",
@@ -359,7 +358,7 @@
"Expires:" : "Expire le :",
"Connection to server lost" : "La connexion au serveur a été perdue",
"Problem loading page, reloading in 5 seconds" : "Problème de chargement de la page, actualisation dans 5 secondes",
- "Saving..." : "Enregistrement…",
+ "Saving …" : "Enregistrement ...",
"Dismiss" : "Ignorer",
"seconds ago" : "il y a quelques secondes"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
diff --git a/l10n/gl.js b/l10n/gl.js
index 8e67fafd..9cc1eb68 100644
--- a/l10n/gl.js
+++ b/l10n/gl.js
@@ -1,7 +1,7 @@
OC.L10N.register(
"passman",
{
- "Generating sharing keys ( %s / 2)" : "Xerando chaves de compartición ( %s / 2)",
+ "Generating sharing keys ( %s / 2)" : "Xerando claves de compartición ( %s / 2)",
"Incorrect vault password!" : "Contrasinal da bóveda incorrecta!",
"Passwords do not match" : "Os contrasinais non coinciden",
"General" : "Xeral",
@@ -79,7 +79,7 @@ OC.L10N.register(
"Delete current icon" : "Eliminar a icona actual",
"Get icon from page" : "Obtér a icona da páxina",
"This may take a few seconds…" : "Isto pode levar uns segundos…",
- "There was an error fetching the icon!" : "Produciuse un erro ao recuperar a icona!",
+ "There was an error fetching the icon!" : "Produciuse un erro ao obter a icona!",
"Selected icon" : "Icona seleccionada",
"Field label" : "Campo etiqueta",
"Field value" : "Campo valor",
@@ -121,7 +121,7 @@ OC.L10N.register(
"Rename vault" : "Renomear a bóveda",
"New vault name" : "Nome novo para a bóveda",
"Change" : "Cambiar",
- "Change vault key" : "Cambiar a chave da bóveda",
+ "Change vault key" : "Cambiar a clave da bóveda",
"Old vault password" : "Anterior contrasinal da bóveda",
"New vault password" : "Novo contrasinal da bóveda",
"Repeat new vault password" : "Repita o novo contrasinal da bóveda",
@@ -144,12 +144,12 @@ OC.L10N.register(
"Import" : "Importar",
"Read progress" : "Progreso da lectura",
"Upload progress" : "Progreso do envío",
- "Private Key" : "Chave privada",
- "Public key" : "Chave pública",
- "Key size" : "Tamaño da chave",
- "Save keys" : "Gardar as chaves",
- "Generate sharing keys" : "Xerar chaves de compartición",
- "Generating sharing keys" : "Xerando chaves de compartición",
+ "Private Key" : "Clave privada",
+ "Public key" : "Clave pública",
+ "Key size" : "Tamaño da clave",
+ "Save keys" : "Gardar as claves",
+ "Generate sharing keys" : "Xerar claves de compartición",
+ "Generating sharing keys" : "Xerando claves de compartición",
"The password tool scans your password, calculates average cracking time, listing those below the threshold" : "A ferramenta de contrasinais analizará o seu contrasinal, calculará o tempo medio para crebalo e enumerará aqueles que estean por baixo do limiar",
"Minimum password stength" : "Fortaleza mínima do contrasinal",
"Start scan" : "Iniciar a analise",
@@ -255,7 +255,7 @@ OC.L10N.register(
"Password strength must be at least: {{strength}}" : "A fortaleza do contrasinal debe ser cando menos: {{strength}}",
"Please give your new vault a name." : "Póñalle un nome á súa bóveda",
"Repeat vault password" : "Repita o contrasinal da bóveda",
- "Your sharing keys will have a strength of 1024 bit, which you can change in \\\"Settings\\\" later ." : "A súa chave de compartir terá unha forza de 1024 bits, que pode cambiar máis adiante en «Axustes».",
+ "Your sharing keys will have a strength of 1024 bit, which you can change in \\\"Settings\\\" later ." : "A súa clave de compartir terá unha forza de 1024 bits, que pode cambiar máis adiante en «Axustes».",
"Create vault" : "Crear unha bóveda",
"Go back to vaults" : "Volver ás bóvedas",
"Please input the password for" : "Introduza o contrasinal para",
@@ -293,12 +293,11 @@ OC.L10N.register(
"Click here to request it" : "Prema aquí para solicitalo",
"Loading…" : "Cargando…",
"Awwhh… credential not found. Maybe it expired" : "Amodo… non se atopou a credencial, seica caducou?",
- "Compromise!" : "Compromiso!",
+ "Mark as Compromised" : "Marcar como comprometido",
"Compromised!" : "Comprometido!",
"This password is compromised. You can only remove this warning by changing the password." : "Este contrasinal está comprometido. Só pode eliminar este aviso cambiando o contrasinal.",
"email" : "correo",
"Description" : "Descrición",
- "Url" : "URL",
"Custom Search:" : "Busca personalizada:",
"Revert to defaults" : "Reverter a valores predeterminados",
"Error while saving field" : "Produciuse un erro ao gardar o campo",
@@ -317,7 +316,7 @@ OC.L10N.register(
"%1$s has been deleted by %2$s" : "%1$s foi eliminado por %2$s",
"You deleted %1$s" : "Vostede eliminou %1$s",
"%1$s has been recovered by %2$s" : "%1$s foi recuperado por %2$s",
- "You recovered %1$s" : "Vostede restaurou %1$s",
+ "You recovered %1$s" : "Vostede recuperou %1$s",
"%1$s has been permanently deleted by %2$s" : "%1$s foi eliminado de xeito permanente por %2$s",
"You permanently deleted %1$s" : "Vostede eliminou %1$s de xeito permanente",
"The password of %1$s has expired, renew it now." : "O contrasinal de %1$s caducou, renóvea agora.",
@@ -333,7 +332,7 @@ OC.L10N.register(
"%s has accepted your share request for \"%s\"." : "%s aceptou a súa solicitude para compartir «%s».",
"Passman" : "Passman",
"Passman is a full featured password manager." : "Passman é un completo xestor de contrasinais. ",
- "Passman is a full featured password manager.\nFeatures:\n- Vaults\n- Vault key is never sent to the server\n- Browser extension for easy access to passwords\n- Android app for on the road access\n- Credentials are client side encrypted with 256bit AES\n- Credentials are server side encrypted with 256bit AES\n- Ability to add custom fields to credentials\n- Built-in OTP (One Time Password) generator\n- Password analyzer\n- Share passwords internally and via link in a secure manner.\n- Import from various password managers (KeePass, LastPass, DashLane, ZOHO, Clipperz.is )\nFor an demo of this app visit [https://demo.passman.cc](https://demo.passman.cc)" : "Passman é un completo xestor de contrasinais.\nCaracterísticas:\n- Bóvedas\n- A chave da bóveda non se envía nunca ao servidor\n- Extensión do navegador para facilitar o acceso aos contrasinais\n- Apli de Android para acceder en mobilidade\n- As credenciais están en cifradas do lado do cliente con AES de 256 bits\n- As credenciais están cifradas no lado do servidor con AES de 256 bits\n- Posibilidade de engadir campos personalizados a credenciais\n- Xerador incorporado de OTP (One Time Password)\n- Analizador de contrasinais\n- Comparte contrasinais internamente e mediante a ligazón dun xeito seguro.\n- Importación dende varios xestores de contrasinais (KeePass, LastPass, DashLane, ZOHO, Clipperz.is)\nPara ver unha demostración desta aplicación, visite [https://demo.passman.cc](https://demo.passman.cc)",
+ "Passman is a full featured password manager.\nFeatures:\n- Vaults\n- Vault key is never sent to the server\n- Browser extension for easy access to passwords\n- Android app for on the road access\n- Credentials are client side encrypted with 256bit AES\n- Credentials are server side encrypted with 256bit AES\n- Ability to add custom fields to credentials\n- Built-in OTP (One Time Password) generator\n- Password analyzer\n- Share passwords internally and via link in a secure manner.\n- Import from various password managers (KeePass, LastPass, DashLane, ZOHO, Clipperz.is )\nFor an demo of this app visit [https://demo.passman.cc](https://demo.passman.cc)" : "Passman é un completo xestor de contrasinais.\nCaracterísticas:\n- Bóvedas\n- A clave da bóveda non se envía nunca ao servidor\n- Extensión do navegador para facilitar o acceso aos contrasinais\n- Apli de Android para acceder en mobilidade\n- As credenciais están en cifradas do lado do cliente con AES de 256 bits\n- As credenciais están cifradas no lado do servidor con AES de 256 bits\n- Posibilidade de engadir campos personalizados a credenciais\n- Xerador incorporado de OTP (One Time Password)\n- Analizador de contrasinais\n- Comparte contrasinais internamente e mediante a ligazón dun xeito seguro.\n- Importación dende varios xestores de contrasinais (KeePass, LastPass, DashLane, ZOHO, Clipperz.is)\nPara ver unha demostración desta aplicación, visite [https://demo.passman.cc](https://demo.passman.cc)",
"Unable to get version info" : "Non é posíbel obter información da versión",
"Passman Settings" : "Axustes de Passman",
"GitHub version:" : "Versión do GitHub:",
@@ -361,7 +360,7 @@ OC.L10N.register(
"Expires:" : "Caduca:",
"Connection to server lost" : "Perdida a conexión co servidor",
"Problem loading page, reloading in 5 seconds" : "Produciuse un problema ao cargar a páxina, volverá cargar en 5 segundos",
- "Saving..." : "Gardando…",
+ "Saving …" : "Gardando…",
"Dismiss" : "Rexeitar",
"seconds ago" : "hai uns segundos"
},
diff --git a/l10n/gl.json b/l10n/gl.json
index fee6d834..3fd568dc 100644
--- a/l10n/gl.json
+++ b/l10n/gl.json
@@ -1,5 +1,5 @@
{ "translations": {
- "Generating sharing keys ( %s / 2)" : "Xerando chaves de compartición ( %s / 2)",
+ "Generating sharing keys ( %s / 2)" : "Xerando claves de compartición ( %s / 2)",
"Incorrect vault password!" : "Contrasinal da bóveda incorrecta!",
"Passwords do not match" : "Os contrasinais non coinciden",
"General" : "Xeral",
@@ -77,7 +77,7 @@
"Delete current icon" : "Eliminar a icona actual",
"Get icon from page" : "Obtér a icona da páxina",
"This may take a few seconds…" : "Isto pode levar uns segundos…",
- "There was an error fetching the icon!" : "Produciuse un erro ao recuperar a icona!",
+ "There was an error fetching the icon!" : "Produciuse un erro ao obter a icona!",
"Selected icon" : "Icona seleccionada",
"Field label" : "Campo etiqueta",
"Field value" : "Campo valor",
@@ -119,7 +119,7 @@
"Rename vault" : "Renomear a bóveda",
"New vault name" : "Nome novo para a bóveda",
"Change" : "Cambiar",
- "Change vault key" : "Cambiar a chave da bóveda",
+ "Change vault key" : "Cambiar a clave da bóveda",
"Old vault password" : "Anterior contrasinal da bóveda",
"New vault password" : "Novo contrasinal da bóveda",
"Repeat new vault password" : "Repita o novo contrasinal da bóveda",
@@ -142,12 +142,12 @@
"Import" : "Importar",
"Read progress" : "Progreso da lectura",
"Upload progress" : "Progreso do envío",
- "Private Key" : "Chave privada",
- "Public key" : "Chave pública",
- "Key size" : "Tamaño da chave",
- "Save keys" : "Gardar as chaves",
- "Generate sharing keys" : "Xerar chaves de compartición",
- "Generating sharing keys" : "Xerando chaves de compartición",
+ "Private Key" : "Clave privada",
+ "Public key" : "Clave pública",
+ "Key size" : "Tamaño da clave",
+ "Save keys" : "Gardar as claves",
+ "Generate sharing keys" : "Xerar claves de compartición",
+ "Generating sharing keys" : "Xerando claves de compartición",
"The password tool scans your password, calculates average cracking time, listing those below the threshold" : "A ferramenta de contrasinais analizará o seu contrasinal, calculará o tempo medio para crebalo e enumerará aqueles que estean por baixo do limiar",
"Minimum password stength" : "Fortaleza mínima do contrasinal",
"Start scan" : "Iniciar a analise",
@@ -253,7 +253,7 @@
"Password strength must be at least: {{strength}}" : "A fortaleza do contrasinal debe ser cando menos: {{strength}}",
"Please give your new vault a name." : "Póñalle un nome á súa bóveda",
"Repeat vault password" : "Repita o contrasinal da bóveda",
- "Your sharing keys will have a strength of 1024 bit, which you can change in \\\"Settings\\\" later ." : "A súa chave de compartir terá unha forza de 1024 bits, que pode cambiar máis adiante en «Axustes».",
+ "Your sharing keys will have a strength of 1024 bit, which you can change in \\\"Settings\\\" later ." : "A súa clave de compartir terá unha forza de 1024 bits, que pode cambiar máis adiante en «Axustes».",
"Create vault" : "Crear unha bóveda",
"Go back to vaults" : "Volver ás bóvedas",
"Please input the password for" : "Introduza o contrasinal para",
@@ -291,12 +291,11 @@
"Click here to request it" : "Prema aquí para solicitalo",
"Loading…" : "Cargando…",
"Awwhh… credential not found. Maybe it expired" : "Amodo… non se atopou a credencial, seica caducou?",
- "Compromise!" : "Compromiso!",
+ "Mark as Compromised" : "Marcar como comprometido",
"Compromised!" : "Comprometido!",
"This password is compromised. You can only remove this warning by changing the password." : "Este contrasinal está comprometido. Só pode eliminar este aviso cambiando o contrasinal.",
"email" : "correo",
"Description" : "Descrición",
- "Url" : "URL",
"Custom Search:" : "Busca personalizada:",
"Revert to defaults" : "Reverter a valores predeterminados",
"Error while saving field" : "Produciuse un erro ao gardar o campo",
@@ -315,7 +314,7 @@
"%1$s has been deleted by %2$s" : "%1$s foi eliminado por %2$s",
"You deleted %1$s" : "Vostede eliminou %1$s",
"%1$s has been recovered by %2$s" : "%1$s foi recuperado por %2$s",
- "You recovered %1$s" : "Vostede restaurou %1$s",
+ "You recovered %1$s" : "Vostede recuperou %1$s",
"%1$s has been permanently deleted by %2$s" : "%1$s foi eliminado de xeito permanente por %2$s",
"You permanently deleted %1$s" : "Vostede eliminou %1$s de xeito permanente",
"The password of %1$s has expired, renew it now." : "O contrasinal de %1$s caducou, renóvea agora.",
@@ -331,7 +330,7 @@
"%s has accepted your share request for \"%s\"." : "%s aceptou a súa solicitude para compartir «%s».",
"Passman" : "Passman",
"Passman is a full featured password manager." : "Passman é un completo xestor de contrasinais. ",
- "Passman is a full featured password manager.\nFeatures:\n- Vaults\n- Vault key is never sent to the server\n- Browser extension for easy access to passwords\n- Android app for on the road access\n- Credentials are client side encrypted with 256bit AES\n- Credentials are server side encrypted with 256bit AES\n- Ability to add custom fields to credentials\n- Built-in OTP (One Time Password) generator\n- Password analyzer\n- Share passwords internally and via link in a secure manner.\n- Import from various password managers (KeePass, LastPass, DashLane, ZOHO, Clipperz.is )\nFor an demo of this app visit [https://demo.passman.cc](https://demo.passman.cc)" : "Passman é un completo xestor de contrasinais.\nCaracterísticas:\n- Bóvedas\n- A chave da bóveda non se envía nunca ao servidor\n- Extensión do navegador para facilitar o acceso aos contrasinais\n- Apli de Android para acceder en mobilidade\n- As credenciais están en cifradas do lado do cliente con AES de 256 bits\n- As credenciais están cifradas no lado do servidor con AES de 256 bits\n- Posibilidade de engadir campos personalizados a credenciais\n- Xerador incorporado de OTP (One Time Password)\n- Analizador de contrasinais\n- Comparte contrasinais internamente e mediante a ligazón dun xeito seguro.\n- Importación dende varios xestores de contrasinais (KeePass, LastPass, DashLane, ZOHO, Clipperz.is)\nPara ver unha demostración desta aplicación, visite [https://demo.passman.cc](https://demo.passman.cc)",
+ "Passman is a full featured password manager.\nFeatures:\n- Vaults\n- Vault key is never sent to the server\n- Browser extension for easy access to passwords\n- Android app for on the road access\n- Credentials are client side encrypted with 256bit AES\n- Credentials are server side encrypted with 256bit AES\n- Ability to add custom fields to credentials\n- Built-in OTP (One Time Password) generator\n- Password analyzer\n- Share passwords internally and via link in a secure manner.\n- Import from various password managers (KeePass, LastPass, DashLane, ZOHO, Clipperz.is )\nFor an demo of this app visit [https://demo.passman.cc](https://demo.passman.cc)" : "Passman é un completo xestor de contrasinais.\nCaracterísticas:\n- Bóvedas\n- A clave da bóveda non se envía nunca ao servidor\n- Extensión do navegador para facilitar o acceso aos contrasinais\n- Apli de Android para acceder en mobilidade\n- As credenciais están en cifradas do lado do cliente con AES de 256 bits\n- As credenciais están cifradas no lado do servidor con AES de 256 bits\n- Posibilidade de engadir campos personalizados a credenciais\n- Xerador incorporado de OTP (One Time Password)\n- Analizador de contrasinais\n- Comparte contrasinais internamente e mediante a ligazón dun xeito seguro.\n- Importación dende varios xestores de contrasinais (KeePass, LastPass, DashLane, ZOHO, Clipperz.is)\nPara ver unha demostración desta aplicación, visite [https://demo.passman.cc](https://demo.passman.cc)",
"Unable to get version info" : "Non é posíbel obter información da versión",
"Passman Settings" : "Axustes de Passman",
"GitHub version:" : "Versión do GitHub:",
@@ -359,7 +358,7 @@
"Expires:" : "Caduca:",
"Connection to server lost" : "Perdida a conexión co servidor",
"Problem loading page, reloading in 5 seconds" : "Produciuse un problema ao cargar a páxina, volverá cargar en 5 segundos",
- "Saving..." : "Gardando…",
+ "Saving …" : "Gardando…",
"Dismiss" : "Rexeitar",
"seconds ago" : "hai uns segundos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/he.js b/l10n/he.js
index 0b094bc7..24449762 100644
--- a/l10n/he.js
+++ b/l10n/he.js
@@ -258,7 +258,6 @@ OC.L10N.register(
"Awwhh… credential not found. Maybe it expired" : "אוףףףףף… לא נמצאו פרטי גישה. אולי תוקפם פג",
"email" : "דוא״ל",
"Description" : "תיאור",
- "Url" : "כתובת",
"Custom Search:" : "חיפוש מותאם אישית:",
"Revert to defaults" : "החזרה לבררות מחדל",
"Error while saving field" : "אירעה שגיאה במהלך שמירת השדה",
@@ -308,7 +307,7 @@ OC.L10N.register(
"Expires:" : "תפוגה:",
"Connection to server lost" : "החיבור לשרת אבד",
"Problem loading page, reloading in 5 seconds" : "אירעה שגיאה בעת טעינת העמוד, יתרענן בעוד 5 שניות",
- "Saving..." : "מתבצעת שמירה…",
+ "Saving …" : "מתבצעת שמירה…",
"Dismiss" : "התעלמות",
"seconds ago" : "לפני מספר שניות"
},
diff --git a/l10n/he.json b/l10n/he.json
index 2eb64612..7aed67c7 100644
--- a/l10n/he.json
+++ b/l10n/he.json
@@ -256,7 +256,6 @@
"Awwhh… credential not found. Maybe it expired" : "אוףףףףף… לא נמצאו פרטי גישה. אולי תוקפם פג",
"email" : "דוא״ל",
"Description" : "תיאור",
- "Url" : "כתובת",
"Custom Search:" : "חיפוש מותאם אישית:",
"Revert to defaults" : "החזרה לבררות מחדל",
"Error while saving field" : "אירעה שגיאה במהלך שמירת השדה",
@@ -306,7 +305,7 @@
"Expires:" : "תפוגה:",
"Connection to server lost" : "החיבור לשרת אבד",
"Problem loading page, reloading in 5 seconds" : "אירעה שגיאה בעת טעינת העמוד, יתרענן בעוד 5 שניות",
- "Saving..." : "מתבצעת שמירה…",
+ "Saving …" : "מתבצעת שמירה…",
"Dismiss" : "התעלמות",
"seconds ago" : "לפני מספר שניות"
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;"
diff --git a/l10n/hr.js b/l10n/hr.js
index 8d4eb6c9..c65c0806 100644
--- a/l10n/hr.js
+++ b/l10n/hr.js
@@ -293,12 +293,11 @@ OC.L10N.register(
"Click here to request it" : "Kliknite ovdje kako biste je zatražili",
"Loading…" : "Učitavanje…",
"Awwhh… credential not found. Maybe it expired" : "Ah… vjerodajnica nije pronađena. Možda je istekla",
- "Compromise!" : "Kompromis!",
+ "Mark as Compromised" : "Označi kao ugroženo",
"Compromised!" : "Ugrožena!",
"This password is compromised. You can only remove this warning by changing the password." : "Vaša lozinka je ugrožena. Ovo upozorenje možete ukloniti samo promjenom zaporke.",
"email" : "e-pošta",
"Description" : "Opis",
- "Url" : "Url",
"Custom Search:" : "Prilagođeno pretraživanje:",
"Revert to defaults" : "Vrati se na zadane vrijednosti",
"Error while saving field" : "Pogreška prilikom spremanja polja",
@@ -361,7 +360,7 @@ OC.L10N.register(
"Expires:" : "Istječe:",
"Connection to server lost" : "Izgubljena veza s poslužiteljem",
"Problem loading page, reloading in 5 seconds" : "Problem s učitavanjem stranice, ponovno učitavanje za 5 sekundi",
- "Saving..." : "Spremanje...",
+ "Saving …" : "Spremanje...",
"Dismiss" : "Zanemari",
"seconds ago" : "prije nekoliko sekundi"
},
diff --git a/l10n/hr.json b/l10n/hr.json
index 9c39dc13..8d3a5f86 100644
--- a/l10n/hr.json
+++ b/l10n/hr.json
@@ -291,12 +291,11 @@
"Click here to request it" : "Kliknite ovdje kako biste je zatražili",
"Loading…" : "Učitavanje…",
"Awwhh… credential not found. Maybe it expired" : "Ah… vjerodajnica nije pronađena. Možda je istekla",
- "Compromise!" : "Kompromis!",
+ "Mark as Compromised" : "Označi kao ugroženo",
"Compromised!" : "Ugrožena!",
"This password is compromised. You can only remove this warning by changing the password." : "Vaša lozinka je ugrožena. Ovo upozorenje možete ukloniti samo promjenom zaporke.",
"email" : "e-pošta",
"Description" : "Opis",
- "Url" : "Url",
"Custom Search:" : "Prilagođeno pretraživanje:",
"Revert to defaults" : "Vrati se na zadane vrijednosti",
"Error while saving field" : "Pogreška prilikom spremanja polja",
@@ -359,7 +358,7 @@
"Expires:" : "Istječe:",
"Connection to server lost" : "Izgubljena veza s poslužiteljem",
"Problem loading page, reloading in 5 seconds" : "Problem s učitavanjem stranice, ponovno učitavanje za 5 sekundi",
- "Saving..." : "Spremanje...",
+ "Saving …" : "Spremanje...",
"Dismiss" : "Zanemari",
"seconds ago" : "prije nekoliko sekundi"
},"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"
diff --git a/l10n/hu.js b/l10n/hu.js
index d80019ac..24787615 100644
--- a/l10n/hu.js
+++ b/l10n/hu.js
@@ -327,7 +327,7 @@ OC.L10N.register(
"Expires:" : "Lejárat:",
"Connection to server lost" : "Megszakadt a kapcsolat a szerverrel",
"Problem loading page, reloading in 5 seconds" : "Probléma adódott az oldal betöltése közben, újratöltés 5 másodpercen belül",
- "Saving..." : "Mentés...",
+ "Saving …" : "Mentés…",
"Dismiss" : "Elutasít",
"seconds ago" : "pár másodperce"
},
diff --git a/l10n/hu.json b/l10n/hu.json
index f0c1c633..33877144 100644
--- a/l10n/hu.json
+++ b/l10n/hu.json
@@ -325,7 +325,7 @@
"Expires:" : "Lejárat:",
"Connection to server lost" : "Megszakadt a kapcsolat a szerverrel",
"Problem loading page, reloading in 5 seconds" : "Probléma adódott az oldal betöltése közben, újratöltés 5 másodpercen belül",
- "Saving..." : "Mentés...",
+ "Saving …" : "Mentés…",
"Dismiss" : "Elutasít",
"seconds ago" : "pár másodperce"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/hy.js b/l10n/hy.js
index 6302e014..a821acaf 100644
--- a/l10n/hy.js
+++ b/l10n/hy.js
@@ -32,7 +32,6 @@ OC.L10N.register(
"Description" : "Նկարագրություն",
"You created %1$s" : "Դու ստեղծեցիր %1$s",
"You deleted %1$s" : "Դու ջնջեցիր %1$s",
- "Saving..." : "Պահում եմ...",
"seconds ago" : "վրկ. առաջ"
},
"nplurals=2; plural=(n != 1);");
diff --git a/l10n/hy.json b/l10n/hy.json
index 33c3573b..8e4c6cf0 100644
--- a/l10n/hy.json
+++ b/l10n/hy.json
@@ -30,7 +30,6 @@
"Description" : "Նկարագրություն",
"You created %1$s" : "Դու ստեղծեցիր %1$s",
"You deleted %1$s" : "Դու ջնջեցիր %1$s",
- "Saving..." : "Պահում եմ...",
"seconds ago" : "վրկ. առաջ"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/l10n/ia.js b/l10n/ia.js
index 46085c95..3550ee6b 100644
--- a/l10n/ia.js
+++ b/l10n/ia.js
@@ -43,7 +43,6 @@ OC.L10N.register(
"Description" : "Description",
"You created %1$s" : "Tu creava %1$s",
"You deleted %1$s" : "Tu deleva %1$s",
- "Saving..." : "Salveguardante...",
"Dismiss" : "Dimitter",
"seconds ago" : "secundas passate"
},
diff --git a/l10n/ia.json b/l10n/ia.json
index 94b1c980..01231f91 100644
--- a/l10n/ia.json
+++ b/l10n/ia.json
@@ -41,7 +41,6 @@
"Description" : "Description",
"You created %1$s" : "Tu creava %1$s",
"You deleted %1$s" : "Tu deleva %1$s",
- "Saving..." : "Salveguardante...",
"Dismiss" : "Dimitter",
"seconds ago" : "secundas passate"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/id.js b/l10n/id.js
index 3849f2bd..889328e9 100644
--- a/l10n/id.js
+++ b/l10n/id.js
@@ -60,7 +60,7 @@ OC.L10N.register(
"Passwords" : "Kata sandi",
"Connection to server lost" : "Koneksi ke server gagal",
"Problem loading page, reloading in 5 seconds" : "Terjadi masalah dalam memuat laman, mencoba lagi dalam 5 detik",
- "Saving..." : "Menyimpan...",
+ "Saving …" : "Menyimpan ...",
"Dismiss" : "Batal",
"seconds ago" : "beberapa detik yang lalu"
},
diff --git a/l10n/id.json b/l10n/id.json
index 7f197c96..56b37562 100644
--- a/l10n/id.json
+++ b/l10n/id.json
@@ -58,7 +58,7 @@
"Passwords" : "Kata sandi",
"Connection to server lost" : "Koneksi ke server gagal",
"Problem loading page, reloading in 5 seconds" : "Terjadi masalah dalam memuat laman, mencoba lagi dalam 5 detik",
- "Saving..." : "Menyimpan...",
+ "Saving …" : "Menyimpan ...",
"Dismiss" : "Batal",
"seconds ago" : "beberapa detik yang lalu"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/l10n/is.js b/l10n/is.js
index 8cc09975..c0b4c7b2 100644
--- a/l10n/is.js
+++ b/l10n/is.js
@@ -293,12 +293,10 @@ OC.L10N.register(
"Click here to request it" : "Smelltu hér til að biðja um það",
"Loading…" : "Hleð inn…",
"Awwhh… credential not found. Maybe it expired" : "Æjæjæ... auðkenni fundust ekki. Kannski þau séu útrunnin",
- "Compromise!" : "Berskjaldað!",
"Compromised!" : "Berskjaldað!",
"This password is compromised. You can only remove this warning by changing the password." : "Þetta lykilorð er berskjaldað, og því ekki nothæft lengur. Þú getur aðeins losnað við þessa aðvörun með því að skipta um lykilorð.",
"email" : "tölvupóstur",
"Description" : "Lýsing",
- "Url" : "Slóð (URL)",
"Custom Search:" : "Sérsniðin leit:",
"Revert to defaults" : "Frumstilla á sjálfgefin gildi",
"Error while saving field" : "Villa kom upp við að vista gagnasvið",
@@ -361,7 +359,7 @@ OC.L10N.register(
"Expires:" : "Gildir til:",
"Connection to server lost" : "Tenging við þjón rofnaði",
"Problem loading page, reloading in 5 seconds" : "Vandamál við að hlaða inn síðu, endurhleð eftir 5 sekúndur",
- "Saving..." : "Er að vista ...",
+ "Saving …" : "Vista …",
"Dismiss" : "Hafna",
"seconds ago" : "sekúndum síðan"
},
diff --git a/l10n/is.json b/l10n/is.json
index d89cec6f..fdf78f20 100644
--- a/l10n/is.json
+++ b/l10n/is.json
@@ -291,12 +291,10 @@
"Click here to request it" : "Smelltu hér til að biðja um það",
"Loading…" : "Hleð inn…",
"Awwhh… credential not found. Maybe it expired" : "Æjæjæ... auðkenni fundust ekki. Kannski þau séu útrunnin",
- "Compromise!" : "Berskjaldað!",
"Compromised!" : "Berskjaldað!",
"This password is compromised. You can only remove this warning by changing the password." : "Þetta lykilorð er berskjaldað, og því ekki nothæft lengur. Þú getur aðeins losnað við þessa aðvörun með því að skipta um lykilorð.",
"email" : "tölvupóstur",
"Description" : "Lýsing",
- "Url" : "Slóð (URL)",
"Custom Search:" : "Sérsniðin leit:",
"Revert to defaults" : "Frumstilla á sjálfgefin gildi",
"Error while saving field" : "Villa kom upp við að vista gagnasvið",
@@ -359,7 +357,7 @@
"Expires:" : "Gildir til:",
"Connection to server lost" : "Tenging við þjón rofnaði",
"Problem loading page, reloading in 5 seconds" : "Vandamál við að hlaða inn síðu, endurhleð eftir 5 sekúndur",
- "Saving..." : "Er að vista ...",
+ "Saving …" : "Vista …",
"Dismiss" : "Hafna",
"seconds ago" : "sekúndum síðan"
},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"
diff --git a/l10n/it.js b/l10n/it.js
index 96175916..4e8cf113 100644
--- a/l10n/it.js
+++ b/l10n/it.js
@@ -293,12 +293,11 @@ OC.L10N.register(
"Click here to request it" : "Fai clic qui per richiederle",
"Loading…" : "Caricamento in corso...",
"Awwhh… credential not found. Maybe it expired" : "Ops... credenziali non trovate. Potrebbero essere scadute",
- "Compromise!" : "Compromessa!",
+ "Mark as Compromised" : "Marca come compromessa",
"Compromised!" : "Compromessa!",
"This password is compromised. You can only remove this warning by changing the password." : "Questa password è compromessa. Puoi rimuovere questo avviso solo cambiando la password.",
"email" : "email",
"Description" : "Descrizione",
- "Url" : "Url",
"Custom Search:" : "Ricerca personalizzata:",
"Revert to defaults" : "Ripristina valori predefiniti",
"Error while saving field" : "Errore durante il salvataggio del campo",
@@ -361,7 +360,7 @@ OC.L10N.register(
"Expires:" : "Scade:",
"Connection to server lost" : "Connessione al server interrotta",
"Problem loading page, reloading in 5 seconds" : "Problema durante il caricamento della pagina, aggiornamento tra 5 secondi",
- "Saving..." : "Salvataggio in corso...",
+ "Saving …" : "Salvataggio…",
"Dismiss" : "Annulla",
"seconds ago" : "secondi fa"
},
diff --git a/l10n/it.json b/l10n/it.json
index 2d3f595b..443f65e6 100644
--- a/l10n/it.json
+++ b/l10n/it.json
@@ -291,12 +291,11 @@
"Click here to request it" : "Fai clic qui per richiederle",
"Loading…" : "Caricamento in corso...",
"Awwhh… credential not found. Maybe it expired" : "Ops... credenziali non trovate. Potrebbero essere scadute",
- "Compromise!" : "Compromessa!",
+ "Mark as Compromised" : "Marca come compromessa",
"Compromised!" : "Compromessa!",
"This password is compromised. You can only remove this warning by changing the password." : "Questa password è compromessa. Puoi rimuovere questo avviso solo cambiando la password.",
"email" : "email",
"Description" : "Descrizione",
- "Url" : "Url",
"Custom Search:" : "Ricerca personalizzata:",
"Revert to defaults" : "Ripristina valori predefiniti",
"Error while saving field" : "Errore durante il salvataggio del campo",
@@ -359,7 +358,7 @@
"Expires:" : "Scade:",
"Connection to server lost" : "Connessione al server interrotta",
"Problem loading page, reloading in 5 seconds" : "Problema durante il caricamento della pagina, aggiornamento tra 5 secondi",
- "Saving..." : "Salvataggio in corso...",
+ "Saving …" : "Salvataggio…",
"Dismiss" : "Annulla",
"seconds ago" : "secondi fa"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/ja.js b/l10n/ja.js
index 481a18fb..3e169793 100644
--- a/l10n/ja.js
+++ b/l10n/ja.js
@@ -293,12 +293,10 @@ OC.L10N.register(
"Click here to request it" : "リクエストするにはここをクリックしてください",
"Loading…" : "読み込み中...",
"Awwhh… credential not found. Maybe it expired" : "資格情報が見つかりません。期限切れの可能性があります",
- "Compromise!" : "安全性が損なわれています!",
"Compromised!" : "安全性が損なわれています!",
"This password is compromised. You can only remove this warning by changing the password." : "このパスワードは危険にさらされています。 この警告を削除するにはパスワードを変更してください。",
"email" : "メール",
"Description" : "説明",
- "Url" : "URL",
"Custom Search:" : "カスタム検索:",
"Revert to defaults" : "デフォルトに戻す",
"Error while saving field" : "フィールドの保存中にエラーが発生しました",
@@ -361,7 +359,7 @@ OC.L10N.register(
"Expires:" : "有効期限:",
"Connection to server lost" : "サーバーとの接続が切断されました",
"Problem loading page, reloading in 5 seconds" : "ページのロードに問題があります、5秒以内に再ロードします",
- "Saving..." : "保存中...",
+ "Saving …" : "保存中...",
"Dismiss" : "閉じる",
"seconds ago" : "数秒前"
},
diff --git a/l10n/ja.json b/l10n/ja.json
index a218b21d..4ba3057f 100644
--- a/l10n/ja.json
+++ b/l10n/ja.json
@@ -291,12 +291,10 @@
"Click here to request it" : "リクエストするにはここをクリックしてください",
"Loading…" : "読み込み中...",
"Awwhh… credential not found. Maybe it expired" : "資格情報が見つかりません。期限切れの可能性があります",
- "Compromise!" : "安全性が損なわれています!",
"Compromised!" : "安全性が損なわれています!",
"This password is compromised. You can only remove this warning by changing the password." : "このパスワードは危険にさらされています。 この警告を削除するにはパスワードを変更してください。",
"email" : "メール",
"Description" : "説明",
- "Url" : "URL",
"Custom Search:" : "カスタム検索:",
"Revert to defaults" : "デフォルトに戻す",
"Error while saving field" : "フィールドの保存中にエラーが発生しました",
@@ -359,7 +357,7 @@
"Expires:" : "有効期限:",
"Connection to server lost" : "サーバーとの接続が切断されました",
"Problem loading page, reloading in 5 seconds" : "ページのロードに問題があります、5秒以内に再ロードします",
- "Saving..." : "保存中...",
+ "Saving …" : "保存中...",
"Dismiss" : "閉じる",
"seconds ago" : "数秒前"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/l10n/ka_GE.js b/l10n/ka_GE.js
index da5da059..d13f8e5d 100644
--- a/l10n/ka_GE.js
+++ b/l10n/ka_GE.js
@@ -317,7 +317,6 @@ OC.L10N.register(
"Click here to request\n\t\t\t\t\tit" : "დააჭირეთ რომ მოითხოვოთ\n\t\t\t\t\tის",
"Connection to server lost" : "სერვერთან კავშირი გაწყდა",
"Problem loading page, reloading in 5 seconds" : "გვერდის ჩატვირთვის შეცდომა, გადაიტვირთება 5 წამში",
- "Saving..." : "მიმდინარეობს შენახვა…",
"Dismiss" : "დათხოვნა",
"seconds ago" : "წამის წინ"
},
diff --git a/l10n/ka_GE.json b/l10n/ka_GE.json
index 4e70e8b8..6440622e 100644
--- a/l10n/ka_GE.json
+++ b/l10n/ka_GE.json
@@ -315,7 +315,6 @@
"Click here to request\n\t\t\t\t\tit" : "დააჭირეთ რომ მოითხოვოთ\n\t\t\t\t\tის",
"Connection to server lost" : "სერვერთან კავშირი გაწყდა",
"Problem loading page, reloading in 5 seconds" : "გვერდის ჩატვირთვის შეცდომა, გადაიტვირთება 5 წამში",
- "Saving..." : "მიმდინარეობს შენახვა…",
"Dismiss" : "დათხოვნა",
"seconds ago" : "წამის წინ"
},"pluralForm" :"nplurals=2; plural=(n!=1);"
diff --git a/l10n/km.js b/l10n/km.js
index ad4ecb2d..ba49fa87 100644
--- a/l10n/km.js
+++ b/l10n/km.js
@@ -36,7 +36,6 @@ OC.L10N.register(
"Description" : "ការ​អធិប្បាយ",
"You created %1$s" : "អ្នក​បាន​បង្កើត %1$s",
"You deleted %1$s" : "អ្នក​បាន​លុប %1$s",
- "Saving..." : "កំពុង​រក្សាទុក",
"seconds ago" : "វិនាទី​មុន"
},
"nplurals=1; plural=0;");
diff --git a/l10n/km.json b/l10n/km.json
index 92c6e281..d5f0a32a 100644
--- a/l10n/km.json
+++ b/l10n/km.json
@@ -34,7 +34,6 @@
"Description" : "ការ​អធិប្បាយ",
"You created %1$s" : "អ្នក​បាន​បង្កើត %1$s",
"You deleted %1$s" : "អ្នក​បាន​លុប %1$s",
- "Saving..." : "កំពុង​រក្សាទុក",
"seconds ago" : "វិនាទី​មុន"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/l10n/kn.js b/l10n/kn.js
index 53107407..c47fa1b3 100644
--- a/l10n/kn.js
+++ b/l10n/kn.js
@@ -28,7 +28,6 @@ OC.L10N.register(
"Edit" : "ಸಂಪಾದಿಸು",
"Delete" : "ಅಳಿಸಿ",
"Share" : "ಹಂಚಿಕೊಳ್ಳಿ",
- "Date" : "Date",
- "Saving..." : "ಉಳಿಸಲಾಗುತ್ತಿದೆ ..."
+ "Date" : "Date"
},
"nplurals=2; plural=(n > 1);");
diff --git a/l10n/kn.json b/l10n/kn.json
index 290639c6..3fb28435 100644
--- a/l10n/kn.json
+++ b/l10n/kn.json
@@ -26,7 +26,6 @@
"Edit" : "ಸಂಪಾದಿಸು",
"Delete" : "ಅಳಿಸಿ",
"Share" : "ಹಂಚಿಕೊಳ್ಳಿ",
- "Date" : "Date",
- "Saving..." : "ಉಳಿಸಲಾಗುತ್ತಿದೆ ..."
+ "Date" : "Date"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/l10n/ko.js b/l10n/ko.js
index e4afe544..213e6a85 100644
--- a/l10n/ko.js
+++ b/l10n/ko.js
@@ -254,6 +254,7 @@ OC.L10N.register(
"Deleted credentials" : "삭제된 인증 정보",
"Logout" : "로그아웃",
"Donate" : "기부하기",
+ "Show All" : "모두 보기",
"Tags" : "태그",
"Expired" : "만료됨",
"Someone has shared a credential with you." : "누군가가 여러분과 인증 정보를 공유했습니다.",
@@ -317,7 +318,7 @@ OC.L10N.register(
"Click here to request\n\t\t\t\t\tit" : "여기를 누르면 요청할 수\n\t\t\t\t\t있습니다",
"Connection to server lost" : "서버와의 연결이 끊어짐",
"Problem loading page, reloading in 5 seconds" : "페이지 불러오기 오류, 5초 후 새로 고침",
- "Saving..." : "저장 중...",
+ "Saving …" : "저장 중 …",
"Dismiss" : "끄기",
"seconds ago" : "초 전"
},
diff --git a/l10n/ko.json b/l10n/ko.json
index e6d74a82..a5d8715f 100644
--- a/l10n/ko.json
+++ b/l10n/ko.json
@@ -252,6 +252,7 @@
"Deleted credentials" : "삭제된 인증 정보",
"Logout" : "로그아웃",
"Donate" : "기부하기",
+ "Show All" : "모두 보기",
"Tags" : "태그",
"Expired" : "만료됨",
"Someone has shared a credential with you." : "누군가가 여러분과 인증 정보를 공유했습니다.",
@@ -315,7 +316,7 @@
"Click here to request\n\t\t\t\t\tit" : "여기를 누르면 요청할 수\n\t\t\t\t\t있습니다",
"Connection to server lost" : "서버와의 연결이 끊어짐",
"Problem loading page, reloading in 5 seconds" : "페이지 불러오기 오류, 5초 후 새로 고침",
- "Saving..." : "저장 중...",
+ "Saving …" : "저장 중 …",
"Dismiss" : "끄기",
"seconds ago" : "초 전"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/l10n/lb.js b/l10n/lb.js
index 731f480d..fae7d752 100644
--- a/l10n/lb.js
+++ b/l10n/lb.js
@@ -37,7 +37,6 @@ OC.L10N.register(
"Loading…" : "Et gëtt gelueden",
"Description" : "Beschreiwung",
"Connection to server lost" : "Verbindung zum Server verluer",
- "Saving..." : "Speicheren...",
"Dismiss" : "Ofbriechen",
"seconds ago" : "Sekonnen hier"
},
diff --git a/l10n/lb.json b/l10n/lb.json
index c2197cc5..abc90425 100644
--- a/l10n/lb.json
+++ b/l10n/lb.json
@@ -35,7 +35,6 @@
"Loading…" : "Et gëtt gelueden",
"Description" : "Beschreiwung",
"Connection to server lost" : "Verbindung zum Server verluer",
- "Saving..." : "Speicheren...",
"Dismiss" : "Ofbriechen",
"seconds ago" : "Sekonnen hier"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/lt_LT.js b/l10n/lt_LT.js
index dde49028..cd9233e2 100644
--- a/l10n/lt_LT.js
+++ b/l10n/lt_LT.js
@@ -193,7 +193,6 @@ OC.L10N.register(
"Loading…" : "Įkeliama…",
"email" : "elektroninis paštas",
"Description" : "Aprašas",
- "Url" : "Url",
"Error while saving field" : "Klaida įrašant lauką",
"A Passman item has been created, modified or deleted" : "Slaptažodžių tvarkyklės elementas buvo sukurtas, pakeistas arba ištrintas",
"A Passman item has expired" : "Slaptažodžių tvarkyklės elementas nebegalioja",
@@ -233,7 +232,7 @@ OC.L10N.register(
"Expires:" : "Galioja iki:",
"Connection to server lost" : "Ryšys su serveriu nutrūko",
"Problem loading page, reloading in 5 seconds" : "Problemos, įkeliant puslapį, po 5 sekundžių įkeliama iš naujo",
- "Saving..." : "Įrašoma...",
+ "Saving …" : "Įrašoma …",
"Dismiss" : "Atmesti",
"seconds ago" : "prieš keletą sekundžių"
},
diff --git a/l10n/lt_LT.json b/l10n/lt_LT.json
index 553f1ba3..cd59fc0e 100644
--- a/l10n/lt_LT.json
+++ b/l10n/lt_LT.json
@@ -191,7 +191,6 @@
"Loading…" : "Įkeliama…",
"email" : "elektroninis paštas",
"Description" : "Aprašas",
- "Url" : "Url",
"Error while saving field" : "Klaida įrašant lauką",
"A Passman item has been created, modified or deleted" : "Slaptažodžių tvarkyklės elementas buvo sukurtas, pakeistas arba ištrintas",
"A Passman item has expired" : "Slaptažodžių tvarkyklės elementas nebegalioja",
@@ -231,7 +230,7 @@
"Expires:" : "Galioja iki:",
"Connection to server lost" : "Ryšys su serveriu nutrūko",
"Problem loading page, reloading in 5 seconds" : "Problemos, įkeliant puslapį, po 5 sekundžių įkeliama iš naujo",
- "Saving..." : "Įrašoma...",
+ "Saving …" : "Įrašoma …",
"Dismiss" : "Atmesti",
"seconds ago" : "prieš keletą sekundžių"
},"pluralForm" :"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);"
diff --git a/l10n/lv.js b/l10n/lv.js
index 73ac705c..52c0c4be 100644
--- a/l10n/lv.js
+++ b/l10n/lv.js
@@ -171,7 +171,7 @@ OC.L10N.register(
"Reason" : "Iemesls",
"Connection to server lost" : "Zaudēts savienojums ar serveri",
"Problem loading page, reloading in 5 seconds" : "Problēma ielādējot lapu, pārlādēšana pēc 5 sekundēm",
- "Saving..." : "Saglabā...",
+ "Saving …" : "Saglabā ...",
"Dismiss" : "Atmest",
"seconds ago" : "pirms dažām sekundēm"
},
diff --git a/l10n/lv.json b/l10n/lv.json
index 029e3a09..851926d0 100644
--- a/l10n/lv.json
+++ b/l10n/lv.json
@@ -169,7 +169,7 @@
"Reason" : "Iemesls",
"Connection to server lost" : "Zaudēts savienojums ar serveri",
"Problem loading page, reloading in 5 seconds" : "Problēma ielādējot lapu, pārlādēšana pēc 5 sekundēm",
- "Saving..." : "Saglabā...",
+ "Saving …" : "Saglabā ...",
"Dismiss" : "Atmest",
"seconds ago" : "pirms dažām sekundēm"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"
diff --git a/l10n/mk.js b/l10n/mk.js
index 2a42eaa7..3d1c624b 100644
--- a/l10n/mk.js
+++ b/l10n/mk.js
@@ -2,6 +2,9 @@ OC.L10N.register(
"passman",
{
"General" : "Општо",
+ "Custom Fields" : "Произволни полиња",
+ "Credential deleted" : "Акредитивите се избришани",
+ "Credential updated" : "Акредитивите се ажурирани",
"Done" : "Готово",
"Settings saved" : "Параматрите се зачувани",
"General settings" : "Општи параметри",
@@ -10,10 +13,15 @@ OC.L10N.register(
"Share link" : "Сподели линк",
"Saved!" : "Зачувано!",
"Good" : "Добро",
+ "Toggle visibility" : "Вклучи видливост",
"Copy to clipboard" : "Копирај во клипборд",
+ "Generate password" : "Генерирај лозинка",
"Username" : "Корисничко име",
+ "Add tag" : "Додади ознака",
+ "Text" : "Текст",
"File" : "Датотека",
"Add" : "Додади",
+ "Value" : "Вредност",
"Type" : "Вид",
"Actions" : "Акции",
"Empty" : "Празно",
@@ -23,6 +31,8 @@ OC.L10N.register(
"Expiration date" : "Рок на траење",
"No expiration date set" : "Не е поставен рок на траење",
"Disabled" : "Оневозможен",
+ "Password length" : "Должина на лозинка",
+ "Minimum amount of digits" : "Минимален број на цифри",
"Export" : "Извези",
"Change" : "Измени",
"Version" : "Верзија",
@@ -35,13 +45,16 @@ OC.L10N.register(
"Pending" : "Чекање",
"Details" : "Детали",
"Hide details" : "Сокриј детали",
+ "Pattern" : "Шаблон",
"by" : "од",
+ "Label" : "Ознака",
"Save" : "Зачувај",
"Cancel" : "Откажи",
"Settings" : "Параметри",
"Unshare" : "Несподелувај",
"Account" : "Сметка",
"Password" : "Лозинка",
+ "OTP" : "OTP",
"E-mail" : "е-пошта",
"URL" : "Адреса",
"Notes" : "Белешки",
@@ -53,14 +66,17 @@ OC.L10N.register(
"Decline" : "Одбиј",
"Never" : "Никогаш",
"Logout" : "Одјава",
+ "Donate" : "Донирај",
"Tags" : "Ознаки",
+ "Expired" : "Истечен",
"Loading…" : "Се вчитува…",
"email" : "е-пошта",
"Description" : "Опис",
"You created %1$s" : "Креиравте %1$s",
"You deleted %1$s" : "Избришавте %1$s",
+ "Expires:" : "Истекува",
"Connection to server lost" : "Изгубена е врската со серверот",
- "Saving..." : "Зачувува ...",
+ "Saving …" : "Зачувува ...",
"Dismiss" : "Отфрли",
"seconds ago" : "пред неколку секунди"
},
diff --git a/l10n/mk.json b/l10n/mk.json
index ce8678c8..30f8d60c 100644
--- a/l10n/mk.json
+++ b/l10n/mk.json
@@ -1,5 +1,8 @@
{ "translations": {
"General" : "Општо",
+ "Custom Fields" : "Произволни полиња",
+ "Credential deleted" : "Акредитивите се избришани",
+ "Credential updated" : "Акредитивите се ажурирани",
"Done" : "Готово",
"Settings saved" : "Параматрите се зачувани",
"General settings" : "Општи параметри",
@@ -8,10 +11,15 @@
"Share link" : "Сподели линк",
"Saved!" : "Зачувано!",
"Good" : "Добро",
+ "Toggle visibility" : "Вклучи видливост",
"Copy to clipboard" : "Копирај во клипборд",
+ "Generate password" : "Генерирај лозинка",
"Username" : "Корисничко име",
+ "Add tag" : "Додади ознака",
+ "Text" : "Текст",
"File" : "Датотека",
"Add" : "Додади",
+ "Value" : "Вредност",
"Type" : "Вид",
"Actions" : "Акции",
"Empty" : "Празно",
@@ -21,6 +29,8 @@
"Expiration date" : "Рок на траење",
"No expiration date set" : "Не е поставен рок на траење",
"Disabled" : "Оневозможен",
+ "Password length" : "Должина на лозинка",
+ "Minimum amount of digits" : "Минимален број на цифри",
"Export" : "Извези",
"Change" : "Измени",
"Version" : "Верзија",
@@ -33,13 +43,16 @@
"Pending" : "Чекање",
"Details" : "Детали",
"Hide details" : "Сокриј детали",
+ "Pattern" : "Шаблон",
"by" : "од",
+ "Label" : "Ознака",
"Save" : "Зачувај",
"Cancel" : "Откажи",
"Settings" : "Параметри",
"Unshare" : "Несподелувај",
"Account" : "Сметка",
"Password" : "Лозинка",
+ "OTP" : "OTP",
"E-mail" : "е-пошта",
"URL" : "Адреса",
"Notes" : "Белешки",
@@ -51,14 +64,17 @@
"Decline" : "Одбиј",
"Never" : "Никогаш",
"Logout" : "Одјава",
+ "Donate" : "Донирај",
"Tags" : "Ознаки",
+ "Expired" : "Истечен",
"Loading…" : "Се вчитува…",
"email" : "е-пошта",
"Description" : "Опис",
"You created %1$s" : "Креиравте %1$s",
"You deleted %1$s" : "Избришавте %1$s",
+ "Expires:" : "Истекува",
"Connection to server lost" : "Изгубена е врската со серверот",
- "Saving..." : "Зачувува ...",
+ "Saving …" : "Зачувува ...",
"Dismiss" : "Отфрли",
"seconds ago" : "пред неколку секунди"
},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"
diff --git a/l10n/ms_MY.js b/l10n/ms_MY.js
index 85abeb7c..886a14f4 100644
--- a/l10n/ms_MY.js
+++ b/l10n/ms_MY.js
@@ -27,7 +27,6 @@ OC.L10N.register(
"Share" : "Kongsi",
"Date" : "Date",
"Description" : "Keterangan",
- "You created %1$s" : "Anda telah membina %1$s",
- "Saving..." : "Sedang menyimpan..."
+ "You created %1$s" : "Anda telah membina %1$s"
},
"nplurals=1; plural=0;");
diff --git a/l10n/ms_MY.json b/l10n/ms_MY.json
index d25c7333..3e8dca02 100644
--- a/l10n/ms_MY.json
+++ b/l10n/ms_MY.json
@@ -25,7 +25,6 @@
"Share" : "Kongsi",
"Date" : "Date",
"Description" : "Keterangan",
- "You created %1$s" : "Anda telah membina %1$s",
- "Saving..." : "Sedang menyimpan..."
+ "You created %1$s" : "Anda telah membina %1$s"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/l10n/nb.js b/l10n/nb.js
index a8106ed7..34992260 100644
--- a/l10n/nb.js
+++ b/l10n/nb.js
@@ -320,7 +320,7 @@ OC.L10N.register(
"Loading&hellip;" : "Laster&hellip;",
"Connection to server lost" : "Mistet tilkobling til serveren",
"Problem loading page, reloading in 5 seconds" : "Problem ved lasting av side, laster på nytt om 5 sekunder",
- "Saving..." : "Lagrer…",
+ "Saving …" : "Lagrer...",
"Dismiss" : "Forkast",
"seconds ago" : "sekunder siden"
},
diff --git a/l10n/nb.json b/l10n/nb.json
index 4f87572a..f9c10237 100644
--- a/l10n/nb.json
+++ b/l10n/nb.json
@@ -318,7 +318,7 @@
"Loading&hellip;" : "Laster&hellip;",
"Connection to server lost" : "Mistet tilkobling til serveren",
"Problem loading page, reloading in 5 seconds" : "Problem ved lasting av side, laster på nytt om 5 sekunder",
- "Saving..." : "Lagrer…",
+ "Saving …" : "Lagrer...",
"Dismiss" : "Forkast",
"seconds ago" : "sekunder siden"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/nl.js b/l10n/nl.js
index 1025e947..e4516e63 100644
--- a/l10n/nl.js
+++ b/l10n/nl.js
@@ -293,12 +293,11 @@ OC.L10N.register(
"Click here to request it" : "Klik hier om het aan te vragen",
"Loading…" : "Laden...",
"Awwhh… credential not found. Maybe it expired" : "Awwhh… inloggegevens niet gevonden. Misschien verliepen ze.",
- "Compromise!" : "Datalek!",
+ "Mark as Compromised" : "Markeren als gecompromitteerd",
"Compromised!" : "Uitgelekt!",
"This password is compromised. You can only remove this warning by changing the password." : "Dit wachtwoord is uitgelekt. Je kunt deze melding alleen verwijderen door je wachtwoord te wijzigen.",
"email" : "e-mailadres",
"Description" : "Beschrijving",
- "Url" : "Url",
"Custom Search:" : "Maatwerk zoekopdracht:",
"Revert to defaults" : "Standaard instellingen herstellen",
"Error while saving field" : "Fout bij opslaan veld",
@@ -361,7 +360,7 @@ OC.L10N.register(
"Expires:" : "Vervalt:",
"Connection to server lost" : "Verbinding met server verloren",
"Problem loading page, reloading in 5 seconds" : "Probleem met het laden van de pagina, wordt ververst in 5 seconden",
- "Saving..." : "Opslaan...",
+ "Saving …" : "Opslaan ...",
"Dismiss" : "Negeren",
"seconds ago" : "seconden geleden"
},
diff --git a/l10n/nl.json b/l10n/nl.json
index 12960d2f..d24fa947 100644
--- a/l10n/nl.json
+++ b/l10n/nl.json
@@ -291,12 +291,11 @@
"Click here to request it" : "Klik hier om het aan te vragen",
"Loading…" : "Laden...",
"Awwhh… credential not found. Maybe it expired" : "Awwhh… inloggegevens niet gevonden. Misschien verliepen ze.",
- "Compromise!" : "Datalek!",
+ "Mark as Compromised" : "Markeren als gecompromitteerd",
"Compromised!" : "Uitgelekt!",
"This password is compromised. You can only remove this warning by changing the password." : "Dit wachtwoord is uitgelekt. Je kunt deze melding alleen verwijderen door je wachtwoord te wijzigen.",
"email" : "e-mailadres",
"Description" : "Beschrijving",
- "Url" : "Url",
"Custom Search:" : "Maatwerk zoekopdracht:",
"Revert to defaults" : "Standaard instellingen herstellen",
"Error while saving field" : "Fout bij opslaan veld",
@@ -359,7 +358,7 @@
"Expires:" : "Vervalt:",
"Connection to server lost" : "Verbinding met server verloren",
"Problem loading page, reloading in 5 seconds" : "Probleem met het laden van de pagina, wordt ververst in 5 seconden",
- "Saving..." : "Opslaan...",
+ "Saving …" : "Opslaan ...",
"Dismiss" : "Negeren",
"seconds ago" : "seconden geleden"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/nn_NO.js b/l10n/nn_NO.js
index 934c2bab..d0031936 100644
--- a/l10n/nn_NO.js
+++ b/l10n/nn_NO.js
@@ -41,7 +41,6 @@ OC.L10N.register(
"Description" : "Skildring",
"You created %1$s" : "Du oppretta %1$s",
"You deleted %1$s" : "Du sletta %1$s",
- "Saving..." : "Lagrar …",
"Dismiss" : "Forkast",
"seconds ago" : "sekund sidan"
},
diff --git a/l10n/nn_NO.json b/l10n/nn_NO.json
index efdb656e..664e6f1f 100644
--- a/l10n/nn_NO.json
+++ b/l10n/nn_NO.json
@@ -39,7 +39,6 @@
"Description" : "Skildring",
"You created %1$s" : "Du oppretta %1$s",
"You deleted %1$s" : "Du sletta %1$s",
- "Saving..." : "Lagrar …",
"Dismiss" : "Forkast",
"seconds ago" : "sekund sidan"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/oc.js b/l10n/oc.js
index 05d78959..954321f4 100644
--- a/l10n/oc.js
+++ b/l10n/oc.js
@@ -4,6 +4,7 @@ OC.L10N.register(
"General" : "Generals",
"Done" : "Done",
"Settings saved" : "Paramètres enregistrats",
+ "Password settings" : "Paramètres de senhal",
"Sharing" : "Partiment",
"Share link" : "Partejar lo ligam",
"Username" : "Nom d'utilizaire",
@@ -13,7 +14,9 @@ OC.L10N.register(
"Actions" : "Accions",
"Size" : "Talha",
"Expiration date" : "Data d'expiracion",
+ "Password length" : "Longor de senhal",
"Export" : "Exportar",
+ "Processing" : "Tractament",
"Import" : "Importar",
"Uploading" : "Uploading",
"User" : "User",
@@ -33,10 +36,14 @@ OC.L10N.register(
"Share" : "Partejar",
"Date" : "Date",
"Never" : "Pas jamais",
+ "Cancel destruction request" : "Anullar requèsta de destruccion",
+ "Logout" : "Desconnexion",
"Loading…" : "Cargament...",
"Description" : "Descripcion",
- "Saving..." : "Enregistrament...",
+ "You created %1$s" : "Avètz creat %1$s",
+ "You deleted %1$s" : "Avètz suprimit %1$s",
+ "Passwords" : "Senhals",
"Dismiss" : "Ignorar",
- "seconds ago" : "i a qualques segondas"
+ "seconds ago" : "fa qualques segondas"
},
"nplurals=2; plural=(n > 1);");
diff --git a/l10n/oc.json b/l10n/oc.json
index 0f3f3048..953238dd 100644
--- a/l10n/oc.json
+++ b/l10n/oc.json
@@ -2,6 +2,7 @@
"General" : "Generals",
"Done" : "Done",
"Settings saved" : "Paramètres enregistrats",
+ "Password settings" : "Paramètres de senhal",
"Sharing" : "Partiment",
"Share link" : "Partejar lo ligam",
"Username" : "Nom d'utilizaire",
@@ -11,7 +12,9 @@
"Actions" : "Accions",
"Size" : "Talha",
"Expiration date" : "Data d'expiracion",
+ "Password length" : "Longor de senhal",
"Export" : "Exportar",
+ "Processing" : "Tractament",
"Import" : "Importar",
"Uploading" : "Uploading",
"User" : "User",
@@ -31,10 +34,14 @@
"Share" : "Partejar",
"Date" : "Date",
"Never" : "Pas jamais",
+ "Cancel destruction request" : "Anullar requèsta de destruccion",
+ "Logout" : "Desconnexion",
"Loading…" : "Cargament...",
"Description" : "Descripcion",
- "Saving..." : "Enregistrament...",
+ "You created %1$s" : "Avètz creat %1$s",
+ "You deleted %1$s" : "Avètz suprimit %1$s",
+ "Passwords" : "Senhals",
"Dismiss" : "Ignorar",
- "seconds ago" : "i a qualques segondas"
+ "seconds ago" : "fa qualques segondas"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/l10n/pl.js b/l10n/pl.js
index e06790f1..bad8295e 100644
--- a/l10n/pl.js
+++ b/l10n/pl.js
@@ -36,7 +36,7 @@ OC.L10N.register(
"The first 5 lines of the CSV are shown." : "Wyświetlono pierwsze 5 linii pliku CSV.",
"Assign the proper fields to each column." : "Przypisz właściwe pola każdej kolumnie.",
"Example of imported credential" : "Przykładowe zaimportowane poświadczenia",
- "Missing an importer? Try it with the generic CSV importer." : "Brakuje jakiegoś importera? Spróbuj z domyślnym importerem CSV.",
+ "Missing an importer? Try it with the generic CSV importer." : "Brakuje jakiegoś importera? Spróbuj z ogólnym importerem CSV.",
"Go back to importers." : "Wróć do mechanizmów importujących.",
"Revision deleted" : "Wersja skasowana",
"Revision restored" : "Wersja przywrócona",
@@ -130,7 +130,7 @@ OC.L10N.register(
"Total progress" : "Postęp całowity",
"About Passman" : "O Passmanie",
"Version" : "Wersja",
- "Donate to support development" : "Dotuj, aby wesprzeć programistów",
+ "Donate to support development" : "Wesprzyj programistów",
"Bookmarklet" : "Skryptozakładka",
"Save your passwords with one click." : "Zapisuj swoje hasła jednym kliknięciem.",
"Drag below button to your bookmark toolbar." : "Przesuń poniższy przycisk na pasek zakładek.",
@@ -150,7 +150,7 @@ OC.L10N.register(
"Save keys" : "Zapisz klucze",
"Generate sharing keys" : "Generuj klucze współdzielone",
"Generating sharing keys" : "Generowanie klucze współdzielone",
- "The password tool scans your password, calculates average cracking time, listing those below the threshold" : "To narzędzie skanuje twoje hasło, oblicza średni czas złamania go, wylicza wartości poniżej progu",
+ "The password tool scans your password, calculates average cracking time, listing those below the threshold" : "To narzędzie skanuje Twoje hasło, oblicza średni czas złamania go, wylicza wartości poniżej progu",
"Minimum password stength" : "Minimalna siła hasła",
"Start scan" : "Rozpocznij skanowanie",
"Result" : "Wynik",
@@ -172,7 +172,7 @@ OC.L10N.register(
"Enable link sharing" : "Włącz udostępnianie linkiem",
"Share until date" : "Udostępniaj do daty",
"Expire after views" : "Wygaś po oglądaniu",
- "Click \\\"Share\\\" first" : "Najpierw zaznacz \"Włącz link...\"",
+ "Click \\\"Share\\\" first" : "Najpierw kliknij \"Udostępnij\"",
"Show files" : "Pokaż pliki",
"Details" : "Szczegóły",
"Hide details" : "Ukryj szczegóły",
@@ -255,7 +255,7 @@ OC.L10N.register(
"Password strength must be at least: {{strength}}" : "Siła hasła musi być przynajmniej: {{strength}}",
"Please give your new vault a name." : "Proszę nadaj nazwę nowemu sejfowi.",
"Repeat vault password" : "Powtórz hasło sejfu",
- "Your sharing keys will have a strength of 1024 bit, which you can change in \\\"Settings\\\" later ." : "Twoje klucze udostępniania będą miały długość 1024 bitów. Możesz później zmienić tę wartość w \"Ustawienia \".",
+ "Your sharing keys will have a strength of 1024 bit, which you can change in \\\"Settings\\\" later ." : "Twoje klucze udostępniania będą miały długość 1024 bitów. Możesz później zmienić tę wartość w \"Ustawienia\".",
"Create vault" : "Utwórz nowy sejf",
"Go back to vaults" : "Wróć do sejfów",
"Please input the password for" : "Proszę wprowadzić hasło do",
@@ -279,7 +279,7 @@ OC.L10N.register(
"Change vault" : "Zmień sejf",
"Deleted credentials" : "Usunięte poświadczenia",
"Logout" : "Wyloguj",
- "Donate" : "Dotuj",
+ "Donate" : "Dotacja",
"Show All" : "Pokaż wszystko",
"Tags" : "Etykiety",
"Search Tags" : "Szukaj etykiet",
@@ -288,17 +288,16 @@ OC.L10N.register(
"Bad Strength" : "Słaba siła hasła",
"Expired" : "Przedawnione hasła",
"Filter Tags" : "Filtruj etykiety",
- "Simple Navigation" : "Nawigacja prosta",
+ "Simple Navigation" : "Prosta nawigacja",
"Someone has shared a credential with you." : "Ktoś udostępnił Tobie poświadczenie.",
"Click here to request it" : "Kliknij tutaj, aby o to poprosić",
"Loading…" : "Ładowanie…",
"Awwhh… credential not found. Maybe it expired" : "Ups… poświadczenie nie znalezione. Może wygasło.",
- "Compromise!" : "Kompromis!",
+ "Mark as Compromised" : "Oznacz jako zagrożone",
"Compromised!" : "Zagrożone!",
"This password is compromised. You can only remove this warning by changing the password." : "To hasło jest zagrożone. Możesz usunąć to ostrzeżenie, zmieniając hasło.",
"email" : "e-mail",
"Description" : "Opis",
- "Url" : "URL",
"Custom Search:" : "Nietypowe wyszukiwanie:",
"Revert to defaults" : "Przywróć ustawienia domyślne",
"Error while saving field" : "Błąd podczas zapisywania pola",
@@ -355,13 +354,13 @@ OC.L10N.register(
"Request ID" : "Identyfikator prośby",
"Requested by" : "Prośba złożona przez",
"Reason" : "Powód",
- "Click here to request\n\t\t\t\t\tit" : "Kliknij tutaj aby poprosić o\n\t\t\t\t\t",
+ "Click here to request\n\t\t\t\t\tit" : "Kliknij tutaj, aby poprosić o\n\t\t\t\t\t",
"Loading&hellip;" : "Ładowanie&hellip;",
"Awwhh… could not find the credential. Maybe it expired?" : "Oj… nie można znaleźć poświadczeń. Może uległy przedawnieniu?",
"Expires:" : "Wygasa:",
"Connection to server lost" : "Utracono połączenie z serwerem",
"Problem loading page, reloading in 5 seconds" : "Problem z załadowaniem strony, przeładuję za 5 sekund",
- "Saving..." : "Zapisywanie…",
+ "Saving …" : "Zapisywanie…",
"Dismiss" : "Odrzuć",
"seconds ago" : "przed chwilą"
},
diff --git a/l10n/pl.json b/l10n/pl.json
index b610c8c5..4d8e6ef1 100644
--- a/l10n/pl.json
+++ b/l10n/pl.json
@@ -34,7 +34,7 @@
"The first 5 lines of the CSV are shown." : "Wyświetlono pierwsze 5 linii pliku CSV.",
"Assign the proper fields to each column." : "Przypisz właściwe pola każdej kolumnie.",
"Example of imported credential" : "Przykładowe zaimportowane poświadczenia",
- "Missing an importer? Try it with the generic CSV importer." : "Brakuje jakiegoś importera? Spróbuj z domyślnym importerem CSV.",
+ "Missing an importer? Try it with the generic CSV importer." : "Brakuje jakiegoś importera? Spróbuj z ogólnym importerem CSV.",
"Go back to importers." : "Wróć do mechanizmów importujących.",
"Revision deleted" : "Wersja skasowana",
"Revision restored" : "Wersja przywrócona",
@@ -128,7 +128,7 @@
"Total progress" : "Postęp całowity",
"About Passman" : "O Passmanie",
"Version" : "Wersja",
- "Donate to support development" : "Dotuj, aby wesprzeć programistów",
+ "Donate to support development" : "Wesprzyj programistów",
"Bookmarklet" : "Skryptozakładka",
"Save your passwords with one click." : "Zapisuj swoje hasła jednym kliknięciem.",
"Drag below button to your bookmark toolbar." : "Przesuń poniższy przycisk na pasek zakładek.",
@@ -148,7 +148,7 @@
"Save keys" : "Zapisz klucze",
"Generate sharing keys" : "Generuj klucze współdzielone",
"Generating sharing keys" : "Generowanie klucze współdzielone",
- "The password tool scans your password, calculates average cracking time, listing those below the threshold" : "To narzędzie skanuje twoje hasło, oblicza średni czas złamania go, wylicza wartości poniżej progu",
+ "The password tool scans your password, calculates average cracking time, listing those below the threshold" : "To narzędzie skanuje Twoje hasło, oblicza średni czas złamania go, wylicza wartości poniżej progu",
"Minimum password stength" : "Minimalna siła hasła",
"Start scan" : "Rozpocznij skanowanie",
"Result" : "Wynik",
@@ -170,7 +170,7 @@
"Enable link sharing" : "Włącz udostępnianie linkiem",
"Share until date" : "Udostępniaj do daty",
"Expire after views" : "Wygaś po oglądaniu",
- "Click \\\"Share\\\" first" : "Najpierw zaznacz \"Włącz link...\"",
+ "Click \\\"Share\\\" first" : "Najpierw kliknij \"Udostępnij\"",
"Show files" : "Pokaż pliki",
"Details" : "Szczegóły",
"Hide details" : "Ukryj szczegóły",
@@ -253,7 +253,7 @@
"Password strength must be at least: {{strength}}" : "Siła hasła musi być przynajmniej: {{strength}}",
"Please give your new vault a name." : "Proszę nadaj nazwę nowemu sejfowi.",
"Repeat vault password" : "Powtórz hasło sejfu",
- "Your sharing keys will have a strength of 1024 bit, which you can change in \\\"Settings\\\" later ." : "Twoje klucze udostępniania będą miały długość 1024 bitów. Możesz później zmienić tę wartość w \"Ustawienia \".",
+ "Your sharing keys will have a strength of 1024 bit, which you can change in \\\"Settings\\\" later ." : "Twoje klucze udostępniania będą miały długość 1024 bitów. Możesz później zmienić tę wartość w \"Ustawienia\".",
"Create vault" : "Utwórz nowy sejf",
"Go back to vaults" : "Wróć do sejfów",
"Please input the password for" : "Proszę wprowadzić hasło do",
@@ -277,7 +277,7 @@
"Change vault" : "Zmień sejf",
"Deleted credentials" : "Usunięte poświadczenia",
"Logout" : "Wyloguj",
- "Donate" : "Dotuj",
+ "Donate" : "Dotacja",
"Show All" : "Pokaż wszystko",
"Tags" : "Etykiety",
"Search Tags" : "Szukaj etykiet",
@@ -286,17 +286,16 @@
"Bad Strength" : "Słaba siła hasła",
"Expired" : "Przedawnione hasła",
"Filter Tags" : "Filtruj etykiety",
- "Simple Navigation" : "Nawigacja prosta",
+ "Simple Navigation" : "Prosta nawigacja",
"Someone has shared a credential with you." : "Ktoś udostępnił Tobie poświadczenie.",
"Click here to request it" : "Kliknij tutaj, aby o to poprosić",
"Loading…" : "Ładowanie…",
"Awwhh… credential not found. Maybe it expired" : "Ups… poświadczenie nie znalezione. Może wygasło.",
- "Compromise!" : "Kompromis!",
+ "Mark as Compromised" : "Oznacz jako zagrożone",
"Compromised!" : "Zagrożone!",
"This password is compromised. You can only remove this warning by changing the password." : "To hasło jest zagrożone. Możesz usunąć to ostrzeżenie, zmieniając hasło.",
"email" : "e-mail",
"Description" : "Opis",
- "Url" : "URL",
"Custom Search:" : "Nietypowe wyszukiwanie:",
"Revert to defaults" : "Przywróć ustawienia domyślne",
"Error while saving field" : "Błąd podczas zapisywania pola",
@@ -353,13 +352,13 @@
"Request ID" : "Identyfikator prośby",
"Requested by" : "Prośba złożona przez",
"Reason" : "Powód",
- "Click here to request\n\t\t\t\t\tit" : "Kliknij tutaj aby poprosić o\n\t\t\t\t\t",
+ "Click here to request\n\t\t\t\t\tit" : "Kliknij tutaj, aby poprosić o\n\t\t\t\t\t",
"Loading&hellip;" : "Ładowanie&hellip;",
"Awwhh… could not find the credential. Maybe it expired?" : "Oj… nie można znaleźć poświadczeń. Może uległy przedawnieniu?",
"Expires:" : "Wygasa:",
"Connection to server lost" : "Utracono połączenie z serwerem",
"Problem loading page, reloading in 5 seconds" : "Problem z załadowaniem strony, przeładuję za 5 sekund",
- "Saving..." : "Zapisywanie…",
+ "Saving …" : "Zapisywanie…",
"Dismiss" : "Odrzuć",
"seconds ago" : "przed chwilą"
},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"
diff --git a/l10n/pt_BR.js b/l10n/pt_BR.js
index 7445078b..c9f3708f 100644
--- a/l10n/pt_BR.js
+++ b/l10n/pt_BR.js
@@ -293,12 +293,11 @@ OC.L10N.register(
"Click here to request it" : "Clique aqui para solicitá-lo",
"Loading…" : "Carregando...",
"Awwhh… credential not found. Maybe it expired" : "Awwhh ... credencial não encontrada. Talvez tenha expirado",
- "Compromise!" : "Comprometer!",
+ "Mark as Compromised" : "Marcar como comprometido",
"Compromised!" : "Comprometido!",
"This password is compromised. You can only remove this warning by changing the password." : "Esta senha está comprometida. Você só pode remover esse aviso alterando a senha.",
"email" : "e-mail",
"Description" : "Descrição",
- "Url" : "Url",
"Custom Search:" : "Pesquisa Personalizada:",
"Revert to defaults" : "Reverter aos padrões",
"Error while saving field" : "Erro ao salvar o campo",
@@ -361,7 +360,7 @@ OC.L10N.register(
"Expires:" : "Expira em:",
"Connection to server lost" : "Conexão perdida com o servidor",
"Problem loading page, reloading in 5 seconds" : "Problema ao carregar a página, recarregando em 5 segundos",
- "Saving..." : "Salvando...",
+ "Saving …" : "Salvando...",
"Dismiss" : "Descartar",
"seconds ago" : "segundos atras"
},
diff --git a/l10n/pt_BR.json b/l10n/pt_BR.json
index 8a2a181e..563fa3f9 100644
--- a/l10n/pt_BR.json
+++ b/l10n/pt_BR.json
@@ -291,12 +291,11 @@
"Click here to request it" : "Clique aqui para solicitá-lo",
"Loading…" : "Carregando...",
"Awwhh… credential not found. Maybe it expired" : "Awwhh ... credencial não encontrada. Talvez tenha expirado",
- "Compromise!" : "Comprometer!",
+ "Mark as Compromised" : "Marcar como comprometido",
"Compromised!" : "Comprometido!",
"This password is compromised. You can only remove this warning by changing the password." : "Esta senha está comprometida. Você só pode remover esse aviso alterando a senha.",
"email" : "e-mail",
"Description" : "Descrição",
- "Url" : "Url",
"Custom Search:" : "Pesquisa Personalizada:",
"Revert to defaults" : "Reverter aos padrões",
"Error while saving field" : "Erro ao salvar o campo",
@@ -359,7 +358,7 @@
"Expires:" : "Expira em:",
"Connection to server lost" : "Conexão perdida com o servidor",
"Problem loading page, reloading in 5 seconds" : "Problema ao carregar a página, recarregando em 5 segundos",
- "Saving..." : "Salvando...",
+ "Saving …" : "Salvando...",
"Dismiss" : "Descartar",
"seconds ago" : "segundos atras"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
diff --git a/l10n/pt_PT.js b/l10n/pt_PT.js
index 449e5dd8..e91bf597 100644
--- a/l10n/pt_PT.js
+++ b/l10n/pt_PT.js
@@ -69,7 +69,6 @@ OC.L10N.register(
"Allow users on this server to share passwords with a link" : "Permitir que os utilizadores neste servidor partilhem as palavras-passe com uma hiperligação",
"Connection to server lost" : "Ligação perdida ao servidor",
"Problem loading page, reloading in 5 seconds" : "Problema a carregar a página, a recarregar em 5 segundos",
- "Saving..." : "A guardar...",
"Dismiss" : "Dispensar",
"seconds ago" : "segundos atrás"
},
diff --git a/l10n/pt_PT.json b/l10n/pt_PT.json
index ed09ea41..b06dcb5b 100644
--- a/l10n/pt_PT.json
+++ b/l10n/pt_PT.json
@@ -67,7 +67,6 @@
"Allow users on this server to share passwords with a link" : "Permitir que os utilizadores neste servidor partilhem as palavras-passe com uma hiperligação",
"Connection to server lost" : "Ligação perdida ao servidor",
"Problem loading page, reloading in 5 seconds" : "Problema a carregar a página, a recarregar em 5 segundos",
- "Saving..." : "A guardar...",
"Dismiss" : "Dispensar",
"seconds ago" : "segundos atrás"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/ro.js b/l10n/ro.js
index 00427969..03b8f69c 100644
--- a/l10n/ro.js
+++ b/l10n/ro.js
@@ -60,7 +60,7 @@ OC.L10N.register(
"Passwords" : "Parole",
"Connection to server lost" : "S-a pierdut conexiunea la server",
"Problem loading page, reloading in 5 seconds" : "A apărut o problemă la încărcarea paginii, se reîncearcă în 5 secunde",
- "Saving..." : "Se salvează...",
+ "Saving …" : "Se salvează",
"Dismiss" : "Elimină",
"seconds ago" : "secunde în urmă"
},
diff --git a/l10n/ro.json b/l10n/ro.json
index 0be0ec6c..e98f207e 100644
--- a/l10n/ro.json
+++ b/l10n/ro.json
@@ -58,7 +58,7 @@
"Passwords" : "Parole",
"Connection to server lost" : "S-a pierdut conexiunea la server",
"Problem loading page, reloading in 5 seconds" : "A apărut o problemă la încărcarea paginii, se reîncearcă în 5 secunde",
- "Saving..." : "Se salvează...",
+ "Saving …" : "Se salvează",
"Dismiss" : "Elimină",
"seconds ago" : "secunde în urmă"
},"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"
diff --git a/l10n/ru.js b/l10n/ru.js
index a0feb2ca..d2634d5f 100644
--- a/l10n/ru.js
+++ b/l10n/ru.js
@@ -293,12 +293,11 @@ OC.L10N.register(
"Click here to request it" : "Нажмите здесь для их получения.",
"Loading…" : "Загрузка…",
"Awwhh… credential not found. Maybe it expired" : "Запись не найдена. Возможно, закончился срок её действия.",
- "Compromise!" : "Компрометация",
+ "Mark as Compromised" : "Отметить как скомпрометированный",
"Compromised!" : "Скомпрометирован!",
"This password is compromised. You can only remove this warning by changing the password." : "Этот пароль скомпрометирован. Единственный способ скрыть этот предупреждение — сменить пароль.",
"email" : "эл. почта",
"Description" : "Описание",
- "Url" : "URL",
"Custom Search:" : "Пользовательский поиск",
"Revert to defaults" : "Сбросить к значениям по умолчанию",
"Error while saving field" : "Ошибка при сохранении поля",
@@ -361,7 +360,7 @@ OC.L10N.register(
"Expires:" : "Истекает:",
"Connection to server lost" : "Подключение к серверу потеряно",
"Problem loading page, reloading in 5 seconds" : "Проблема при загрузке страницы, перезагрузка через 5 сек.",
- "Saving..." : "Сохранение…",
+ "Saving …" : "Сохранение…",
"Dismiss" : "Закрыть",
"seconds ago" : "несколько секунд назад"
},
diff --git a/l10n/ru.json b/l10n/ru.json
index cfa90804..744e2b8d 100644
--- a/l10n/ru.json
+++ b/l10n/ru.json
@@ -291,12 +291,11 @@
"Click here to request it" : "Нажмите здесь для их получения.",
"Loading…" : "Загрузка…",
"Awwhh… credential not found. Maybe it expired" : "Запись не найдена. Возможно, закончился срок её действия.",
- "Compromise!" : "Компрометация",
+ "Mark as Compromised" : "Отметить как скомпрометированный",
"Compromised!" : "Скомпрометирован!",
"This password is compromised. You can only remove this warning by changing the password." : "Этот пароль скомпрометирован. Единственный способ скрыть этот предупреждение — сменить пароль.",
"email" : "эл. почта",
"Description" : "Описание",
- "Url" : "URL",
"Custom Search:" : "Пользовательский поиск",
"Revert to defaults" : "Сбросить к значениям по умолчанию",
"Error while saving field" : "Ошибка при сохранении поля",
@@ -359,7 +358,7 @@
"Expires:" : "Истекает:",
"Connection to server lost" : "Подключение к серверу потеряно",
"Problem loading page, reloading in 5 seconds" : "Проблема при загрузке страницы, перезагрузка через 5 сек.",
- "Saving..." : "Сохранение…",
+ "Saving …" : "Сохранение…",
"Dismiss" : "Закрыть",
"seconds ago" : "несколько секунд назад"
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
diff --git a/l10n/sc.js b/l10n/sc.js
new file mode 100644
index 00000000..1ad5b505
--- /dev/null
+++ b/l10n/sc.js
@@ -0,0 +1,28 @@
+OC.L10N.register(
+ "passman",
+ {
+ "Sharing" : "Cumpartzidura",
+ "Share link" : "Cumpartzi ligòngiu",
+ "Username" : "Nùmene utente",
+ "Text" : "Testu",
+ "Add" : "Agiunghe",
+ "Size" : "Mannària",
+ "Secret" : "Segretu",
+ "Export" : "Esporta",
+ "Bookmarklet" : "Bookmarklet",
+ "Import" : "Importa",
+ "Details" : "Detàllios",
+ "Save" : "Sarva",
+ "Cancel" : "Annulla",
+ "Settings" : "Impostatziones",
+ "Password" : "Crae",
+ "URL" : "URL",
+ "Notes" : "Notas",
+ "Edit" : "Modìfica ",
+ "Delete" : "Cantzella",
+ "Accept" : "Atzeta",
+ "Tags" : "Etichetas",
+ "Loading…" : "Carrighende...",
+ "Description" : "Descritzione"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/l10n/sc.json b/l10n/sc.json
new file mode 100644
index 00000000..f154bd51
--- /dev/null
+++ b/l10n/sc.json
@@ -0,0 +1,26 @@
+{ "translations": {
+ "Sharing" : "Cumpartzidura",
+ "Share link" : "Cumpartzi ligòngiu",
+ "Username" : "Nùmene utente",
+ "Text" : "Testu",
+ "Add" : "Agiunghe",
+ "Size" : "Mannària",
+ "Secret" : "Segretu",
+ "Export" : "Esporta",
+ "Bookmarklet" : "Bookmarklet",
+ "Import" : "Importa",
+ "Details" : "Detàllios",
+ "Save" : "Sarva",
+ "Cancel" : "Annulla",
+ "Settings" : "Impostatziones",
+ "Password" : "Crae",
+ "URL" : "URL",
+ "Notes" : "Notas",
+ "Edit" : "Modìfica ",
+ "Delete" : "Cantzella",
+ "Accept" : "Atzeta",
+ "Tags" : "Etichetas",
+ "Loading…" : "Carrighende...",
+ "Description" : "Descritzione"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/l10n/si.js b/l10n/si.js
new file mode 100644
index 00000000..cafb9b58
--- /dev/null
+++ b/l10n/si.js
@@ -0,0 +1,38 @@
+OC.L10N.register(
+ "passman",
+ {
+ "General" : "සමාන්‍යය",
+ "Good" : "හොඳයි",
+ "Username" : "පරිශීලක නාමය",
+ "Add" : "එකතු කරන්න",
+ "Value" : "අගය",
+ "Actions" : "ක්‍රියාමාර්ග",
+ "Empty" : "හිස්",
+ "Filename" : "ගොනු නාමය",
+ "Size" : "ප්‍රමාණය",
+ "Secret" : "රහස",
+ "Disabled" : "අබල කර ඇත",
+ "Version" : "අනුවාදය",
+ "Uploading" : "උඩුගත වෙමින්",
+ "User" : "පරිශීලක",
+ "Read" : "කියවීම",
+ "Write" : "ලිවීම",
+ "Files" : "ගොනු",
+ "Details" : "විස්තර",
+ "Save" : "සුරකින්න",
+ "Cancel" : "අවලංගු කරන්න",
+ "Settings" : "සැකසුම්",
+ "Account" : "ගිණුම",
+ "Password" : "මුර පදය",
+ "E-mail" : "විද්‍යුත් තැපෑල",
+ "Notes" : "සටහන්",
+ "Edit" : "සංස්කරණය",
+ "Share" : "බෙදාගන්න",
+ "Date" : "දිනය",
+ "Accept" : "පිළිගන්න",
+ "Decline" : "ප්‍රතික්ෂේප",
+ "Loading…" : "පූරණය වෙමින්…",
+ "Description" : "විස්තරය",
+ "seconds ago" : "තත්පර කිහිපයකට පෙර"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/l10n/si.json b/l10n/si.json
new file mode 100644
index 00000000..7a37c1c3
--- /dev/null
+++ b/l10n/si.json
@@ -0,0 +1,36 @@
+{ "translations": {
+ "General" : "සමාන්‍යය",
+ "Good" : "හොඳයි",
+ "Username" : "පරිශීලක නාමය",
+ "Add" : "එකතු කරන්න",
+ "Value" : "අගය",
+ "Actions" : "ක්‍රියාමාර්ග",
+ "Empty" : "හිස්",
+ "Filename" : "ගොනු නාමය",
+ "Size" : "ප්‍රමාණය",
+ "Secret" : "රහස",
+ "Disabled" : "අබල කර ඇත",
+ "Version" : "අනුවාදය",
+ "Uploading" : "උඩුගත වෙමින්",
+ "User" : "පරිශීලක",
+ "Read" : "කියවීම",
+ "Write" : "ලිවීම",
+ "Files" : "ගොනු",
+ "Details" : "විස්තර",
+ "Save" : "සුරකින්න",
+ "Cancel" : "අවලංගු කරන්න",
+ "Settings" : "සැකසුම්",
+ "Account" : "ගිණුම",
+ "Password" : "මුර පදය",
+ "E-mail" : "විද්‍යුත් තැපෑල",
+ "Notes" : "සටහන්",
+ "Edit" : "සංස්කරණය",
+ "Share" : "බෙදාගන්න",
+ "Date" : "දිනය",
+ "Accept" : "පිළිගන්න",
+ "Decline" : "ප්‍රතික්ෂේප",
+ "Loading…" : "පූරණය වෙමින්…",
+ "Description" : "විස්තරය",
+ "seconds ago" : "තත්පර කිහිපයකට පෙර"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/l10n/sk.js b/l10n/sk.js
index 929b37c7..2264a02c 100644
--- a/l10n/sk.js
+++ b/l10n/sk.js
@@ -293,12 +293,11 @@ OC.L10N.register(
"Click here to request it" : "Kliknite sem pre vytvorenie požiadavky",
"Loading…" : "Načítavam...",
"Awwhh… credential not found. Maybe it expired" : "Prihlasovací údaj nenájdený. Je možné že mu skončila platnosť.",
- "Compromise!" : "Kompromis!",
+ "Mark as Compromised" : "Označiť ako kompromitované",
"Compromised!" : "Ohrozené!",
"This password is compromised. You can only remove this warning by changing the password." : "Toto heslo je ohrozené. Toto upozornenie môžete odstrániť iba zmenou hesla.",
"email" : "E-mail",
"Description" : "Popis",
- "Url" : "URL",
"Custom Search:" : "Vlastné vyhľadávanie:",
"Revert to defaults" : "Vrátiť sa k predvoleným hodnotám",
"Error while saving field" : "Chyba počas ukladania poľa",
@@ -361,7 +360,7 @@ OC.L10N.register(
"Expires:" : "Platnosť končí:",
"Connection to server lost" : "Stratené spojenie so serverom",
"Problem loading page, reloading in 5 seconds" : "Nastal problém pri načítaní stránky, pokus sa zopakuje o 5 sekúnd",
- "Saving..." : "Ukladám...",
+ "Saving …" : "Ukladá sa...",
"Dismiss" : "Odmietnuť",
"seconds ago" : "pred sekundami"
},
diff --git a/l10n/sk.json b/l10n/sk.json
index 3104a0b7..f39b5b80 100644
--- a/l10n/sk.json
+++ b/l10n/sk.json
@@ -291,12 +291,11 @@
"Click here to request it" : "Kliknite sem pre vytvorenie požiadavky",
"Loading…" : "Načítavam...",
"Awwhh… credential not found. Maybe it expired" : "Prihlasovací údaj nenájdený. Je možné že mu skončila platnosť.",
- "Compromise!" : "Kompromis!",
+ "Mark as Compromised" : "Označiť ako kompromitované",
"Compromised!" : "Ohrozené!",
"This password is compromised. You can only remove this warning by changing the password." : "Toto heslo je ohrozené. Toto upozornenie môžete odstrániť iba zmenou hesla.",
"email" : "E-mail",
"Description" : "Popis",
- "Url" : "URL",
"Custom Search:" : "Vlastné vyhľadávanie:",
"Revert to defaults" : "Vrátiť sa k predvoleným hodnotám",
"Error while saving field" : "Chyba počas ukladania poľa",
@@ -359,7 +358,7 @@
"Expires:" : "Platnosť končí:",
"Connection to server lost" : "Stratené spojenie so serverom",
"Problem loading page, reloading in 5 seconds" : "Nastal problém pri načítaní stránky, pokus sa zopakuje o 5 sekúnd",
- "Saving..." : "Ukladám...",
+ "Saving …" : "Ukladá sa...",
"Dismiss" : "Odmietnuť",
"seconds ago" : "pred sekundami"
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"
diff --git a/l10n/sl.js b/l10n/sl.js
index 9e432920..de0eb18c 100644
--- a/l10n/sl.js
+++ b/l10n/sl.js
@@ -30,7 +30,7 @@ OC.L10N.register(
"Importing" : "Poteka uvažanje",
"Start import" : "Začetek uvoza",
"Select CSV file" : "Izbor datoteke CSV",
- "Parsed {{rows}} lines from CSV file" : "Razčlenjenih {{rows}} vrstic iz CSV datoteke",
+ "Parsed {{rows}} lines from CSV file" : "Razčlenjenih je {{rows}} vrstic iz datoteke CSV",
"Skip first row" : "Preskoči prvo vrstico",
"You need to assign the label field before you can start the import." : "Pred uvozom je treba najprej določiti polje z oznako.",
"The first 5 lines of the CSV are shown." : "Prikazanih je prvih 5 vrstic datoteke CSV.",
@@ -99,7 +99,7 @@ OC.L10N.register(
"Issuer" : "Izdajatelj",
"Secret" : "Skrivna koda",
"Expiration date" : "Datum preteka",
- "No expiration date set" : "Datum poteka ni določen",
+ "No expiration date set" : "Datum preteka ni določen",
"Renew interval" : "Časovni razmik obnovitve",
"Disabled" : "Onemogočeno",
"Day(s)" : "Dnevi",
@@ -154,6 +154,7 @@ OC.L10N.register(
"Minimum password stength" : "Najmanjša moč gesla",
"Start scan" : "Začni pregled",
"Result" : "Rezultat",
+ "A total of {{scan_result}} weak credentials were found." : "Najdenih je skupino {{scan_result}} šibkih poveril.",
"Score" : "Ocena",
"Action" : "Dejanje",
"Search users…" : "Poišči uporabnike ...",
@@ -170,7 +171,7 @@ OC.L10N.register(
"Pending" : "Na čakanju ...",
"Enable link sharing" : "Omogoči souporabo povezave",
"Share until date" : "Omogoči souporabo do datuma",
- "Expire after views" : "Povezava naj poteče po številu ogledov",
+ "Expire after views" : "Povezava naj preteče po določenem številu ogledov",
"Click \\\"Share\\\" first" : "Najprej je treba izbrati \\\"Souporabo\\\"",
"Show files" : "Pokaži datoteke",
"Details" : "Podrobnosti",
@@ -178,16 +179,22 @@ OC.L10N.register(
"Password score" : "Ocena gesla",
"Cracking times" : "Čas zloma zaščite",
"100 / hour" : "100 / uro",
+ "Throttled online attack" : "Spletni upočasnjevalni napad",
"10 / second" : "10 / sekundo",
+ "Unthrottled online attack" : "Spletni neupočasnjevalni napad",
"10k / second" : "10k / sekundo",
+ "Offline attack, slow hash, many cores" : "Nespletni napad, počasna nadzorna števila, več jeder",
"10B / second" : "10B / sekundo",
+ "Offline attack, fast hash, many cores" : "Nespletni napad, hitra nadzorna števila, več jeder",
+ "Match sequence" : "Skladno zaporedje",
+ "See match sequence" : "Pokaži skladno zaporedje",
"Pattern" : "Maska",
"Matched word" : "Skladna beseda",
"Dictionary name" : "Ime slovarja",
"Rank" : "Rang",
"Reversed" : "Obrnjeno",
"Guesses" : "Ugibanja",
- "Base guesses" : "Osnovna ugibanja",
+ "Base guesses" : "Osnovni nabor ugibanj",
"Uppercase variations" : "Različice z velikimi črkami",
"l33t-variations" : "Različice uporabe l33t",
"Showing revisions of" : "Prikaz predelave",
@@ -223,19 +230,22 @@ OC.L10N.register(
"Recover" : "Obnovi",
"Destroy" : "Uniči",
"Use regex" : "Uporabi logični izraz",
+ "You have incoming share requests." : "Prejete so zahteve za omogočanje souporabe",
"If you want to put the credential in another vault," : "Če želite postaviti poverila v drug zbirnik gesel,",
"log out of this vault and log into the vault you want the shared credential in." : "se odjavite iz trenutnega in se prijavite v tistega, ki naj bo ciljni zbirnik.",
"Permissions" : "Dovoljenja",
+ "Received from" : "Prejeto od: ",
"Date" : "Datum",
"Accept" : "Sprejmi",
"Decline" : "Zavrni",
+ "You have {{session_time}} left before logout." : "Pred odjavo imate še {{session_time}}.",
"Your vault has been locked for {{time}} because of {{tries}} failed attempts!" : "Zbirniki so zaklenjeni za {{time}} zaradi {{tries}} neuspelih poskusov!",
"Hello there!" : "Pozdravljeni!",
"It does not seem that you have any passwords. Do you want to add one?" : "Kaže, da še ni vpisanih gesel. Ali želite dodati prvo v zbirnik?",
"You don't have good credentials" : "Ni nobenega kakovostnega poverila",
"You don't have medium credentials" : "Ni nobenega zadovoljivega poverila",
"You don't have bad credentials" : "Ni nobenega slabega poverila",
- "You don't have expired credentials" : "Ni nobenega potečenega poverila",
+ "You don't have expired credentials" : "Ni nobenega pretečenega poverila",
"You don't have deleted credentials" : "Ni nobenega izbrisanega poverila",
"There are no credentials with your selected tags" : "Ni poveril, skladnih z izbrano oznako",
"There are no credentials matching" : "Ni skladnih poveril",
@@ -283,20 +293,23 @@ OC.L10N.register(
"Click here to request it" : "Kliknite za potrditev",
"Loading…" : "Poteka nalaganje …",
"Awwhh… credential not found. Maybe it expired" : "Ojoj ... poverila ni mogoče najti. Ali je morda poteklo?",
- "Compromise!" : "Označi kot ogroženo!",
+ "Mark as Compromised" : "Označi kot ogroženo",
"Compromised!" : "Označeno kot ogroženo!",
"This password is compromised. You can only remove this warning by changing the password." : "To geslo je ogroženo. Opozorilo je mogoče odstraniti le z zamenjavo gesla.",
"email" : "elektronska pošta",
"Description" : "Opis",
- "Url" : "Naslov URL",
"Custom Search:" : "Iskane po meri:",
"Revert to defaults" : "Povrni na privzeto",
"Error while saving field" : "Napaka med shranjevanjem vpisa polja",
- "A Passman item has been created, modified or deleted" : "Predmet Passman je bil ustvarjen, spremenjen ali izbrisan",
- "A Passman item has expired" : "Predmet Passman je potekel",
+ "A Passman item has been created, modified or deleted" : "Predmet Passman je bil ustvarjen, spremenjen, ali izbrisan",
+ "A Passman item has expired" : "Predmet Passman je pretekel",
+ "A Passman item has been shared" : "Predmet Passman je v souporabi",
"A Passman item has been renamed" : "Predmet Passman je preimenovan",
+ "%1$s has been created by %2$s" : "%2$s ustvari %1$s",
"You created %1$s" : "Ustvarite %1$s",
+ "%1$s has been updated by %2$s" : "%2$s posodobi %1$s",
"You updated %1$s" : "Posodobite %1$s",
+ "%2$s has revised %1$s to the revision of %3$s" : "%2$s je obnovi %1$s na predelavo %3$s",
"You reverted %1$s back to the revision of %3$s" : "Datoteko %1$s povrnete nazaj na predelavo %3$s",
"%3$s has renamed %1$s to %2$s" : "%3$s preimenuje %1$s v %2$s",
"You renamed %1$s to %2$s" : "Preimenujete %1$s v %2$s",
@@ -304,13 +317,19 @@ OC.L10N.register(
"You deleted %1$s" : "Izbrisali ste %1$s",
"%1$s has been recovered by %2$s" : " %2$s obnovi datoteko %1$s",
"You recovered %1$s" : "Obnovite predmet %1$s",
+ "%1$s has been permanently deleted by %2$s" : "%2$s trajno izbriše %1$s",
"You permanently deleted %1$s" : "Trajno izbrišete %1$s",
+ "The password of %1$s has expired, renew it now." : "Geslo za %1$s je preteklo in jo je treba obnoviti.",
+ "%s has been shared with a link" : "Datoteka »%s« je v souporabi prek povezave",
"Passwords" : "Gesla",
- "Your credential \"%s\" expired, click here to update the credential." : "Poverilo »%s« je poteklo. S klikom ga lahko obnovite.",
+ "Your credential \"%s\" expired, click here to update the credential." : "Poverilo »%s« je preteklo. S klikom ga lahko obnovite.",
"Remind me later" : "Opomni me kasneje",
"Ignore" : "Prezri",
+ "%s has declined your share request for \"%s\"." : "%s zavrne zahtevo za souporabo »%s«.",
+ "%s has accepted your share request for \"%s\"." : "%s sprejme prošnjo za souporabo »%s«.",
"Passman" : "Passman",
"Passman is a full featured password manager." : "Program Passman je zmogljivo orodje za upravljanje z gesli.",
+ "Passman is a full featured password manager.\nFeatures:\n- Vaults\n- Vault key is never sent to the server\n- Browser extension for easy access to passwords\n- Android app for on the road access\n- Credentials are client side encrypted with 256bit AES\n- Credentials are server side encrypted with 256bit AES\n- Ability to add custom fields to credentials\n- Built-in OTP (One Time Password) generator\n- Password analyzer\n- Share passwords internally and via link in a secure manner.\n- Import from various password managers (KeePass, LastPass, DashLane, ZOHO, Clipperz.is )\nFor an demo of this app visit [https://demo.passman.cc](https://demo.passman.cc)" : "Program Passman je napredni upravljalnik gesel.\nOmogoča:\n- zbirnike gesel\n- krajevno shranjevanje ključev (niso poslani na strežnik)\n- razširitev brskalnika za enostaven dostop do gesel\n- program za Android za hiter mobilni dostop\n- poverila so šifrirana na strani programa z 256bit AES\n- poverila so šifrirana na strežniški strani z 256bit AES\n- dodajanje polj poveril po meri\n- vgrajeni ustvarjalnik gesel OTP (One Time Password)\n- preičevalnik gesel\n- souporabo gesel krajevno in prek povezave na varen način\n- uvoz različnih upravljalnikov gesel (KeePass, LastPass, DashLane, ZOHO, Clipperz.is )\nZa preizkusno uporabo obiščite [https://demo.passman.cc](https://demo.passman.cc)",
"Unable to get version info" : "Ni mogoče pridobiti podrobnosti različice",
"Passman Settings" : "Nastavitve Passman",
"GitHub version:" : "Različica GitHub:",
@@ -331,11 +350,13 @@ OC.L10N.register(
"Requests to destroy vault" : "Zahteve za uničenje zbirnika",
"Request ID" : "ID zahteve",
"Reason" : "Razlog",
+ "Click here to request\n\t\t\t\t\tit" : "Kliknite za oddajo\n\t\tzahteve",
+ "Loading&hellip;" : "Poteka nalaganje &hellip;",
"Awwhh… could not find the credential. Maybe it expired?" : "Ojoj ... poverila ni mogoče najti. Ali je morda poteklo?",
"Expires:" : "Poteče:",
"Connection to server lost" : "Povezava s strežnikom je prekinjena",
"Problem loading page, reloading in 5 seconds" : "Napaka nalaganja strani! Ponovni poskus bo izveden čez 5 sekund.",
- "Saving..." : "Poteka shranjevanje ...",
+ "Saving …" : "Poteka shranjevanje ...",
"Dismiss" : "Opusti",
"seconds ago" : "pred nekaj sekundami"
},
diff --git a/l10n/sl.json b/l10n/sl.json
index 0bf29afe..f8aa0614 100644
--- a/l10n/sl.json
+++ b/l10n/sl.json
@@ -28,7 +28,7 @@
"Importing" : "Poteka uvažanje",
"Start import" : "Začetek uvoza",
"Select CSV file" : "Izbor datoteke CSV",
- "Parsed {{rows}} lines from CSV file" : "Razčlenjenih {{rows}} vrstic iz CSV datoteke",
+ "Parsed {{rows}} lines from CSV file" : "Razčlenjenih je {{rows}} vrstic iz datoteke CSV",
"Skip first row" : "Preskoči prvo vrstico",
"You need to assign the label field before you can start the import." : "Pred uvozom je treba najprej določiti polje z oznako.",
"The first 5 lines of the CSV are shown." : "Prikazanih je prvih 5 vrstic datoteke CSV.",
@@ -97,7 +97,7 @@
"Issuer" : "Izdajatelj",
"Secret" : "Skrivna koda",
"Expiration date" : "Datum preteka",
- "No expiration date set" : "Datum poteka ni določen",
+ "No expiration date set" : "Datum preteka ni določen",
"Renew interval" : "Časovni razmik obnovitve",
"Disabled" : "Onemogočeno",
"Day(s)" : "Dnevi",
@@ -152,6 +152,7 @@
"Minimum password stength" : "Najmanjša moč gesla",
"Start scan" : "Začni pregled",
"Result" : "Rezultat",
+ "A total of {{scan_result}} weak credentials were found." : "Najdenih je skupino {{scan_result}} šibkih poveril.",
"Score" : "Ocena",
"Action" : "Dejanje",
"Search users…" : "Poišči uporabnike ...",
@@ -168,7 +169,7 @@
"Pending" : "Na čakanju ...",
"Enable link sharing" : "Omogoči souporabo povezave",
"Share until date" : "Omogoči souporabo do datuma",
- "Expire after views" : "Povezava naj poteče po številu ogledov",
+ "Expire after views" : "Povezava naj preteče po določenem številu ogledov",
"Click \\\"Share\\\" first" : "Najprej je treba izbrati \\\"Souporabo\\\"",
"Show files" : "Pokaži datoteke",
"Details" : "Podrobnosti",
@@ -176,16 +177,22 @@
"Password score" : "Ocena gesla",
"Cracking times" : "Čas zloma zaščite",
"100 / hour" : "100 / uro",
+ "Throttled online attack" : "Spletni upočasnjevalni napad",
"10 / second" : "10 / sekundo",
+ "Unthrottled online attack" : "Spletni neupočasnjevalni napad",
"10k / second" : "10k / sekundo",
+ "Offline attack, slow hash, many cores" : "Nespletni napad, počasna nadzorna števila, več jeder",
"10B / second" : "10B / sekundo",
+ "Offline attack, fast hash, many cores" : "Nespletni napad, hitra nadzorna števila, več jeder",
+ "Match sequence" : "Skladno zaporedje",
+ "See match sequence" : "Pokaži skladno zaporedje",
"Pattern" : "Maska",
"Matched word" : "Skladna beseda",
"Dictionary name" : "Ime slovarja",
"Rank" : "Rang",
"Reversed" : "Obrnjeno",
"Guesses" : "Ugibanja",
- "Base guesses" : "Osnovna ugibanja",
+ "Base guesses" : "Osnovni nabor ugibanj",
"Uppercase variations" : "Različice z velikimi črkami",
"l33t-variations" : "Različice uporabe l33t",
"Showing revisions of" : "Prikaz predelave",
@@ -221,19 +228,22 @@
"Recover" : "Obnovi",
"Destroy" : "Uniči",
"Use regex" : "Uporabi logični izraz",
+ "You have incoming share requests." : "Prejete so zahteve za omogočanje souporabe",
"If you want to put the credential in another vault," : "Če želite postaviti poverila v drug zbirnik gesel,",
"log out of this vault and log into the vault you want the shared credential in." : "se odjavite iz trenutnega in se prijavite v tistega, ki naj bo ciljni zbirnik.",
"Permissions" : "Dovoljenja",
+ "Received from" : "Prejeto od: ",
"Date" : "Datum",
"Accept" : "Sprejmi",
"Decline" : "Zavrni",
+ "You have {{session_time}} left before logout." : "Pred odjavo imate še {{session_time}}.",
"Your vault has been locked for {{time}} because of {{tries}} failed attempts!" : "Zbirniki so zaklenjeni za {{time}} zaradi {{tries}} neuspelih poskusov!",
"Hello there!" : "Pozdravljeni!",
"It does not seem that you have any passwords. Do you want to add one?" : "Kaže, da še ni vpisanih gesel. Ali želite dodati prvo v zbirnik?",
"You don't have good credentials" : "Ni nobenega kakovostnega poverila",
"You don't have medium credentials" : "Ni nobenega zadovoljivega poverila",
"You don't have bad credentials" : "Ni nobenega slabega poverila",
- "You don't have expired credentials" : "Ni nobenega potečenega poverila",
+ "You don't have expired credentials" : "Ni nobenega pretečenega poverila",
"You don't have deleted credentials" : "Ni nobenega izbrisanega poverila",
"There are no credentials with your selected tags" : "Ni poveril, skladnih z izbrano oznako",
"There are no credentials matching" : "Ni skladnih poveril",
@@ -281,20 +291,23 @@
"Click here to request it" : "Kliknite za potrditev",
"Loading…" : "Poteka nalaganje …",
"Awwhh… credential not found. Maybe it expired" : "Ojoj ... poverila ni mogoče najti. Ali je morda poteklo?",
- "Compromise!" : "Označi kot ogroženo!",
+ "Mark as Compromised" : "Označi kot ogroženo",
"Compromised!" : "Označeno kot ogroženo!",
"This password is compromised. You can only remove this warning by changing the password." : "To geslo je ogroženo. Opozorilo je mogoče odstraniti le z zamenjavo gesla.",
"email" : "elektronska pošta",
"Description" : "Opis",
- "Url" : "Naslov URL",
"Custom Search:" : "Iskane po meri:",
"Revert to defaults" : "Povrni na privzeto",
"Error while saving field" : "Napaka med shranjevanjem vpisa polja",
- "A Passman item has been created, modified or deleted" : "Predmet Passman je bil ustvarjen, spremenjen ali izbrisan",
- "A Passman item has expired" : "Predmet Passman je potekel",
+ "A Passman item has been created, modified or deleted" : "Predmet Passman je bil ustvarjen, spremenjen, ali izbrisan",
+ "A Passman item has expired" : "Predmet Passman je pretekel",
+ "A Passman item has been shared" : "Predmet Passman je v souporabi",
"A Passman item has been renamed" : "Predmet Passman je preimenovan",
+ "%1$s has been created by %2$s" : "%2$s ustvari %1$s",
"You created %1$s" : "Ustvarite %1$s",
+ "%1$s has been updated by %2$s" : "%2$s posodobi %1$s",
"You updated %1$s" : "Posodobite %1$s",
+ "%2$s has revised %1$s to the revision of %3$s" : "%2$s je obnovi %1$s na predelavo %3$s",
"You reverted %1$s back to the revision of %3$s" : "Datoteko %1$s povrnete nazaj na predelavo %3$s",
"%3$s has renamed %1$s to %2$s" : "%3$s preimenuje %1$s v %2$s",
"You renamed %1$s to %2$s" : "Preimenujete %1$s v %2$s",
@@ -302,13 +315,19 @@
"You deleted %1$s" : "Izbrisali ste %1$s",
"%1$s has been recovered by %2$s" : " %2$s obnovi datoteko %1$s",
"You recovered %1$s" : "Obnovite predmet %1$s",
+ "%1$s has been permanently deleted by %2$s" : "%2$s trajno izbriše %1$s",
"You permanently deleted %1$s" : "Trajno izbrišete %1$s",
+ "The password of %1$s has expired, renew it now." : "Geslo za %1$s je preteklo in jo je treba obnoviti.",
+ "%s has been shared with a link" : "Datoteka »%s« je v souporabi prek povezave",
"Passwords" : "Gesla",
- "Your credential \"%s\" expired, click here to update the credential." : "Poverilo »%s« je poteklo. S klikom ga lahko obnovite.",
+ "Your credential \"%s\" expired, click here to update the credential." : "Poverilo »%s« je preteklo. S klikom ga lahko obnovite.",
"Remind me later" : "Opomni me kasneje",
"Ignore" : "Prezri",
+ "%s has declined your share request for \"%s\"." : "%s zavrne zahtevo za souporabo »%s«.",
+ "%s has accepted your share request for \"%s\"." : "%s sprejme prošnjo za souporabo »%s«.",
"Passman" : "Passman",
"Passman is a full featured password manager." : "Program Passman je zmogljivo orodje za upravljanje z gesli.",
+ "Passman is a full featured password manager.\nFeatures:\n- Vaults\n- Vault key is never sent to the server\n- Browser extension for easy access to passwords\n- Android app for on the road access\n- Credentials are client side encrypted with 256bit AES\n- Credentials are server side encrypted with 256bit AES\n- Ability to add custom fields to credentials\n- Built-in OTP (One Time Password) generator\n- Password analyzer\n- Share passwords internally and via link in a secure manner.\n- Import from various password managers (KeePass, LastPass, DashLane, ZOHO, Clipperz.is )\nFor an demo of this app visit [https://demo.passman.cc](https://demo.passman.cc)" : "Program Passman je napredni upravljalnik gesel.\nOmogoča:\n- zbirnike gesel\n- krajevno shranjevanje ključev (niso poslani na strežnik)\n- razširitev brskalnika za enostaven dostop do gesel\n- program za Android za hiter mobilni dostop\n- poverila so šifrirana na strani programa z 256bit AES\n- poverila so šifrirana na strežniški strani z 256bit AES\n- dodajanje polj poveril po meri\n- vgrajeni ustvarjalnik gesel OTP (One Time Password)\n- preičevalnik gesel\n- souporabo gesel krajevno in prek povezave na varen način\n- uvoz različnih upravljalnikov gesel (KeePass, LastPass, DashLane, ZOHO, Clipperz.is )\nZa preizkusno uporabo obiščite [https://demo.passman.cc](https://demo.passman.cc)",
"Unable to get version info" : "Ni mogoče pridobiti podrobnosti različice",
"Passman Settings" : "Nastavitve Passman",
"GitHub version:" : "Različica GitHub:",
@@ -329,11 +348,13 @@
"Requests to destroy vault" : "Zahteve za uničenje zbirnika",
"Request ID" : "ID zahteve",
"Reason" : "Razlog",
+ "Click here to request\n\t\t\t\t\tit" : "Kliknite za oddajo\n\t\tzahteve",
+ "Loading&hellip;" : "Poteka nalaganje &hellip;",
"Awwhh… could not find the credential. Maybe it expired?" : "Ojoj ... poverila ni mogoče najti. Ali je morda poteklo?",
"Expires:" : "Poteče:",
"Connection to server lost" : "Povezava s strežnikom je prekinjena",
"Problem loading page, reloading in 5 seconds" : "Napaka nalaganja strani! Ponovni poskus bo izveden čez 5 sekund.",
- "Saving..." : "Poteka shranjevanje ...",
+ "Saving …" : "Poteka shranjevanje ...",
"Dismiss" : "Opusti",
"seconds ago" : "pred nekaj sekundami"
},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"
diff --git a/l10n/sq.js b/l10n/sq.js
index 378caf85..e695ca9e 100644
--- a/l10n/sq.js
+++ b/l10n/sq.js
@@ -310,7 +310,6 @@ OC.L10N.register(
"Reason" : "Arsyeja",
"Connection to server lost" : "Lidhja me serverin u shkëput",
"Problem loading page, reloading in 5 seconds" : "Gabim në ngarkimin e faqes, do të ringarkohet pas 5 sekondash",
- "Saving..." : "Po ruhet …",
"Dismiss" : "Mos e merr parasysh",
"seconds ago" : "sekonda më parë"
},
diff --git a/l10n/sq.json b/l10n/sq.json
index 2d69ab48..4b4993e5 100644
--- a/l10n/sq.json
+++ b/l10n/sq.json
@@ -308,7 +308,6 @@
"Reason" : "Arsyeja",
"Connection to server lost" : "Lidhja me serverin u shkëput",
"Problem loading page, reloading in 5 seconds" : "Gabim në ngarkimin e faqes, do të ringarkohet pas 5 sekondash",
- "Saving..." : "Po ruhet …",
"Dismiss" : "Mos e merr parasysh",
"seconds ago" : "sekonda më parë"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/sr.js b/l10n/sr.js
index 4bac8a62..557d0c54 100644
--- a/l10n/sr.js
+++ b/l10n/sr.js
@@ -293,12 +293,11 @@ OC.L10N.register(
"Click here to request it" : "Кликните овде да их захтевате",
"Loading…" : "Учитавање…",
"Awwhh… credential not found. Maybe it expired" : "Аргхх… акредитиви нису нађени. Можда су истекли",
- "Compromise!" : "Компромитована!",
+ "Mark as Compromised" : "Обележи као компромитовано",
"Compromised!" : "Компромитована!",
"This password is compromised. You can only remove this warning by changing the password." : "Ова лозинка је компромитована. Можете уклонити ово упозорење једино променом лозинке.",
"email" : "е-пошта",
"Description" : "Опис",
- "Url" : "Адреса",
"Custom Search:" : "Прилагоћена претрага:",
"Revert to defaults" : "Ресетуј на подразумевано",
"Error while saving field" : "Грешка приликом чувања поља",
@@ -361,7 +360,7 @@ OC.L10N.register(
"Expires:" : "Истиче:",
"Connection to server lost" : "Веза са сервером изгубљена",
"Problem loading page, reloading in 5 seconds" : "Грешка приликом учитавања стране, покушавам поново за 5 секунди",
- "Saving..." : "Чувам...",
+ "Saving …" : "Чувам…",
"Dismiss" : "Одбаци",
"seconds ago" : "пре пар секунди"
},
diff --git a/l10n/sr.json b/l10n/sr.json
index 0e99fadb..30306a73 100644
--- a/l10n/sr.json
+++ b/l10n/sr.json
@@ -291,12 +291,11 @@
"Click here to request it" : "Кликните овде да их захтевате",
"Loading…" : "Учитавање…",
"Awwhh… credential not found. Maybe it expired" : "Аргхх… акредитиви нису нађени. Можда су истекли",
- "Compromise!" : "Компромитована!",
+ "Mark as Compromised" : "Обележи као компромитовано",
"Compromised!" : "Компромитована!",
"This password is compromised. You can only remove this warning by changing the password." : "Ова лозинка је компромитована. Можете уклонити ово упозорење једино променом лозинке.",
"email" : "е-пошта",
"Description" : "Опис",
- "Url" : "Адреса",
"Custom Search:" : "Прилагоћена претрага:",
"Revert to defaults" : "Ресетуј на подразумевано",
"Error while saving field" : "Грешка приликом чувања поља",
@@ -359,7 +358,7 @@
"Expires:" : "Истиче:",
"Connection to server lost" : "Веза са сервером изгубљена",
"Problem loading page, reloading in 5 seconds" : "Грешка приликом учитавања стране, покушавам поново за 5 секунди",
- "Saving..." : "Чувам...",
+ "Saving …" : "Чувам…",
"Dismiss" : "Одбаци",
"seconds ago" : "пре пар секунди"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
diff --git a/l10n/sr@latin.js b/l10n/sr@latin.js
index ead94a5f..c588c4a9 100644
--- a/l10n/sr@latin.js
+++ b/l10n/sr@latin.js
@@ -36,7 +36,6 @@ OC.L10N.register(
"Tags" : "Oznake",
"Loading…" : "Učitavanje...",
"Description" : "Opis",
- "Saving..." : "Upisujem...",
"Dismiss" : "Odbaci",
"seconds ago" : "pre par sekundi"
},
diff --git a/l10n/sr@latin.json b/l10n/sr@latin.json
index 76c9f2a6..0ebeed03 100644
--- a/l10n/sr@latin.json
+++ b/l10n/sr@latin.json
@@ -34,7 +34,6 @@
"Tags" : "Oznake",
"Loading…" : "Učitavanje...",
"Description" : "Opis",
- "Saving..." : "Upisujem...",
"Dismiss" : "Odbaci",
"seconds ago" : "pre par sekundi"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
diff --git a/l10n/sv.js b/l10n/sv.js
index b1062789..3168770a 100644
--- a/l10n/sv.js
+++ b/l10n/sv.js
@@ -75,7 +75,7 @@ OC.L10N.register(
"Search icons" : "Sök efter ikoner",
"Upload a custom icon:" : "Ladda upp en anpassad ikon:",
"Use this icon" : "Använd denna ikon",
- "Delete current icon" : "Radera aktuell ikon",
+ "Delete current icon" : "Ta bort aktuell ikon",
"Get icon from page" : "Hämta ikonen från sidan",
"This may take a few seconds…" : "Detta kan ta några sekunder…",
"There was an error fetching the icon!" : "Det gick inte att hämta ikonen!",
@@ -133,10 +133,10 @@ OC.L10N.register(
"Bookmarklet" : "Bookmarklet",
"Save your passwords with one click." : "Spara dina lösenord med ett klick.",
"Drag below button to your bookmark toolbar." : "Dra knappen nedan till dina bokmärken",
- "Delete vault" : "Radera valv",
+ "Delete vault" : "Ta bort valv",
"Vault password" : "Valvlösenord",
"This process is irreversible" : "Denna process kan inte återkallas",
- "Delete my precious passwords" : "Radera mina lösenord",
+ "Delete my precious passwords" : "Ta bort mina lösenord",
"Deleting {{password}}…" : "Tar bort {{password}}…",
"Yes, delete my precious passwords" : "Ja, radera mina lösenord",
"Import type" : "Importeringstyp",
@@ -202,7 +202,7 @@ OC.L10N.register(
"No revisions found." : "Inga granskningar hittades.",
"Label" : "Etikett",
"Restore revision" : "Återställ granskning",
- "Delete revision" : "Radera granskning",
+ "Delete revision" : "Ta bort granskning",
"Edit credential" : "Redigera uppgifter",
"Create new credential" : "Skapa nya uppgifter",
"Save" : "Spara",
@@ -224,7 +224,7 @@ OC.L10N.register(
"Changed" : "Ändrat",
"Created" : "Skapat",
"Edit" : "Redigera",
- "Delete" : "Radera",
+ "Delete" : "Ta bort",
"Share" : "Dela",
"Recover" : "Återställ",
"Destroy" : "Förstör",
@@ -268,7 +268,7 @@ OC.L10N.register(
"Warning! Adding credentials over HTTP is insecure!" : "Varning! Att lägga till uppgifter över HTTP är osäkert!",
"Logged into {{vault_name}}" : "Inloggad i {{vault_name}}",
"Change vault" : "Byt valv",
- "Deleted credentials" : "Radera uppgifter",
+ "Deleted credentials" : "Ta bort uppgifter",
"Logout" : "Logga ut",
"Donate" : "Donera",
"Show All" : "Visa alla",
@@ -284,11 +284,9 @@ OC.L10N.register(
"Click here to request it" : "Klicka här för att begära det",
"Loading…" : "Läser in...",
"Awwhh… credential not found. Maybe it expired" : "Oops... uppgifter hittades inte. Kanske har de gått ut",
- "Compromise!" : "Komprimera!",
"Compromised!" : "Komprimerad!",
"email" : "e-post",
"Description" : "Beskrivning",
- "Url" : "Webbadress",
"Custom Search:" : "Anpassad sökning:",
"Revert to defaults" : "Återgå till standardvärden",
"Error while saving field" : "Fel vid sparande av fält",
@@ -334,7 +332,7 @@ OC.L10N.register(
"Check for new versions" : "Sök efter ny version",
"Enable HTTPS check" : "Aktivera HTTPS-kontroll",
"Disable context menu" : "Inaktivera snabbmenyn",
- "Disable JavaScript debugger" : "Inaktivera JavaScript debugger",
+ "Disable JavaScript debugger" : "Inaktivera JavaScript-felsökare",
"Allow users on this server to share passwords with a link" : "Tillåt användare på denna server att dela lösenord som en länk",
"Allow users on this server to share passwords with other users" : "Tillåt användare på denna server att dela lösenord med andra användare",
"Move credentials from one account to another" : "Flytta uppgifter från ett konto till ett annat",
@@ -351,7 +349,7 @@ OC.L10N.register(
"Expires:" : "Förfaller:",
"Connection to server lost" : "Anslutning till servern förlorad",
"Problem loading page, reloading in 5 seconds" : "Problem att läsa in sidan, provar igen om 5 sekunder",
- "Saving..." : "Sparar...",
+ "Saving …" : "Sparar ...",
"Dismiss" : "Avfärda",
"seconds ago" : "sekunder sedan"
},
diff --git a/l10n/sv.json b/l10n/sv.json
index ece51251..4d1e0493 100644
--- a/l10n/sv.json
+++ b/l10n/sv.json
@@ -73,7 +73,7 @@
"Search icons" : "Sök efter ikoner",
"Upload a custom icon:" : "Ladda upp en anpassad ikon:",
"Use this icon" : "Använd denna ikon",
- "Delete current icon" : "Radera aktuell ikon",
+ "Delete current icon" : "Ta bort aktuell ikon",
"Get icon from page" : "Hämta ikonen från sidan",
"This may take a few seconds…" : "Detta kan ta några sekunder…",
"There was an error fetching the icon!" : "Det gick inte att hämta ikonen!",
@@ -131,10 +131,10 @@
"Bookmarklet" : "Bookmarklet",
"Save your passwords with one click." : "Spara dina lösenord med ett klick.",
"Drag below button to your bookmark toolbar." : "Dra knappen nedan till dina bokmärken",
- "Delete vault" : "Radera valv",
+ "Delete vault" : "Ta bort valv",
"Vault password" : "Valvlösenord",
"This process is irreversible" : "Denna process kan inte återkallas",
- "Delete my precious passwords" : "Radera mina lösenord",
+ "Delete my precious passwords" : "Ta bort mina lösenord",
"Deleting {{password}}…" : "Tar bort {{password}}…",
"Yes, delete my precious passwords" : "Ja, radera mina lösenord",
"Import type" : "Importeringstyp",
@@ -200,7 +200,7 @@
"No revisions found." : "Inga granskningar hittades.",
"Label" : "Etikett",
"Restore revision" : "Återställ granskning",
- "Delete revision" : "Radera granskning",
+ "Delete revision" : "Ta bort granskning",
"Edit credential" : "Redigera uppgifter",
"Create new credential" : "Skapa nya uppgifter",
"Save" : "Spara",
@@ -222,7 +222,7 @@
"Changed" : "Ändrat",
"Created" : "Skapat",
"Edit" : "Redigera",
- "Delete" : "Radera",
+ "Delete" : "Ta bort",
"Share" : "Dela",
"Recover" : "Återställ",
"Destroy" : "Förstör",
@@ -266,7 +266,7 @@
"Warning! Adding credentials over HTTP is insecure!" : "Varning! Att lägga till uppgifter över HTTP är osäkert!",
"Logged into {{vault_name}}" : "Inloggad i {{vault_name}}",
"Change vault" : "Byt valv",
- "Deleted credentials" : "Radera uppgifter",
+ "Deleted credentials" : "Ta bort uppgifter",
"Logout" : "Logga ut",
"Donate" : "Donera",
"Show All" : "Visa alla",
@@ -282,11 +282,9 @@
"Click here to request it" : "Klicka här för att begära det",
"Loading…" : "Läser in...",
"Awwhh… credential not found. Maybe it expired" : "Oops... uppgifter hittades inte. Kanske har de gått ut",
- "Compromise!" : "Komprimera!",
"Compromised!" : "Komprimerad!",
"email" : "e-post",
"Description" : "Beskrivning",
- "Url" : "Webbadress",
"Custom Search:" : "Anpassad sökning:",
"Revert to defaults" : "Återgå till standardvärden",
"Error while saving field" : "Fel vid sparande av fält",
@@ -332,7 +330,7 @@
"Check for new versions" : "Sök efter ny version",
"Enable HTTPS check" : "Aktivera HTTPS-kontroll",
"Disable context menu" : "Inaktivera snabbmenyn",
- "Disable JavaScript debugger" : "Inaktivera JavaScript debugger",
+ "Disable JavaScript debugger" : "Inaktivera JavaScript-felsökare",
"Allow users on this server to share passwords with a link" : "Tillåt användare på denna server att dela lösenord som en länk",
"Allow users on this server to share passwords with other users" : "Tillåt användare på denna server att dela lösenord med andra användare",
"Move credentials from one account to another" : "Flytta uppgifter från ett konto till ett annat",
@@ -349,7 +347,7 @@
"Expires:" : "Förfaller:",
"Connection to server lost" : "Anslutning till servern förlorad",
"Problem loading page, reloading in 5 seconds" : "Problem att läsa in sidan, provar igen om 5 sekunder",
- "Saving..." : "Sparar...",
+ "Saving …" : "Sparar ...",
"Dismiss" : "Avfärda",
"seconds ago" : "sekunder sedan"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/ta.js b/l10n/ta.js
new file mode 100644
index 00000000..30379dcd
--- /dev/null
+++ b/l10n/ta.js
@@ -0,0 +1,37 @@
+OC.L10N.register(
+ "passman",
+ {
+ "General" : "பொதுவான",
+ "Done" : "Done",
+ "Share link" : "Share link",
+ "Username" : "பயனாளர் பெயர்",
+ "File" : "File",
+ "Add" : "சேர்க்க",
+ "Type" : "வகை",
+ "Actions" : "செயல்கள்",
+ "Size" : "அளவு",
+ "Expiration date" : "காலவதியாகும் திகதி",
+ "Export" : "ஏற்றுமதி",
+ "Import" : "இறக்குமதி",
+ "Uploading" : "Uploading",
+ "User" : "User",
+ "Files" : "கோப்புகள்",
+ "Pending" : "நிலுவையிலுள்ள",
+ "Details" : "விவரங்கள்",
+ "by" : "மூலம்",
+ "Save" : "சேமிக்க ",
+ "Cancel" : "இரத்து செய்க",
+ "Settings" : "அமைப்புகள்",
+ "Unshare" : "பகிரப்படாதது",
+ "Password" : "கடவுச்சொல்",
+ "URL" : "URL",
+ "Notes" : "குறிப்புகள்",
+ "Edit" : "தொகுக்க",
+ "Delete" : "நீக்குக",
+ "Share" : "பகிர்வு",
+ "Date" : "Date",
+ "Tags" : "சீட்டுகள்",
+ "Description" : "விவரிப்பு",
+ "seconds ago" : "செக்கன்களுக்கு முன்"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/l10n/ta.json b/l10n/ta.json
new file mode 100644
index 00000000..952ea537
--- /dev/null
+++ b/l10n/ta.json
@@ -0,0 +1,35 @@
+{ "translations": {
+ "General" : "பொதுவான",
+ "Done" : "Done",
+ "Share link" : "Share link",
+ "Username" : "பயனாளர் பெயர்",
+ "File" : "File",
+ "Add" : "சேர்க்க",
+ "Type" : "வகை",
+ "Actions" : "செயல்கள்",
+ "Size" : "அளவு",
+ "Expiration date" : "காலவதியாகும் திகதி",
+ "Export" : "ஏற்றுமதி",
+ "Import" : "இறக்குமதி",
+ "Uploading" : "Uploading",
+ "User" : "User",
+ "Files" : "கோப்புகள்",
+ "Pending" : "நிலுவையிலுள்ள",
+ "Details" : "விவரங்கள்",
+ "by" : "மூலம்",
+ "Save" : "சேமிக்க ",
+ "Cancel" : "இரத்து செய்க",
+ "Settings" : "அமைப்புகள்",
+ "Unshare" : "பகிரப்படாதது",
+ "Password" : "கடவுச்சொல்",
+ "URL" : "URL",
+ "Notes" : "குறிப்புகள்",
+ "Edit" : "தொகுக்க",
+ "Delete" : "நீக்குக",
+ "Share" : "பகிர்வு",
+ "Date" : "Date",
+ "Tags" : "சீட்டுகள்",
+ "Description" : "விவரிப்பு",
+ "seconds ago" : "செக்கன்களுக்கு முன்"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/l10n/th.js b/l10n/th.js
index 5f3ef2b8..9a3206cd 100644
--- a/l10n/th.js
+++ b/l10n/th.js
@@ -46,7 +46,6 @@ OC.L10N.register(
"You created %1$s" : "คุณสร้าง %1$s",
"You deleted %1$s" : "คุณลบ %1$s ออก",
"Problem loading page, reloading in 5 seconds" : "เกิดปัญหาขณะโหลดหน้าเว็บ จะรีโหลดหน้าเว็บภายใน 5 วินาที",
- "Saving..." : "กำลังบันทึกข้อมูล...",
"Dismiss" : "ยกเลิก",
"seconds ago" : "วินาที ก่อนหน้านี้"
},
diff --git a/l10n/th.json b/l10n/th.json
index ea3f2baa..4ff47c4b 100644
--- a/l10n/th.json
+++ b/l10n/th.json
@@ -44,7 +44,6 @@
"You created %1$s" : "คุณสร้าง %1$s",
"You deleted %1$s" : "คุณลบ %1$s ออก",
"Problem loading page, reloading in 5 seconds" : "เกิดปัญหาขณะโหลดหน้าเว็บ จะรีโหลดหน้าเว็บภายใน 5 วินาที",
- "Saving..." : "กำลังบันทึกข้อมูล...",
"Dismiss" : "ยกเลิก",
"seconds ago" : "วินาที ก่อนหน้านี้"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/l10n/tr.js b/l10n/tr.js
index 779e0682..c9d29317 100644
--- a/l10n/tr.js
+++ b/l10n/tr.js
@@ -293,12 +293,11 @@ OC.L10N.register(
"Click here to request it" : "İstekte bulunmak için buraya tıklayın",
"Loading…" : "Yükleniyor …",
"Awwhh… credential not found. Maybe it expired" : "Hmm… kimlik doğrulama bilgileri bulunamadı. Süresi geçmiş olabilir",
- "Compromise!" : "Tehlikeli!",
+ "Mark as Compromised" : "Riskli Olarak İşaretle",
"Compromised!" : "Tehlikeye atılmış!",
"This password is compromised. You can only remove this warning by changing the password." : "Bu parolayı kullanmak tehlikeli. Bu uyarı yalnız parolayı değiştirerek kaldırabilirsiniz.",
"email" : "e-posta",
"Description" : "Açıklama",
- "Url" : "Adres",
"Custom Search:" : "Özel Arama:",
"Revert to defaults" : "Varsayılanlara sıfırla",
"Error while saving field" : "Alan kaydedilirken sorun çıktı",
@@ -361,7 +360,7 @@ OC.L10N.register(
"Expires:" : "Sona Erme:",
"Connection to server lost" : "Sunucu bağlantısı kesildi",
"Problem loading page, reloading in 5 seconds" : "Sayfa yüklenirken sorun çıktı, 5 saniye içinde yeniden yüklenecek",
- "Saving..." : "Kaydediliyor...",
+ "Saving …" : "Kaydediliyor …",
"Dismiss" : "Yeniden Hatırlatma",
"seconds ago" : "saniyeler önce"
},
diff --git a/l10n/tr.json b/l10n/tr.json
index d99d90d4..bc50858a 100644
--- a/l10n/tr.json
+++ b/l10n/tr.json
@@ -291,12 +291,11 @@
"Click here to request it" : "İstekte bulunmak için buraya tıklayın",
"Loading…" : "Yükleniyor …",
"Awwhh… credential not found. Maybe it expired" : "Hmm… kimlik doğrulama bilgileri bulunamadı. Süresi geçmiş olabilir",
- "Compromise!" : "Tehlikeli!",
+ "Mark as Compromised" : "Riskli Olarak İşaretle",
"Compromised!" : "Tehlikeye atılmış!",
"This password is compromised. You can only remove this warning by changing the password." : "Bu parolayı kullanmak tehlikeli. Bu uyarı yalnız parolayı değiştirerek kaldırabilirsiniz.",
"email" : "e-posta",
"Description" : "Açıklama",
- "Url" : "Adres",
"Custom Search:" : "Özel Arama:",
"Revert to defaults" : "Varsayılanlara sıfırla",
"Error while saving field" : "Alan kaydedilirken sorun çıktı",
@@ -359,7 +358,7 @@
"Expires:" : "Sona Erme:",
"Connection to server lost" : "Sunucu bağlantısı kesildi",
"Problem loading page, reloading in 5 seconds" : "Sayfa yüklenirken sorun çıktı, 5 saniye içinde yeniden yüklenecek",
- "Saving..." : "Kaydediliyor...",
+ "Saving …" : "Kaydediliyor …",
"Dismiss" : "Yeniden Hatırlatma",
"seconds ago" : "saniyeler önce"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
diff --git a/l10n/ug.js b/l10n/ug.js
index 51b30e90..03faf1cf 100644
--- a/l10n/ug.js
+++ b/l10n/ug.js
@@ -31,7 +31,6 @@ OC.L10N.register(
"Share" : "ھەمبەھىر",
"Date" : "Date",
"Tags" : "بەلگەلەر",
- "Description" : "چۈشەندۈرۈش",
- "Saving..." : "ساقلاۋاتىدۇ…"
+ "Description" : "چۈشەندۈرۈش"
},
"nplurals=2; plural=(n != 1);");
diff --git a/l10n/ug.json b/l10n/ug.json
index bc857efe..3f23dfb3 100644
--- a/l10n/ug.json
+++ b/l10n/ug.json
@@ -29,7 +29,6 @@
"Share" : "ھەمبەھىر",
"Date" : "Date",
"Tags" : "بەلگەلەر",
- "Description" : "چۈشەندۈرۈش",
- "Saving..." : "ساقلاۋاتىدۇ…"
+ "Description" : "چۈشەندۈرۈش"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/l10n/uk.js b/l10n/uk.js
index 32cf5031..916ac150 100644
--- a/l10n/uk.js
+++ b/l10n/uk.js
@@ -79,7 +79,7 @@ OC.L10N.register(
"Expires:" : "Термін дії до:",
"Connection to server lost" : "З'єднання з сервером втрачено",
"Problem loading page, reloading in 5 seconds" : "Проблема під час завантаження сторінки, повторне завантаження за 5 сек.",
- "Saving..." : "Збереження...",
+ "Saving …" : "Збереження ..",
"Dismiss" : "Припинити",
"seconds ago" : "секунд назад"
},
diff --git a/l10n/uk.json b/l10n/uk.json
index 872b3104..9a308509 100644
--- a/l10n/uk.json
+++ b/l10n/uk.json
@@ -77,7 +77,7 @@
"Expires:" : "Термін дії до:",
"Connection to server lost" : "З'єднання з сервером втрачено",
"Problem loading page, reloading in 5 seconds" : "Проблема під час завантаження сторінки, повторне завантаження за 5 сек.",
- "Saving..." : "Збереження...",
+ "Saving …" : "Збереження ..",
"Dismiss" : "Припинити",
"seconds ago" : "секунд назад"
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"
diff --git a/l10n/ur_PK.js b/l10n/ur_PK.js
index 21b17212..b6c43d41 100644
--- a/l10n/ur_PK.js
+++ b/l10n/ur_PK.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"Share" : "تقسیم",
"Date" : "Date",
"Description" : "تصریح",
- "Saving..." : "محفوظ ھو رہا ہے ...",
"seconds ago" : "سیکنڈز پہلے"
},
"nplurals=2; plural=(n != 1);");
diff --git a/l10n/ur_PK.json b/l10n/ur_PK.json
index ee310b99..33cc9d26 100644
--- a/l10n/ur_PK.json
+++ b/l10n/ur_PK.json
@@ -20,7 +20,6 @@
"Share" : "تقسیم",
"Date" : "Date",
"Description" : "تصریح",
- "Saving..." : "محفوظ ھو رہا ہے ...",
"seconds ago" : "سیکنڈز پہلے"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/l10n/uz.js b/l10n/uz.js
index 425b99bb..caf02baf 100644
--- a/l10n/uz.js
+++ b/l10n/uz.js
@@ -25,7 +25,6 @@ OC.L10N.register(
"email" : "elektron pochta",
"Passwords" : "Parollar",
"Connection to server lost" : "Serverga ulanish yo'qoldi",
- "Saving..." : "Saqlanmoqda...",
"Dismiss" : "Tashlab qo'ymang",
"seconds ago" : "soniya oldin"
},
diff --git a/l10n/uz.json b/l10n/uz.json
index dcfb1ec0..5bd78cb9 100644
--- a/l10n/uz.json
+++ b/l10n/uz.json
@@ -23,7 +23,6 @@
"email" : "elektron pochta",
"Passwords" : "Parollar",
"Connection to server lost" : "Serverga ulanish yo'qoldi",
- "Saving..." : "Saqlanmoqda...",
"Dismiss" : "Tashlab qo'ymang",
"seconds ago" : "soniya oldin"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/l10n/vi.js b/l10n/vi.js
index 9d520c95..247ad5ed 100644
--- a/l10n/vi.js
+++ b/l10n/vi.js
@@ -73,7 +73,6 @@ OC.L10N.register(
"You deleted %1$s" : "Bạn đã xóa %1$s",
"Connection to server lost" : "Kết nối tới máy chủ bị mất",
"Problem loading page, reloading in 5 seconds" : "Có vấn đề khi nạp trang, nạp lại trang trong vòng 5 giây",
- "Saving..." : "Đang lưu...",
"Dismiss" : "Bỏ qua",
"seconds ago" : "vài giây trước"
},
diff --git a/l10n/vi.json b/l10n/vi.json
index 92ed1829..fcd08d76 100644
--- a/l10n/vi.json
+++ b/l10n/vi.json
@@ -71,7 +71,6 @@
"You deleted %1$s" : "Bạn đã xóa %1$s",
"Connection to server lost" : "Kết nối tới máy chủ bị mất",
"Problem loading page, reloading in 5 seconds" : "Có vấn đề khi nạp trang, nạp lại trang trong vòng 5 giây",
- "Saving..." : "Đang lưu...",
"Dismiss" : "Bỏ qua",
"seconds ago" : "vài giây trước"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/l10n/zh_CN.js b/l10n/zh_CN.js
index c5c026f9..507533da 100644
--- a/l10n/zh_CN.js
+++ b/l10n/zh_CN.js
@@ -293,12 +293,11 @@ OC.L10N.register(
"Click here to request it" : "点击这里请求",
"Loading…" : "正在加载…",
"Awwhh… credential not found. Maybe it expired" : "哎呀... 没有找到证书。也许它过期了",
- "Compromise!" : "密码泄露!",
+ "Mark as Compromised" : "标记为已泄露",
"Compromised!" : "已被泄露!",
"This password is compromised. You can only remove this warning by changing the password." : "此密码已被泄露。您只能通过修改密码来移除此警告。",
"email" : "电子邮件",
"Description" : "描述",
- "Url" : "Url",
"Custom Search:" : "自定义搜索:",
"Revert to defaults" : "恢复默认值",
"Error while saving field" : "保存域错误",
@@ -361,7 +360,7 @@ OC.L10N.register(
"Expires:" : "过期:",
"Connection to server lost" : "与服务器的连接断开",
"Problem loading page, reloading in 5 seconds" : "加载页面出现问题,在 5 秒内重新加载",
- "Saving..." : "正在保存…",
+ "Saving …" : "正在保存…",
"Dismiss" : "忽略",
"seconds ago" : "几秒前"
},
diff --git a/l10n/zh_CN.json b/l10n/zh_CN.json
index c252909f..875d9b35 100644
--- a/l10n/zh_CN.json
+++ b/l10n/zh_CN.json
@@ -291,12 +291,11 @@
"Click here to request it" : "点击这里请求",
"Loading…" : "正在加载…",
"Awwhh… credential not found. Maybe it expired" : "哎呀... 没有找到证书。也许它过期了",
- "Compromise!" : "密码泄露!",
+ "Mark as Compromised" : "标记为已泄露",
"Compromised!" : "已被泄露!",
"This password is compromised. You can only remove this warning by changing the password." : "此密码已被泄露。您只能通过修改密码来移除此警告。",
"email" : "电子邮件",
"Description" : "描述",
- "Url" : "Url",
"Custom Search:" : "自定义搜索:",
"Revert to defaults" : "恢复默认值",
"Error while saving field" : "保存域错误",
@@ -359,7 +358,7 @@
"Expires:" : "过期:",
"Connection to server lost" : "与服务器的连接断开",
"Problem loading page, reloading in 5 seconds" : "加载页面出现问题,在 5 秒内重新加载",
- "Saving..." : "正在保存…",
+ "Saving …" : "正在保存…",
"Dismiss" : "忽略",
"seconds ago" : "几秒前"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/l10n/zh_HK.js b/l10n/zh_HK.js
index 62a321ff..95fd67c6 100644
--- a/l10n/zh_HK.js
+++ b/l10n/zh_HK.js
@@ -1,39 +1,367 @@
OC.L10N.register(
"passman",
{
+ "Generating sharing keys ( %s / 2)" : "生成共享秘鑰(%s / 2)",
+ "Incorrect vault password!" : "錯誤的保險庫密碼!",
+ "Passwords do not match" : "密碼不匹配",
"General" : "一般",
- "Done" : "Done",
+ "Custom Fields" : "自定義字段",
+ "Please fill in a label." : "請填寫一個標籤。",
+ "Please fill in a value." : "請填寫一個值。",
+ "Error loading file" : "加載檔案錯誤 ",
+ "An error occurred during decryption" : "解密時發生錯誤",
+ "Credential created!" : "身分驗證已建立!",
+ "Credential deleted" : "身分驗證已刪除",
+ "Credential updated" : "身分驗證已更新",
+ "Credential recovered" : "身分驗證回收",
+ "Credential destroyed" : "身分驗證已銷毀",
+ "Error downloading file, you probably have insufficient permissions" : "下載檔案時出錯,您可能沒有足夠的權限進行下載",
+ "Invalid QR code" : "無效的QR代碼",
+ "Starting export" : "正在開始導出",
+ "Decrypting credentials" : "身分驗證解密中",
+ "Done" : "完成",
+ "File read." : "檔案已被讀取。",
+ "Proceed with the following steps to import your file" : "按以下步驟處理以導入您的檔案",
+ "Skipping unlabeled credential" : "跳過無標籤的身分驗證",
+ "Adding {{credential}}" : "添加 {{credential}}",
+ "Added {{credential}}" : "已添加 {{credential}}",
+ "Skipping credential, missing label on line {{line}}" : "跳過身分驗證,{{line}} 行缺少標籤",
+ "Parsed {{num}} credentials, starting to import" : "解析 {{num}} 個身分驗證,開始導入",
+ "Importing" : "正在導入",
+ "Start import" : "開始導入",
+ "Select CSV file" : "選擇 CSV 檔案",
+ "Parsed {{rows}} lines from CSV file" : "從 CSV 檔案解析了 {{rows}} 行",
+ "Skip first row" : "跳過第一行",
+ "You need to assign the label field before you can start the import." : "開始導入之前需要先賦值標籤字段。",
+ "The first 5 lines of the CSV are shown." : "顯示 CSV 的前 5 行。",
+ "Assign the proper fields to each column." : "將適當的字段賦值給每一列。",
+ "Example of imported credential" : "導入的身分驗證示例",
+ "Missing an importer? Try it with the generic CSV importer." : "沒有導入器?試試看通用CSV導入器吧。",
+ "Go back to importers." : "返回導入器。",
+ "Revision deleted" : "修訂已刪除",
+ "Revision restored" : "修訂已復原",
+ "Save in Passman" : "保存到 Passman",
+ "Settings saved" : "設置已保存",
+ "General settings" : "一般設定",
+ "Password audit" : "密碼審核",
+ "Password settings" : "密碼設定",
+ "Import credentials" : "導入身分驗證",
+ "Export credentials" : "導出身分驗證",
"Sharing" : "分享",
+ "Are you sure you want to leave? This will destroy all your credentials" : "是否要離開?這將銷毀您所有的身分驗證",
+ "Old password field incorrect!" : "舊密碼錯誤!",
+ "New password does not match!" : "新密碼不匹配!",
+ "Please log in with your new vault password" : "請使用您的新保險庫密碼登入",
+ "Share with users and groups" : "與用戶和群組分享",
"Share link" : "分享連結",
- "Good" : "好",
- "Username" : "用戶名稱",
- "File" : "File",
- "Add" : "加入",
- "Type" : "類別",
+ "Are you sure you want to leave? This will corrupt this credential" : "您確認要離開嗎?這將銷毀此身分驗證",
+ "Credential unshared" : "取消了身分驗證分享",
+ "Credential shared" : "身分驗證已分享",
+ "Saved!" : "保存了!",
+ "Poor" : "差 ",
+ "Weak" : "弱",
+ "Good" : "好 ",
+ "Strong" : "強 ",
+ "Toggle visibility" : "切換可見性",
+ "Copy to clipboard" : "複製到剪貼板",
+ "Copied to clipboard!" : "已複製到剪貼板!",
+ "Generate password" : "生成密碼",
+ "Copy password to clipboard" : "將密碼複製到剪貼板",
+ "Password copied to clipboard!" : "密碼已複製到剪貼板! ",
+ "Complete" : "完成",
+ "Username" : "用戶名",
+ "Repeat password" : "重複密碼",
+ "Add tag" : "添加標籤",
+ "Pick an icon" : "選擇一個圖標",
+ "Search icons" : "搜索圖標",
+ "Upload a custom icon:" : "上傳自定義圖標:",
+ "Use this icon" : "使用此圖標",
+ "Delete current icon" : "刪除當前圖標",
+ "Get icon from page" : "從頁面獲取圖標",
+ "This may take a few seconds…" : "此操作可能需要花幾秒鐘 。。。",
+ "There was an error fetching the icon!" : "擷取圖標出錯",
+ "Selected icon" : "所選的圖標",
+ "Field label" : "字段標籤",
+ "Field value" : "字段值",
+ "Choose a file" : "選擇一個檔案",
+ "Text" : "文本 ",
+ "File" : "檔案",
+ "Add" : "添加",
+ "Value" : "值",
+ "Type" : "類型",
+ "Actions" : "操作",
+ "Empty" : "空的",
+ "Filename" : "檔案名稱",
+ "Upload date" : "上傳日期",
"Size" : "大小",
- "Expiration date" : "分享期限",
+ "Upload or enter your OTP secret" : "上傳或輸入 OTP 密鑰",
+ "Current OTP settings" : "當前的 OTP 設置 ",
+ "Issuer" : "發行者",
+ "Secret" : "密鑰",
+ "Expiration date" : "失效日期",
+ "No expiration date set" : "未設置失效日期",
+ "Renew interval" : "更新間距",
"Disabled" : "停用",
- "Export" : "滙出",
+ "Day(s)" : "日",
+ "Week(s)" : "星期",
+ "Month(s)" : "月",
+ "Year(s)" : "年",
+ "Password generation settings" : "生成密碼設置",
+ "Password length" : "密碼長度",
+ "Minimum amount of digits" : "最小數字位數",
+ "Use uppercase letters" : "使用大寫字母 ",
+ "Use lowercase letters" : "使用小寫字母",
+ "Use numbers" : "使用數字",
+ "Use special characters" : "使用特殊字符",
+ "Avoid ambiguous characters" : "避免模糊字符",
+ "Require every character type" : "要求全部字符類型",
+ "Export type" : "導出類型",
+ "Export" : "導出",
+ "Enter vault password to confirm export." : "輸入保險庫密碼以確認導出。",
+ "Rename vault" : "重命名保險庫",
+ "New vault name" : "新保險庫名稱",
+ "Change" : "變更",
+ "Change vault key" : "更高保險庫密鑰",
+ "Old vault password" : "舊的保險庫密碼",
+ "New vault password" : "新的保險庫密碼",
+ "Repeat new vault password" : "重複新的保險庫密碼",
+ "Please wait your vault is being updated, do not leave this page." : "請耐心等待,您的保險庫正在更新,請不要離開此頁面。",
+ "Processing" : "正在處理",
+ "Total progress" : "全部進度",
+ "About Passman" : "關於 Passman",
"Version" : "版本",
+ "Donate to support development" : "捐贈支持開發",
+ "Bookmarklet" : "書籤小工具",
+ "Save your passwords with one click." : "一鍵保存密碼",
+ "Drag below button to your bookmark toolbar." : "將下面的按鈕拖拽到您的書籤工具欄。",
+ "Delete vault" : "刪除保險庫",
+ "Vault password" : "保險庫密碼",
+ "This process is irreversible" : "操作不可逆",
+ "Delete my precious passwords" : "刪除我的密碼",
+ "Deleting {{password}}…" : "正在刪除 {{password}}…",
+ "Yes, delete my precious passwords" : "是的,刪除我的密碼",
+ "Import type" : "導入類型",
"Import" : "導入",
- "Uploading" : "Uploading",
- "User" : "User",
+ "Read progress" : "讀取進度",
+ "Upload progress" : "上傳進度 ",
+ "Private Key" : "私鑰",
+ "Public key" : "公鑰",
+ "Key size" : "密鑰長短",
+ "Save keys" : "保存密碼",
+ "Generate sharing keys" : "生成分享密碼",
+ "Generating sharing keys" : "生成分享密碼中",
+ "The password tool scans your password, calculates average cracking time, listing those below the threshold" : "密碼工具會掃描您的密碼,計算平均破解時間,列出低於閾值的密碼",
+ "Minimum password stength" : "最低密碼強度",
+ "Start scan" : "開始掃描",
+ "Result" : "結果",
+ "A total of {{scan_result}} weak credentials were found." : "總共發現 {{scan_result}} 個弱身分驗證。",
+ "Score" : "得分",
+ "Action" : "操作",
+ "Search users…" : "搜尋用戶。。。",
+ "Missing users? Only users that have vaults are shown." : "找不到用戶?只顯示具有保險庫的用戶。",
+ "Cyphering" : "加密中",
+ "Uploading" : "正在上傳。。。",
+ "User" : "用戶",
+ "Crypto time" : "加密時間",
+ "Total time spent encrypting" : "加密總耗時",
+ "Read" : "讀取",
+ "Write" : "寫入",
"Files" : "檔案",
- "Save" : "儲存",
+ "Revisions" : "修訂",
+ "Pending" : "等待",
+ "Enable link sharing" : "啟用連結分享",
+ "Share until date" : "分享到期日",
+ "Expire after views" : "分享將在以下瀏覽次數後失效",
+ "Click \\\"Share\\\" first" : "先點擊\\\"分享\\\"",
+ "Show files" : "顯示檔案",
+ "Details" : "細節",
+ "Hide details" : "隱藏細節",
+ "Password score" : "密碼得分",
+ "Cracking times" : "破解時間",
+ "100 / hour" : "100 / 小時",
+ "Throttled online attack" : "限制在線攻擊",
+ "10 / second" : "10 / 秒",
+ "Unthrottled online attack" : "不限制在線攻擊",
+ "10k / second" : "10k / 秒",
+ "Offline attack, slow hash, many cores" : "離線攻擊,散列緩慢,多核心",
+ "10B / second" : "10B / 秒",
+ "Offline attack, fast hash, many cores" : "離線攻擊,散列快速,多核心",
+ "Match sequence" : "匹配序列",
+ "See match sequence" : "查看匹配序列",
+ "Pattern" : "模式",
+ "Matched word" : "匹配的詞",
+ "Dictionary name" : "字典名稱",
+ "Rank" : "評級",
+ "Reversed" : "反向",
+ "Guesses" : "猜測",
+ "Base guesses" : "基本猜測",
+ "Uppercase variations" : "大寫變體",
+ "l33t-variations" : "l33t變體",
+ "Showing revisions of" : "顯示修訂歷史",
+ "Revision of" : "修訂",
+ "by" : "由",
+ "No revisions found." : "未找到修訂版本。",
+ "Label" : "標籤",
+ "Restore revision" : "復原修訂版本",
+ "Delete revision" : "刪除修訂版本",
+ "Edit credential" : "編輯身分驗證",
+ "Create new credential" : "建立新身分驗證",
+ "Save" : "保存",
"Cancel" : "取消",
"Settings" : "設定",
- "Unshare" : "取消分享",
+ "Share credential {{credential}}" : "共享身分驗證 {{credential}}",
+ "Unshare" : "取消共享",
+ "Showing deleted since" : "顯示自從刪除以來",
+ "Beginning" : "開始",
+ "Showing {{number_filtered}} of {{credential_number}} credentials" : "顯示 {{credential_number}} 個身分驗證中的 {{number_filtered}} 個",
+ "Search for credential…" : "搜尋身分驗證。。。",
+ "Account" : "賬戶",
"Password" : "密碼",
- "URL" : "網址",
- "Notes" : "筆記",
+ "OTP" : "OTP",
+ "E-mail" : "電郵地址",
+ "URL" : "URL",
+ "Notes" : "備註",
+ "Expiry time" : "過期時間",
+ "Changed" : "已更改",
+ "Created" : "已創建",
"Edit" : "編輯",
"Delete" : "刪除",
"Share" : "分享",
- "Date" : "Date",
+ "Recover" : "恢復",
+ "Destroy" : "銷毀",
+ "Use regex" : "使用 regex",
+ "You have incoming share requests." : "您收到分享請求。",
+ "If you want to put the credential in another vault," : "如果您想將身分驗證放在另一個保險庫中,",
+ "log out of this vault and log into the vault you want the shared credential in." : "登出此保險庫並登入到您要分享身分驗證的保險庫。",
+ "Permissions" : "權限",
+ "Received from" : "收到自",
+ "Date" : "日期",
+ "Accept" : "接受",
+ "Decline" : "拒絕",
+ "You have {{session_time}} left before logout." : "登出前還剩 {{session_time}}。",
+ "Your vault has been locked for {{time}} because of {{tries}} failed attempts!" : "由於 {{tries}} 次嘗試失敗,您的保管庫已被鎖定 {{time}}!",
+ "Hello there!" : "您好!",
+ "It does not seem that you have any passwords. Do you want to add one?" : "您似乎尚未設置任何密碼。您要添加一個嗎?",
+ "You don't have good credentials" : "您沒有高強度身分驗證",
+ "You don't have medium credentials" : "您沒有中強度身分驗證",
+ "You don't have bad credentials" : "您沒有弱強度身分驗證",
+ "You don't have expired credentials" : "您沒有已過期的身分驗證",
+ "You don't have deleted credentials" : "您沒有已刪除的身分驗證",
+ "There are no credentials with your selected tags" : "沒有找到帶有您所選的標籤的身分驗證",
+ "There are no credentials matching" : "沒有匹配的身分驗證",
+ "Last accessed" : "上次存取",
+ "Never" : "從不",
+ "No vaults found, why not create one?" : "沒有找到保險庫。何不建立一個?",
+ "Password strength must be at least: {{strength}}" : "密碼強度必須至少為{{strength}}",
+ "Please give your new vault a name." : "請給您的新保險庫起個名字。",
+ "Repeat vault password" : "重複保險庫密碼",
+ "Your sharing keys will have a strength of 1024 bit, which you can change in \\\"Settings\\\" later ." : "您的分享密鑰將具有 1024 位的強度,您可以稍後在“設置”中進行更改。 ",
+ "Create vault" : "建立保險庫",
+ "Go back to vaults" : "回到保險庫",
+ "Please input the password for" : "請輸入密碼",
+ "Set this vault as the default." : "將此保險庫設置為默認。",
+ "Log into this vault automatically." : "自動登入保險庫",
+ "Log out of this vault automatically after: " : "在以下情況下自動登出此保險庫:",
+ "Decrypt vault" : "解密保險庫",
+ "Seems you lost the vault password and you're unable to log in." : "似乎丟失了保險庫密碼,您無法登入。",
+ "If you want this vault to be removed you can request that here." : "如果要刪除此保管庫,可以在此處請求。",
+ "An admin then accepts or declines the request" : "然後,管理員接受或拒絕該請求",
+ "After an admin destroys this vault, all credentials in it will be lost" : "管理員銷毀此保險庫後,其中的所有身分驗證將丟失",
+ "Reason for requesting deletion (optional):" : "請求刪除的原因(可選):",
+ "Request vault destruction" : "請求銷毀保險庫",
+ "Yes, request an admin to destroy this vault" : "是的,請求管理員銷毀此保險庫",
+ "Cancel destruction request" : "取消銷毀請求",
+ "Vault destruction requested" : "已要求銷毀保險庫",
+ "Request removed" : "請求已移除",
+ "Destruction request pending" : "銷毀請求待處理",
+ "Warning! Adding credentials over HTTP is insecure!" : "警告!通過HTTP添加身分驗證是不安全的!",
+ "Logged into {{vault_name}}" : "已登入 {{vault_name}}",
+ "Change vault" : "更改保險庫",
+ "Deleted credentials" : "已刪除的身分驗證",
+ "Logout" : "登出",
+ "Donate" : "捐助",
+ "Show All" : "顯示所有",
+ "Tags" : "標籤",
+ "Search Tags" : "搜索標籤",
+ "Good Strength" : "高強度",
+ "Medium Strength" : "中等強度",
+ "Bad Strength" : "低強度",
+ "Expired" : "已過期",
+ "Filter Tags" : "過濾標籤",
+ "Simple Navigation" : "簡單導航",
+ "Someone has shared a credential with you." : "有人與您分享了一個身分驗證。",
+ "Click here to request it" : "點擊這裡請求",
+ "Loading…" : "正在加載…",
+ "Awwhh… credential not found. Maybe it expired" : "哎呀。。。沒有找到身分驗證。也許過期了",
+ "Mark as Compromised" : "標記為已洩露",
+ "Compromised!" : "已被洩露!",
+ "This password is compromised. You can only remove this warning by changing the password." : "此密碼已被洩露。您只能通過修改密碼來移除此警告。",
+ "email" : "電郵地址",
"Description" : "描述",
- "You created %1$s" : "你新增了%1$s",
- "You deleted %1$s" : "你刪除了%1$s",
- "Saving..." : "儲存中...",
- "seconds ago" : "秒前"
+ "Custom Search:" : "自定義搜尋:",
+ "Revert to defaults" : "恢復默認值",
+ "Error while saving field" : "保存字段時出錯",
+ "A Passman item has been created, modified or deleted" : "Passman 項目已建立,修改或刪除",
+ "A Passman item has expired" : "Passman 項目已過期",
+ "A Passman item has been shared" : "Passman 項目已被分享",
+ "A Passman item has been renamed" : "Passman 項目已重命名",
+ "%1$s has been created by %2$s" : "%1$s 已由 %2$s 建立",
+ "You created %1$s" : "您已建立了 %1$s",
+ "%1$s has been updated by %2$s" : "%1$s 已由 %2$s 更新",
+ "You updated %1$s" : "您已更新了 %1$s",
+ "%2$s has revised %1$s to the revision of %3$s" : "%2$s 已修訂 %1$s 到 %3$s 版本",
+ "You reverted %1$s back to the revision of %3$s" : "您已將 %1$s 還原到 %3$s 的修訂版本",
+ "%3$s has renamed %1$s to %2$s" : "%3$s 已重命名 %1$s 為 %2$s",
+ "You renamed %1$s to %2$s" : "已重命名 %1$s 為 %2$s",
+ "%1$s has been deleted by %2$s" : "%1$s 已被 %2$s 刪除",
+ "You deleted %1$s" : "你已刪除了 %1$s",
+ "%1$s has been recovered by %2$s" : "%1$s 已被 %2$s 還原",
+ "You recovered %1$s" : "你已還原了 %1$s",
+ "%1$s has been permanently deleted by %2$s" : "%1$s 已被 %2$s 永久刪除",
+ "You permanently deleted %1$s" : "您已永久刪除 %1$s",
+ "The password of %1$s has expired, renew it now." : "%1$s 的密碼已過期,請立即更新。",
+ "%1$s has been shared with %2$s" : "%1$s 已與 %2$s 分享",
+ "You received a share request for %1$s from %2$s" : "您收到了來自 %2$s 的 %1$s 的分享請求",
+ "%s has been shared with a link" : "%s 已通過連結分享",
+ "Passwords" : "密碼",
+ "Your credential \"%s\" expired, click here to update the credential." : "您的身分驗證 %s 已過期,請點擊此處更新身分驗證。",
+ "Remind me later" : "稍後提醒我",
+ "Ignore" : "不理會",
+ "%s shared \"%s\" with you. Click here to accept" : "%s 已與您分享了\"%s\"。點擊這裡接受",
+ "%s has declined your share request for \"%s\"." : "%s 已拒絕您的分享請求\"%s\"。",
+ "%s has accepted your share request for \"%s\"." : "%s 已接受您的分享請求\"%s\"。",
+ "Passman" : "Passman",
+ "Passman is a full featured password manager." : "Passman 是一個全能的密碼管理器。",
+ "Passman is a full featured password manager.\nFeatures:\n- Vaults\n- Vault key is never sent to the server\n- Browser extension for easy access to passwords\n- Android app for on the road access\n- Credentials are client side encrypted with 256bit AES\n- Credentials are server side encrypted with 256bit AES\n- Ability to add custom fields to credentials\n- Built-in OTP (One Time Password) generator\n- Password analyzer\n- Share passwords internally and via link in a secure manner.\n- Import from various password managers (KeePass, LastPass, DashLane, ZOHO, Clipperz.is )\nFor an demo of this app visit [https://demo.passman.cc](https://demo.passman.cc)" : "Passman 是一個全功能的密碼管理器。\n功能一覽:\n- 保險庫\n- 保險庫密鑰決不會發給伺服器\n- 瀏覽器擴展,方便使用密碼\n- Andriod 應用程式,便於隨時使用\n- 客戶端身分驗證為256位AES加密\n- 伺服器端身分驗證為256位AES加密\n- 可向身分驗證添加自定義字段\n- 內置 OTP(一次性密碼)生成器\n- 密碼分析器\n- 通過安全連結內部分享密碼\n- 從多種密碼管理器中導入(KeePass, LastPass, DashLane, ZOHO, Clipperz。is )\n應用程式的演示版請訪問 [https://demo。passman。cc](https://demo。passman。cc)",
+ "Unable to get version info" : "無法獲取版本信息 ",
+ "Passman Settings" : "Passman 設定",
+ "GitHub version:" : "GitHub 版本:",
+ "A newer version of Passman is available" : "有較新版本的 Passman 可用",
+ "Password sharing" : "密碼分享",
+ "Credential mover" : "身分驗證移動者",
+ "Vault destruction requests" : "保險庫銷毀請求",
+ "Check for new versions" : "檢查新版本",
+ "Enable HTTPS check" : "啟用HTTPS檢查",
+ "Disable context menu" : "禁用上下文選項單",
+ "Disable JavaScript debugger" : "停用 JavaScript 調試器",
+ "Allow users on this server to share passwords with a link" : "允許此伺服器上的用戶通過連結分享密碼",
+ "Allow users on this server to share passwords with other users" : "允許此伺服器上的用戶與其他用戶分享密碼",
+ "Move credentials from one account to another" : "將身分驗證從一個賬號移動到另一個",
+ "Source account" : "來源賬號",
+ "Destination account" : "目標賬號",
+ "Credentials moved!" : "身分驗證已移動了!",
+ "Requests to destroy vault" : "要求銷毀保險庫",
+ "Request ID" : "請求 ID",
+ "Requested by" : "請求者",
+ "Reason" : "原因",
+ "Click here to request\n\t\t\t\t\tit" : "點擊這裡請求\n\t\t\t\t\t它",
+ "Loading&hellip;" : "正在加載。。。",
+ "Awwhh… could not find the credential. Maybe it expired?" : "哎呀。。。沒有找到身分驗證。也許過期了?",
+ "Expires:" : "過期日:",
+ "Connection to server lost" : "與伺服器斷線了",
+ "Problem loading page, reloading in 5 seconds" : "載入頁面出錯,5秒後重新整理",
+ "Saving …" : "儲存中 。。。",
+ "Dismiss" : "撤銷",
+ "seconds ago" : "幾秒前"
},
"nplurals=1; plural=0;");
diff --git a/l10n/zh_HK.json b/l10n/zh_HK.json
index 8216374f..b2e991d0 100644
--- a/l10n/zh_HK.json
+++ b/l10n/zh_HK.json
@@ -1,37 +1,365 @@
{ "translations": {
+ "Generating sharing keys ( %s / 2)" : "生成共享秘鑰(%s / 2)",
+ "Incorrect vault password!" : "錯誤的保險庫密碼!",
+ "Passwords do not match" : "密碼不匹配",
"General" : "一般",
- "Done" : "Done",
+ "Custom Fields" : "自定義字段",
+ "Please fill in a label." : "請填寫一個標籤。",
+ "Please fill in a value." : "請填寫一個值。",
+ "Error loading file" : "加載檔案錯誤 ",
+ "An error occurred during decryption" : "解密時發生錯誤",
+ "Credential created!" : "身分驗證已建立!",
+ "Credential deleted" : "身分驗證已刪除",
+ "Credential updated" : "身分驗證已更新",
+ "Credential recovered" : "身分驗證回收",
+ "Credential destroyed" : "身分驗證已銷毀",
+ "Error downloading file, you probably have insufficient permissions" : "下載檔案時出錯,您可能沒有足夠的權限進行下載",
+ "Invalid QR code" : "無效的QR代碼",
+ "Starting export" : "正在開始導出",
+ "Decrypting credentials" : "身分驗證解密中",
+ "Done" : "完成",
+ "File read." : "檔案已被讀取。",
+ "Proceed with the following steps to import your file" : "按以下步驟處理以導入您的檔案",
+ "Skipping unlabeled credential" : "跳過無標籤的身分驗證",
+ "Adding {{credential}}" : "添加 {{credential}}",
+ "Added {{credential}}" : "已添加 {{credential}}",
+ "Skipping credential, missing label on line {{line}}" : "跳過身分驗證,{{line}} 行缺少標籤",
+ "Parsed {{num}} credentials, starting to import" : "解析 {{num}} 個身分驗證,開始導入",
+ "Importing" : "正在導入",
+ "Start import" : "開始導入",
+ "Select CSV file" : "選擇 CSV 檔案",
+ "Parsed {{rows}} lines from CSV file" : "從 CSV 檔案解析了 {{rows}} 行",
+ "Skip first row" : "跳過第一行",
+ "You need to assign the label field before you can start the import." : "開始導入之前需要先賦值標籤字段。",
+ "The first 5 lines of the CSV are shown." : "顯示 CSV 的前 5 行。",
+ "Assign the proper fields to each column." : "將適當的字段賦值給每一列。",
+ "Example of imported credential" : "導入的身分驗證示例",
+ "Missing an importer? Try it with the generic CSV importer." : "沒有導入器?試試看通用CSV導入器吧。",
+ "Go back to importers." : "返回導入器。",
+ "Revision deleted" : "修訂已刪除",
+ "Revision restored" : "修訂已復原",
+ "Save in Passman" : "保存到 Passman",
+ "Settings saved" : "設置已保存",
+ "General settings" : "一般設定",
+ "Password audit" : "密碼審核",
+ "Password settings" : "密碼設定",
+ "Import credentials" : "導入身分驗證",
+ "Export credentials" : "導出身分驗證",
"Sharing" : "分享",
+ "Are you sure you want to leave? This will destroy all your credentials" : "是否要離開?這將銷毀您所有的身分驗證",
+ "Old password field incorrect!" : "舊密碼錯誤!",
+ "New password does not match!" : "新密碼不匹配!",
+ "Please log in with your new vault password" : "請使用您的新保險庫密碼登入",
+ "Share with users and groups" : "與用戶和群組分享",
"Share link" : "分享連結",
- "Good" : "好",
- "Username" : "用戶名稱",
- "File" : "File",
- "Add" : "加入",
- "Type" : "類別",
+ "Are you sure you want to leave? This will corrupt this credential" : "您確認要離開嗎?這將銷毀此身分驗證",
+ "Credential unshared" : "取消了身分驗證分享",
+ "Credential shared" : "身分驗證已分享",
+ "Saved!" : "保存了!",
+ "Poor" : "差 ",
+ "Weak" : "弱",
+ "Good" : "好 ",
+ "Strong" : "強 ",
+ "Toggle visibility" : "切換可見性",
+ "Copy to clipboard" : "複製到剪貼板",
+ "Copied to clipboard!" : "已複製到剪貼板!",
+ "Generate password" : "生成密碼",
+ "Copy password to clipboard" : "將密碼複製到剪貼板",
+ "Password copied to clipboard!" : "密碼已複製到剪貼板! ",
+ "Complete" : "完成",
+ "Username" : "用戶名",
+ "Repeat password" : "重複密碼",
+ "Add tag" : "添加標籤",
+ "Pick an icon" : "選擇一個圖標",
+ "Search icons" : "搜索圖標",
+ "Upload a custom icon:" : "上傳自定義圖標:",
+ "Use this icon" : "使用此圖標",
+ "Delete current icon" : "刪除當前圖標",
+ "Get icon from page" : "從頁面獲取圖標",
+ "This may take a few seconds…" : "此操作可能需要花幾秒鐘 。。。",
+ "There was an error fetching the icon!" : "擷取圖標出錯",
+ "Selected icon" : "所選的圖標",
+ "Field label" : "字段標籤",
+ "Field value" : "字段值",
+ "Choose a file" : "選擇一個檔案",
+ "Text" : "文本 ",
+ "File" : "檔案",
+ "Add" : "添加",
+ "Value" : "值",
+ "Type" : "類型",
+ "Actions" : "操作",
+ "Empty" : "空的",
+ "Filename" : "檔案名稱",
+ "Upload date" : "上傳日期",
"Size" : "大小",
- "Expiration date" : "分享期限",
+ "Upload or enter your OTP secret" : "上傳或輸入 OTP 密鑰",
+ "Current OTP settings" : "當前的 OTP 設置 ",
+ "Issuer" : "發行者",
+ "Secret" : "密鑰",
+ "Expiration date" : "失效日期",
+ "No expiration date set" : "未設置失效日期",
+ "Renew interval" : "更新間距",
"Disabled" : "停用",
- "Export" : "滙出",
+ "Day(s)" : "日",
+ "Week(s)" : "星期",
+ "Month(s)" : "月",
+ "Year(s)" : "年",
+ "Password generation settings" : "生成密碼設置",
+ "Password length" : "密碼長度",
+ "Minimum amount of digits" : "最小數字位數",
+ "Use uppercase letters" : "使用大寫字母 ",
+ "Use lowercase letters" : "使用小寫字母",
+ "Use numbers" : "使用數字",
+ "Use special characters" : "使用特殊字符",
+ "Avoid ambiguous characters" : "避免模糊字符",
+ "Require every character type" : "要求全部字符類型",
+ "Export type" : "導出類型",
+ "Export" : "導出",
+ "Enter vault password to confirm export." : "輸入保險庫密碼以確認導出。",
+ "Rename vault" : "重命名保險庫",
+ "New vault name" : "新保險庫名稱",
+ "Change" : "變更",
+ "Change vault key" : "更高保險庫密鑰",
+ "Old vault password" : "舊的保險庫密碼",
+ "New vault password" : "新的保險庫密碼",
+ "Repeat new vault password" : "重複新的保險庫密碼",
+ "Please wait your vault is being updated, do not leave this page." : "請耐心等待,您的保險庫正在更新,請不要離開此頁面。",
+ "Processing" : "正在處理",
+ "Total progress" : "全部進度",
+ "About Passman" : "關於 Passman",
"Version" : "版本",
+ "Donate to support development" : "捐贈支持開發",
+ "Bookmarklet" : "書籤小工具",
+ "Save your passwords with one click." : "一鍵保存密碼",
+ "Drag below button to your bookmark toolbar." : "將下面的按鈕拖拽到您的書籤工具欄。",
+ "Delete vault" : "刪除保險庫",
+ "Vault password" : "保險庫密碼",
+ "This process is irreversible" : "操作不可逆",
+ "Delete my precious passwords" : "刪除我的密碼",
+ "Deleting {{password}}…" : "正在刪除 {{password}}…",
+ "Yes, delete my precious passwords" : "是的,刪除我的密碼",
+ "Import type" : "導入類型",
"Import" : "導入",
- "Uploading" : "Uploading",
- "User" : "User",
+ "Read progress" : "讀取進度",
+ "Upload progress" : "上傳進度 ",
+ "Private Key" : "私鑰",
+ "Public key" : "公鑰",
+ "Key size" : "密鑰長短",
+ "Save keys" : "保存密碼",
+ "Generate sharing keys" : "生成分享密碼",
+ "Generating sharing keys" : "生成分享密碼中",
+ "The password tool scans your password, calculates average cracking time, listing those below the threshold" : "密碼工具會掃描您的密碼,計算平均破解時間,列出低於閾值的密碼",
+ "Minimum password stength" : "最低密碼強度",
+ "Start scan" : "開始掃描",
+ "Result" : "結果",
+ "A total of {{scan_result}} weak credentials were found." : "總共發現 {{scan_result}} 個弱身分驗證。",
+ "Score" : "得分",
+ "Action" : "操作",
+ "Search users…" : "搜尋用戶。。。",
+ "Missing users? Only users that have vaults are shown." : "找不到用戶?只顯示具有保險庫的用戶。",
+ "Cyphering" : "加密中",
+ "Uploading" : "正在上傳。。。",
+ "User" : "用戶",
+ "Crypto time" : "加密時間",
+ "Total time spent encrypting" : "加密總耗時",
+ "Read" : "讀取",
+ "Write" : "寫入",
"Files" : "檔案",
- "Save" : "儲存",
+ "Revisions" : "修訂",
+ "Pending" : "等待",
+ "Enable link sharing" : "啟用連結分享",
+ "Share until date" : "分享到期日",
+ "Expire after views" : "分享將在以下瀏覽次數後失效",
+ "Click \\\"Share\\\" first" : "先點擊\\\"分享\\\"",
+ "Show files" : "顯示檔案",
+ "Details" : "細節",
+ "Hide details" : "隱藏細節",
+ "Password score" : "密碼得分",
+ "Cracking times" : "破解時間",
+ "100 / hour" : "100 / 小時",
+ "Throttled online attack" : "限制在線攻擊",
+ "10 / second" : "10 / 秒",
+ "Unthrottled online attack" : "不限制在線攻擊",
+ "10k / second" : "10k / 秒",
+ "Offline attack, slow hash, many cores" : "離線攻擊,散列緩慢,多核心",
+ "10B / second" : "10B / 秒",
+ "Offline attack, fast hash, many cores" : "離線攻擊,散列快速,多核心",
+ "Match sequence" : "匹配序列",
+ "See match sequence" : "查看匹配序列",
+ "Pattern" : "模式",
+ "Matched word" : "匹配的詞",
+ "Dictionary name" : "字典名稱",
+ "Rank" : "評級",
+ "Reversed" : "反向",
+ "Guesses" : "猜測",
+ "Base guesses" : "基本猜測",
+ "Uppercase variations" : "大寫變體",
+ "l33t-variations" : "l33t變體",
+ "Showing revisions of" : "顯示修訂歷史",
+ "Revision of" : "修訂",
+ "by" : "由",
+ "No revisions found." : "未找到修訂版本。",
+ "Label" : "標籤",
+ "Restore revision" : "復原修訂版本",
+ "Delete revision" : "刪除修訂版本",
+ "Edit credential" : "編輯身分驗證",
+ "Create new credential" : "建立新身分驗證",
+ "Save" : "保存",
"Cancel" : "取消",
"Settings" : "設定",
- "Unshare" : "取消分享",
+ "Share credential {{credential}}" : "共享身分驗證 {{credential}}",
+ "Unshare" : "取消共享",
+ "Showing deleted since" : "顯示自從刪除以來",
+ "Beginning" : "開始",
+ "Showing {{number_filtered}} of {{credential_number}} credentials" : "顯示 {{credential_number}} 個身分驗證中的 {{number_filtered}} 個",
+ "Search for credential…" : "搜尋身分驗證。。。",
+ "Account" : "賬戶",
"Password" : "密碼",
- "URL" : "網址",
- "Notes" : "筆記",
+ "OTP" : "OTP",
+ "E-mail" : "電郵地址",
+ "URL" : "URL",
+ "Notes" : "備註",
+ "Expiry time" : "過期時間",
+ "Changed" : "已更改",
+ "Created" : "已創建",
"Edit" : "編輯",
"Delete" : "刪除",
"Share" : "分享",
- "Date" : "Date",
+ "Recover" : "恢復",
+ "Destroy" : "銷毀",
+ "Use regex" : "使用 regex",
+ "You have incoming share requests." : "您收到分享請求。",
+ "If you want to put the credential in another vault," : "如果您想將身分驗證放在另一個保險庫中,",
+ "log out of this vault and log into the vault you want the shared credential in." : "登出此保險庫並登入到您要分享身分驗證的保險庫。",
+ "Permissions" : "權限",
+ "Received from" : "收到自",
+ "Date" : "日期",
+ "Accept" : "接受",
+ "Decline" : "拒絕",
+ "You have {{session_time}} left before logout." : "登出前還剩 {{session_time}}。",
+ "Your vault has been locked for {{time}} because of {{tries}} failed attempts!" : "由於 {{tries}} 次嘗試失敗,您的保管庫已被鎖定 {{time}}!",
+ "Hello there!" : "您好!",
+ "It does not seem that you have any passwords. Do you want to add one?" : "您似乎尚未設置任何密碼。您要添加一個嗎?",
+ "You don't have good credentials" : "您沒有高強度身分驗證",
+ "You don't have medium credentials" : "您沒有中強度身分驗證",
+ "You don't have bad credentials" : "您沒有弱強度身分驗證",
+ "You don't have expired credentials" : "您沒有已過期的身分驗證",
+ "You don't have deleted credentials" : "您沒有已刪除的身分驗證",
+ "There are no credentials with your selected tags" : "沒有找到帶有您所選的標籤的身分驗證",
+ "There are no credentials matching" : "沒有匹配的身分驗證",
+ "Last accessed" : "上次存取",
+ "Never" : "從不",
+ "No vaults found, why not create one?" : "沒有找到保險庫。何不建立一個?",
+ "Password strength must be at least: {{strength}}" : "密碼強度必須至少為{{strength}}",
+ "Please give your new vault a name." : "請給您的新保險庫起個名字。",
+ "Repeat vault password" : "重複保險庫密碼",
+ "Your sharing keys will have a strength of 1024 bit, which you can change in \\\"Settings\\\" later ." : "您的分享密鑰將具有 1024 位的強度,您可以稍後在“設置”中進行更改。 ",
+ "Create vault" : "建立保險庫",
+ "Go back to vaults" : "回到保險庫",
+ "Please input the password for" : "請輸入密碼",
+ "Set this vault as the default." : "將此保險庫設置為默認。",
+ "Log into this vault automatically." : "自動登入保險庫",
+ "Log out of this vault automatically after: " : "在以下情況下自動登出此保險庫:",
+ "Decrypt vault" : "解密保險庫",
+ "Seems you lost the vault password and you're unable to log in." : "似乎丟失了保險庫密碼,您無法登入。",
+ "If you want this vault to be removed you can request that here." : "如果要刪除此保管庫,可以在此處請求。",
+ "An admin then accepts or declines the request" : "然後,管理員接受或拒絕該請求",
+ "After an admin destroys this vault, all credentials in it will be lost" : "管理員銷毀此保險庫後,其中的所有身分驗證將丟失",
+ "Reason for requesting deletion (optional):" : "請求刪除的原因(可選):",
+ "Request vault destruction" : "請求銷毀保險庫",
+ "Yes, request an admin to destroy this vault" : "是的,請求管理員銷毀此保險庫",
+ "Cancel destruction request" : "取消銷毀請求",
+ "Vault destruction requested" : "已要求銷毀保險庫",
+ "Request removed" : "請求已移除",
+ "Destruction request pending" : "銷毀請求待處理",
+ "Warning! Adding credentials over HTTP is insecure!" : "警告!通過HTTP添加身分驗證是不安全的!",
+ "Logged into {{vault_name}}" : "已登入 {{vault_name}}",
+ "Change vault" : "更改保險庫",
+ "Deleted credentials" : "已刪除的身分驗證",
+ "Logout" : "登出",
+ "Donate" : "捐助",
+ "Show All" : "顯示所有",
+ "Tags" : "標籤",
+ "Search Tags" : "搜索標籤",
+ "Good Strength" : "高強度",
+ "Medium Strength" : "中等強度",
+ "Bad Strength" : "低強度",
+ "Expired" : "已過期",
+ "Filter Tags" : "過濾標籤",
+ "Simple Navigation" : "簡單導航",
+ "Someone has shared a credential with you." : "有人與您分享了一個身分驗證。",
+ "Click here to request it" : "點擊這裡請求",
+ "Loading…" : "正在加載…",
+ "Awwhh… credential not found. Maybe it expired" : "哎呀。。。沒有找到身分驗證。也許過期了",
+ "Mark as Compromised" : "標記為已洩露",
+ "Compromised!" : "已被洩露!",
+ "This password is compromised. You can only remove this warning by changing the password." : "此密碼已被洩露。您只能通過修改密碼來移除此警告。",
+ "email" : "電郵地址",
"Description" : "描述",
- "You created %1$s" : "你新增了%1$s",
- "You deleted %1$s" : "你刪除了%1$s",
- "Saving..." : "儲存中...",
- "seconds ago" : "秒前"
+ "Custom Search:" : "自定義搜尋:",
+ "Revert to defaults" : "恢復默認值",
+ "Error while saving field" : "保存字段時出錯",
+ "A Passman item has been created, modified or deleted" : "Passman 項目已建立,修改或刪除",
+ "A Passman item has expired" : "Passman 項目已過期",
+ "A Passman item has been shared" : "Passman 項目已被分享",
+ "A Passman item has been renamed" : "Passman 項目已重命名",
+ "%1$s has been created by %2$s" : "%1$s 已由 %2$s 建立",
+ "You created %1$s" : "您已建立了 %1$s",
+ "%1$s has been updated by %2$s" : "%1$s 已由 %2$s 更新",
+ "You updated %1$s" : "您已更新了 %1$s",
+ "%2$s has revised %1$s to the revision of %3$s" : "%2$s 已修訂 %1$s 到 %3$s 版本",
+ "You reverted %1$s back to the revision of %3$s" : "您已將 %1$s 還原到 %3$s 的修訂版本",
+ "%3$s has renamed %1$s to %2$s" : "%3$s 已重命名 %1$s 為 %2$s",
+ "You renamed %1$s to %2$s" : "已重命名 %1$s 為 %2$s",
+ "%1$s has been deleted by %2$s" : "%1$s 已被 %2$s 刪除",
+ "You deleted %1$s" : "你已刪除了 %1$s",
+ "%1$s has been recovered by %2$s" : "%1$s 已被 %2$s 還原",
+ "You recovered %1$s" : "你已還原了 %1$s",
+ "%1$s has been permanently deleted by %2$s" : "%1$s 已被 %2$s 永久刪除",
+ "You permanently deleted %1$s" : "您已永久刪除 %1$s",
+ "The password of %1$s has expired, renew it now." : "%1$s 的密碼已過期,請立即更新。",
+ "%1$s has been shared with %2$s" : "%1$s 已與 %2$s 分享",
+ "You received a share request for %1$s from %2$s" : "您收到了來自 %2$s 的 %1$s 的分享請求",
+ "%s has been shared with a link" : "%s 已通過連結分享",
+ "Passwords" : "密碼",
+ "Your credential \"%s\" expired, click here to update the credential." : "您的身分驗證 %s 已過期,請點擊此處更新身分驗證。",
+ "Remind me later" : "稍後提醒我",
+ "Ignore" : "不理會",
+ "%s shared \"%s\" with you. Click here to accept" : "%s 已與您分享了\"%s\"。點擊這裡接受",
+ "%s has declined your share request for \"%s\"." : "%s 已拒絕您的分享請求\"%s\"。",
+ "%s has accepted your share request for \"%s\"." : "%s 已接受您的分享請求\"%s\"。",
+ "Passman" : "Passman",
+ "Passman is a full featured password manager." : "Passman 是一個全能的密碼管理器。",
+ "Passman is a full featured password manager.\nFeatures:\n- Vaults\n- Vault key is never sent to the server\n- Browser extension for easy access to passwords\n- Android app for on the road access\n- Credentials are client side encrypted with 256bit AES\n- Credentials are server side encrypted with 256bit AES\n- Ability to add custom fields to credentials\n- Built-in OTP (One Time Password) generator\n- Password analyzer\n- Share passwords internally and via link in a secure manner.\n- Import from various password managers (KeePass, LastPass, DashLane, ZOHO, Clipperz.is )\nFor an demo of this app visit [https://demo.passman.cc](https://demo.passman.cc)" : "Passman 是一個全功能的密碼管理器。\n功能一覽:\n- 保險庫\n- 保險庫密鑰決不會發給伺服器\n- 瀏覽器擴展,方便使用密碼\n- Andriod 應用程式,便於隨時使用\n- 客戶端身分驗證為256位AES加密\n- 伺服器端身分驗證為256位AES加密\n- 可向身分驗證添加自定義字段\n- 內置 OTP(一次性密碼)生成器\n- 密碼分析器\n- 通過安全連結內部分享密碼\n- 從多種密碼管理器中導入(KeePass, LastPass, DashLane, ZOHO, Clipperz。is )\n應用程式的演示版請訪問 [https://demo。passman。cc](https://demo。passman。cc)",
+ "Unable to get version info" : "無法獲取版本信息 ",
+ "Passman Settings" : "Passman 設定",
+ "GitHub version:" : "GitHub 版本:",
+ "A newer version of Passman is available" : "有較新版本的 Passman 可用",
+ "Password sharing" : "密碼分享",
+ "Credential mover" : "身分驗證移動者",
+ "Vault destruction requests" : "保險庫銷毀請求",
+ "Check for new versions" : "檢查新版本",
+ "Enable HTTPS check" : "啟用HTTPS檢查",
+ "Disable context menu" : "禁用上下文選項單",
+ "Disable JavaScript debugger" : "停用 JavaScript 調試器",
+ "Allow users on this server to share passwords with a link" : "允許此伺服器上的用戶通過連結分享密碼",
+ "Allow users on this server to share passwords with other users" : "允許此伺服器上的用戶與其他用戶分享密碼",
+ "Move credentials from one account to another" : "將身分驗證從一個賬號移動到另一個",
+ "Source account" : "來源賬號",
+ "Destination account" : "目標賬號",
+ "Credentials moved!" : "身分驗證已移動了!",
+ "Requests to destroy vault" : "要求銷毀保險庫",
+ "Request ID" : "請求 ID",
+ "Requested by" : "請求者",
+ "Reason" : "原因",
+ "Click here to request\n\t\t\t\t\tit" : "點擊這裡請求\n\t\t\t\t\t它",
+ "Loading&hellip;" : "正在加載。。。",
+ "Awwhh… could not find the credential. Maybe it expired?" : "哎呀。。。沒有找到身分驗證。也許過期了?",
+ "Expires:" : "過期日:",
+ "Connection to server lost" : "與伺服器斷線了",
+ "Problem loading page, reloading in 5 seconds" : "載入頁面出錯,5秒後重新整理",
+ "Saving …" : "儲存中 。。。",
+ "Dismiss" : "撤銷",
+ "seconds ago" : "幾秒前"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/l10n/zh_TW.js b/l10n/zh_TW.js
index cd1adfbd..31bb96f5 100644
--- a/l10n/zh_TW.js
+++ b/l10n/zh_TW.js
@@ -115,7 +115,7 @@ OC.L10N.register(
"Expires:" : "到期日:",
"Connection to server lost" : "伺服器斷線了",
"Problem loading page, reloading in 5 seconds" : "載入頁面出錯,5 秒後重新整理",
- "Saving..." : "儲存中...",
+ "Saving …" : "儲存中 ...",
"Dismiss" : "取消",
"seconds ago" : "幾秒前"
},
diff --git a/l10n/zh_TW.json b/l10n/zh_TW.json
index 150cdd6b..8456ae17 100644
--- a/l10n/zh_TW.json
+++ b/l10n/zh_TW.json
@@ -113,7 +113,7 @@
"Expires:" : "到期日:",
"Connection to server lost" : "伺服器斷線了",
"Problem loading page, reloading in 5 seconds" : "載入頁面出錯,5 秒後重新整理",
- "Saving..." : "儲存中...",
+ "Saving …" : "儲存中 ...",
"Dismiss" : "取消",
"seconds ago" : "幾秒前"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php
index e89f2661..f83dbcbd 100644
--- a/lib/AppInfo/Application.php
+++ b/lib/AppInfo/Application.php
@@ -24,110 +24,105 @@
namespace OCA\Passman\AppInfo;
use OC\Files\View;
-
-use OCA\Passman\Controller\CredentialController;
-use OCA\Passman\Controller\PageController;
+use OC\ServerContainer;
use OCA\Passman\Controller\ShareController;
-use OCA\Passman\Controller\VaultController;
use OCA\Passman\Middleware\APIMiddleware;
use OCA\Passman\Middleware\ShareMiddleware;
+use OCA\Passman\Notifier;
+use OCA\Passman\Search\Provider;
use OCA\Passman\Service\ActivityService;
-use OCA\Passman\Service\CronService;
use OCA\Passman\Service\CredentialService;
-use OCA\Passman\Service\ShareService;
+use OCA\Passman\Service\CronService;
use OCA\Passman\Service\FileService;
+use OCA\Passman\Service\NotificationService;
+use OCA\Passman\Service\SettingsService;
+use OCA\Passman\Service\ShareService;
use OCA\Passman\Service\VaultService;
use OCA\Passman\Utility\Utils;
-use OCA\Passman\Service\NotificationService;
-Use OCA\Passman\Service\SettingsService;
-use OCP\IConfig;
-use OCP\IDBConnection;
-
use OCP\AppFramework\App;
+use OCP\AppFramework\Bootstrap\IBootContext;
+use OCP\AppFramework\Bootstrap\IBootstrap;
+use OCP\AppFramework\Bootstrap\IRegistrationContext;
+use OCP\IDBConnection;
use OCP\IL10N;
+use OCP\ILogger;
+use OCP\Notification\IManager;
use OCP\Util;
+use Psr\Container\ContainerInterface;
+
+class Application extends App implements IBootstrap {
+ public const APP_ID = 'passman';
-class Application extends App {
public function __construct() {
- parent::__construct('passman');
- $container = $this->getContainer();
- // Allow automatic DI for the View, until we migrated to Nodes API
- $container->registerService(View::class, function () {
+ parent::__construct(self::APP_ID);
+ }
+
+ public function register(IRegistrationContext $context): void {
+ $this->registerNavigationEntry();
+ // $this->registerPersonalPage();
+
+ $context->registerEventListener(
+ BeforeUserDeletedEvent::class,
+ UserDeletedListener::class
+ );
+
+ $context->registerSearchProvider(Provider::class);
+
+ $context->registerService(View::class, function () {
return new View('');
}, false);
- $container->registerService('isCLI', function () {
+
+ $context->registerService('isCLI', function () {
return \OC::$CLI;
});
- /**
- * Middleware
- */
- $container->registerService('ShareMiddleware', function ($c) {
- return new ShareMiddleware($c->query('SettingsService'));
- });
- $container->registerMiddleware('ShareMiddleware');
-
- /**
- * Controllers
- */
- $container->registerService('ShareController', function ($c) {
- $container = $this->getContainer();
- $server = $container->getServer();
+ $context->registerMiddleware(ShareMiddleware::class);
+ $context->registerMiddleware(APIMiddleware::class);
+
+ $context->registerService('ShareController', function (ContainerInterface $c) {
+ $server = $this->getContainer()->getServer();
return new ShareController(
- $c->query('AppName'),
- $c->query('Request'),
+ $c->get('AppName'),
+ $c->get('Request'),
$server->getUserSession()->getUser(),
$server->getGroupManager(),
$server->getUserManager(),
- $c->query('ActivityService'),
- $c->query('VaultService'),
- $c->query('ShareService'),
- $c->query('CredentialService'),
- $c->query('NotificationService'),
- $c->query('FileService'),
- $c->query('SettingsService')
+ $c->get(ActivityService::class),
+ $c->get(VaultService::class),
+ $c->get(ShareService::class),
+ $c->get(CredentialService::class),
+ $c->get(NotificationService::class),
+ $c->get(FileService::class),
+ $c->get(SettingsService::class)
);
});
- /** Cron **/
- $container->registerService('CronService', function ($c) {
+ $context->registerService('CronService', function (ContainerInterface $c) {
return new CronService(
- $c->query('CredentialService'),
- $c->query('Logger'),
- $c->query('Utils'),
- $c->query('NotificationService'),
- $c->query('ActivityService'),
- $c->query('IDBConnection')
+ $c->get(CredentialService::class),
+ $c->get(ILogger::class),
+ $c->get(Utils::class),
+ $c->get(NotificationService::class),
+ $c->get(ActivityService::class),
+ $c->get(IDBConnection::class)
);
});
- $container->registerService('Db', function () {
- return new Db();
+ $context->registerService('Logger', function (ContainerInterface $c) {
+ return $c->get(ServerContainer::class)->getLogger();
});
+ }
- $container->registerService('Logger', function ($c) {
- return $c->query('ServerContainer')->getLogger();
- });
+ public function boot(IBootContext $context): void {
+ $l = \OC::$server->getL10N(self::APP_ID);
+
+ /** @var IManager $manager */
+ $manager = $context->getAppContainer()->get(IManager::class);
+ $manager->registerNotifierService(Notifier::class);
- $container->registerMiddleware('APIMiddleware');
-
- // Aliases for the controllers so we can use the automatic DI
- $container->registerAlias('CredentialController', CredentialController::class);
- $container->registerAlias('PageController', PageController::class);
- $container->registerAlias('VaultController', VaultController::class);
- $container->registerAlias('VaultController', VaultController::class);
- $container->registerAlias('CredentialService', CredentialService::class);
- $container->registerAlias('NotificationService', NotificationService::class);
- $container->registerAlias('ActivityService', ActivityService::class);
- $container->registerAlias('VaultService', VaultService::class);
- $container->registerAlias('FileService', FileService::class);
- $container->registerAlias('ShareService', ShareService::class);
- $container->registerAlias('Utils', Utils::class);
- $container->registerAlias('IDBConnection', IDBConnection::class);
- $container->registerAlias('IConfig', IConfig::class);
- $container->registerAlias('SettingsService', SettingsService::class);
- $container->registerAlias('APIMiddleware', APIMiddleware::class);
+ Util::addTranslations(self::APP_ID);
+ \OCP\App::registerAdmin(self::APP_ID, 'templates/admin.settings');
}
/**
@@ -135,7 +130,6 @@ class Application extends App {
*/
public function registerNavigationEntry() {
$c = $this->getContainer();
- /** @var \OCP\IServerContainer $server */
$server = $c->getServer();
$navigationEntry = function () use ($c, $server) {
return [
@@ -155,4 +149,4 @@ class Application extends App {
public function registerPersonalPage() {
\OCP\App::registerPersonal($this->getContainer()->getAppName(), 'personal');
}
-} \ No newline at end of file
+}
diff --git a/lib/Search/Provider.php b/lib/Search/Provider.php
new file mode 100644
index 00000000..098d9400
--- /dev/null
+++ b/lib/Search/Provider.php
@@ -0,0 +1,110 @@
+<?php
+/**
+ * Nextcloud - passman
+ *
+ * @copyright Copyright (c) 2016, Sander Brand (brantje@gmail.com)
+ * @copyright Copyright (c) 2016, Marcos Zuriaga Miguel (wolfi@wolfi.es)
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Passman\Search;
+
+use OCA\Passman\AppInfo\Application;
+use OCA\Passman\Db\CredentialMapper;
+use OCA\Passman\Db\VaultMapper;
+use OCA\Passman\Service\SettingsService;
+use OCA\Passman\Service\VaultService;
+use OCA\Passman\Utility\Utils;
+use OCP\AppFramework\Db\DoesNotExistException;
+use OCP\AppFramework\Db\MultipleObjectsReturnedException;
+use OCP\IDBConnection;
+use OCP\IL10N;
+use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\Search\IProvider;
+use OCP\Search\ISearchQuery;
+use OCP\Search\SearchResult;
+use OCP\Search\SearchResultEntry;
+
+class Provider implements IProvider {
+
+ private $l10n;
+ private $urlGenerator;
+ private $db;
+ private $settings;
+
+ public function __construct(IL10N $l10n, IURLGenerator $urlGenerator, IDBConnection $db, SettingsService $settings) {
+ $this->l10n = $l10n;
+ $this->urlGenerator = $urlGenerator;
+ $this->db = $db;
+ $this->settings = $settings;
+ }
+
+ public function getId(): string {
+ return Application::APP_ID;
+ }
+
+ public function getName(): string {
+ return $this->l10n->t('Passman');
+ }
+
+ public function getOrder(string $route, array $routeParameters): int {
+ if (strpos($route, Application::APP_ID . '.') === 0) {
+ // Active app, prefer my results
+ return -1;
+ }
+
+ return 25;
+ }
+
+ public function search(IUser $user, ISearchQuery $query): SearchResult {
+ $searchResultEntries = [];
+
+ if ($this->settings->getAppSetting('enable_global_search', 0) === 1) {
+ $VaultService = new VaultService(new VaultMapper($this->db, new Utils()));
+ $Vaults = $VaultService->getByUser($user->getUID());
+ $CredentialMapper = new CredentialMapper($this->db, new Utils());
+
+ foreach ($Vaults as $Vault) {
+ try {
+ $Credentials = $CredentialMapper->getCredentialsByVaultId($Vault->getId(), $Vault->getUserId());
+
+ foreach ($Credentials as $Credential) {
+ if (strpos($Credential->getLabel(), $query->getTerm()) !== false) {
+ try {
+ $searchResultEntries[] = new SearchResultEntry(
+ $this->urlGenerator->imagePath(Application::APP_ID, 'app.svg'),
+ $Credential->getLabel(),
+ \sprintf("Part of Passman vault %s", $Vault->getName()),
+ $this->urlGenerator->linkToRoute('passman.page.index') . "#/vault/" . $Vault->getGuid() . "?show=" . $Credential->getGuid()
+ );
+ } catch (\Exception $e) {
+ }
+ }
+ }
+ } catch (DoesNotExistException $e) {
+ } catch (MultipleObjectsReturnedException $e) {
+ }
+ }
+ }
+
+ return SearchResult::complete(
+ $this->l10n->t(Application::APP_ID),
+ $searchResultEntries
+ );
+ }
+}
diff --git a/lib/Service/SettingsService.php b/lib/Service/SettingsService.php
index 82bbc34b..0b2e8363 100644
--- a/lib/Service/SettingsService.php
+++ b/lib/Service/SettingsService.php
@@ -40,6 +40,7 @@ class SettingsService {
'check_version',
'https_check',
'disable_contextmenu',
+ 'enable_global_search',
'settings_loaded'
);
@@ -57,6 +58,7 @@ class SettingsService {
'server_side_encryption' => $this->config->getAppValue('passman', 'server_side_encryption', 'aes-256-cbc'),
'rounds_pbkdf2_stretching' => $this->config->getAppValue('passman', 'rounds_pbkdf2_stretching', 100),
'disable_debugger' => $this->config->getAppValue('passman', 'disable_debugger', 1),
+ 'enable_global_search' => $this->config->getAppValue('passman', 'enable_global_search', 0),
'settings_loaded' => 1
);
}
@@ -118,4 +120,4 @@ class SettingsService {
$value = intval($this->getAppSetting($setting, false));
return ($value === 1);
}
-} \ No newline at end of file
+}
diff --git a/templates/part.admin.php b/templates/part.admin.php
index 3b502527..1f583cf3 100644
--- a/templates/part.admin.php
+++ b/templates/part.admin.php
@@ -106,6 +106,14 @@ $ciphers = openssl_get_cipher_methods();
</label>
</p>
<p>
+ <input type="checkbox" name="passman_enable_global_search"
+ id="passman_enable_global_search" class="checkbox"
+ value="0"/>
+ <label for="passman_enable_global_search">
+ <?php p($l->t('Enable global search')); ?>
+ </label>
+ </p>
+ <p>
<label for="vault_key_strength">Minimum vault key
strength:</label>
<select name="vault_key_strength" id="vault_key_strength">